요약: springboot에서 프로그래밍 방식 트랜잭션을 사용하려면 TransactionTemplate을 클래스에 삽입하세요.
spring은 프로그래밍 방식의 트랜잭션 관리와 선언적 트랜잭션 관리를 모두 지원합니다.
프로그래밍 방식의 트랜잭션 관리는 TransactionTemplate을 사용하거나 기본 PlatformTransactionManager를 직접 사용합니다. Spring은 프로그래밍 트랜잭션을 관리하기 위해 TransactionTemplate을 사용할 것을 권장합니다.
선언적 트랜잭션 관리는 AOP를 기반으로 구축되었습니다. 그 본질은 메소드 전후를 가로채고, 타겟 메소드가 시작되기 전에 트랜잭션을 생성하거나 조인하는 것이며, 타겟 메소드가 실행된 후 실행 상태에 따라 트랜잭션이 커밋되거나 롤백됩니다. Spring Boot는 선언적 트랜잭션 관리를 구현하기 위해 @Transactional 주석을 사용할 것을 권장합니다.
대부분의 경우 트랜잭션을 선언하는 방법에 @Transactional 주석을 선언하는 것으로 충분합니다. 간단하고 빠르며 편리하지만 @Transactional 선언적 트랜잭션의 제어성은 너무 약합니다. 메서드나 클래스에 대해 자세히 설명할 수 없습니다.
메서드의 처음 10개의 sql 문이 모두 select 쿼리 문이고 마지막 2개의 sql 문만 update 문인 경우 마지막 2개의 sql 문만 처리할 수 있습니다.
<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(); }); } }
/** * 事务模板 * @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,'aaa','aaa','aaa')"); int i = 1/0; jdbcTemplate.execute("insert into user value (2,'aaa','aaa','aaa')"); } public void test2(){ getRequiresNewTransactionTemplate() // transactionTemplate .execute(new TransactionCallback<Void>() { @Override public Void doInTransaction(TransactionStatus status) { jdbcTemplate.execute("insert into user value (11,'BBBB','aaa','aaa')"); int i = 1/0; jdbcTemplate.execute("insert into user value (21,'aaa','NNNN','aaa')"); return null; } }); } }
위 내용은 springboot 프로그래밍 트랜잭션 TransactionTemplate을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!