> Java > java지도 시간 > springboot 프로그래밍 트랜잭션 TransactionTemplate을 사용하는 방법

springboot 프로그래밍 트랜잭션 TransactionTemplate을 사용하는 방법

PHPz
풀어 주다: 2023-06-01 17:40:24
앞으로
2100명이 탐색했습니다.

TransactionTemplate 사용

요약: springboot에서 프로그래밍 방식 트랜잭션을 사용하려면 TransactionTemplate을 클래스에 삽입하세요.

spring은 프로그래밍 방식의 트랜잭션 관리와 선언적 트랜잭션 관리를 모두 지원합니다.

프로그래밍 방식의 트랜잭션 관리는 TransactionTemplate을 사용하거나 기본 PlatformTransactionManager를 직접 사용합니다. Spring은 프로그래밍 트랜잭션을 관리하기 위해 TransactionTemplate을 사용할 것을 권장합니다.

선언적 트랜잭션 관리는 AOP를 기반으로 구축되었습니다. 그 본질은 메소드 전후를 가로채고, 타겟 메소드가 시작되기 전에 트랜잭션을 생성하거나 조인하는 것이며, 타겟 메소드가 실행된 후 실행 상태에 따라 트랜잭션이 커밋되거나 롤백됩니다. Spring Boot는 선언적 트랜잭션 관리를 구현하기 위해 @Transactional 주석을 사용할 것을 권장합니다.

1. 왜 사용하나요?

대부분의 경우 트랜잭션을 선언하는 방법에 @Transactional 주석을 선언하는 것으로 충분합니다. 간단하고 빠르며 편리하지만 @Transactional 선언적 트랜잭션의 제어성은 너무 약합니다. 메서드나 클래스에 대해 자세히 설명할 수 없습니다.

메서드의 처음 10개의 sql 문이 모두 select 쿼리 문이고 마지막 2개의 sql 문만 update 문인 경우 마지막 2개의 sql 문만 처리할 수 있습니다.

2.

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.0</version>
        </dependency>
로그인 후 복사

를 사용하여 mybatis-spring-boot-starter 종속성 패키지를 springboot에 도입하는 방법.

mybatis-spring-boot-starter 종속성 패키지에는 spring-boot-starter-jdbc의 종속성이 포함되어 있습니다. spring-boot-starter-jdbc에는 DataSourceTransactionManager 트랜잭션 관리자와 자동 주입 구성 클래스 DataSourceTransactionManagerAutoConfiguration이 포함되어 있습니다.

코드에서 사용하려면 TransactionTemplate을 빈에 삽입하세요.

@Service
public class TestServiceImpl {
    @Resource
    private TransactionTemplate transactionTemplate;
 
    public Object testTransaction() {
        //数据库查询
        dao.select(1);
        return transactionTemplate.execute(status -> {
            //数据库新增
            dao.insert(2);
            dao.insert(3);
            return new Object();
        });
    }
}
로그인 후 복사

TransactionTemplate은 사용이 간단합니다

/**
 * 事务模板
 * @author zz
 *
 */ 
public class TransactionTemplateSupport {
 
	@Autowired
	private PlatformTransactionManager transactionManager;	
	private TransactionTemplate requiredTransactionTemplate;	
	protected TransactionTemplate getRequiresNewTransactionTemplate(){
		if (requiredTransactionTemplate == null){
			requiredTransactionTemplate = new TransactionTemplate(transactionManager);
			requiredTransactionTemplate.setPropagationBehavior(TransactionTemplate.PROPAGATION_REQUIRED);
		//	requiredTransactionTemplate.setReadOnly(true);
		//	requiredTransactionTemplate.setTimeout(30000);
		}
		
		return requiredTransactionTemplate;
	} 
}
로그인 후 복사
 @Service
public class TestTransaction extends TransactionTemplateSupport  { 
    @Autowired
    private JdbcTemplate jdbcTemplate ;
 
    @Autowired
    private TransactionTemplate transactionTemplate;
 
   // @Transactional
    public void test(){
 
        jdbcTemplate.execute("insert into user value (1,&#39;aaa&#39;,&#39;aaa&#39;,&#39;aaa&#39;)"); 
        int i = 1/0; 
        jdbcTemplate.execute("insert into user value (2,&#39;aaa&#39;,&#39;aaa&#39;,&#39;aaa&#39;)"); 
    } 
 
    public void test2(){ 
      getRequiresNewTransactionTemplate()
      //  transactionTemplate
                .execute(new TransactionCallback<Void>() {
 
            @Override
            public Void doInTransaction(TransactionStatus status) {  
                jdbcTemplate.execute("insert into user value (11,&#39;BBBB&#39;,&#39;aaa&#39;,&#39;aaa&#39;)");
 
                int i = 1/0; 
                jdbcTemplate.execute("insert into user value (21,&#39;aaa&#39;,&#39;NNNN&#39;,&#39;aaa&#39;)");  
                return null;
            }
        });
    }  
}
로그인 후 복사

위 내용은 springboot 프로그래밍 트랜잭션 TransactionTemplate을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿