您好,欢迎访问一九零五行业门户网

springboot编程式事务TransactionTemplate如何使用

transactiontemplate的使用总结:在类中注入transactiontemplate,即可在springboot中使用编程式事务。
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>
springboot中引入mybatis-spring-boot-starter依赖包即可。
mybatis-spring-boot-starter依赖包中包含了spring-boot-starter-jdbc的依赖,spring-boot-starter-jdbc中包含datasourcetransactionmanager事务管理器以及自动注入配置类datasourcetransactionmanagerautoconfiguration。
代码中使用,在使用bean中注入transactiontemplate即可:
@servicepublic 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; } }
@servicepublic 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如何使用的详细内容。
其它类似信息

推荐信息