本篇內容主要講解“springboot編程式事務TransactionTemplate如何使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“springboot編程式事務TransactionTemplate如何使用”吧!
總結:在類中注入TransactionTemplate,即可在springboot中使用編程式事務。
spring支持編程式事務管理和聲明式事務管理兩種方式。
編程式事務管理使用TransactionTemplate或者直接使用底層的PlatformTransactionManager。對于編程式事務管理,spring推薦使用TransactionTemplate。
聲明式事務管理建立在AOP之上的。其本質是對方法前后進行攔截,然后在目標方法開始之前創建或者加入一個事務,在執行完目標方法之后根據執行情況提交或者回滾事務。對于聲明式事務管理,springboot中推薦使用@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>
springboot中引入mybatis-spring-boot-starter依賴包即可。
mybatis-spring-boot-starter依賴包中包含了spring-boot-starter-jdbc的依賴,spring-boot-starter-jdbc中包含DataSourceTransactionManager事務管理器以及自動注入配置類DataSourceTransactionManagerAutoConfiguration。
代碼中使用,在使用bean中注入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如何使用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。