springboot編程式事務(wù)TransactionTemplate的使用說明
TransactionTemplate的使用
總結(jié):在類中注入TransactionTemplate,即可在springboot中使用編程式事務(wù)。
spring支持編程式事務(wù)管理和聲明式事務(wù)管理兩種方式。
編程式事務(wù)管理使用TransactionTemplate或者直接使用底層的PlatformTransactionManager。對(duì)于編程式事務(wù)管理,spring推薦使用TransactionTemplate。
聲明式事務(wù)管理建立在AOP之上的。其本質(zhì)是對(duì)方法前后進(jìn)行攔截,然后在目標(biāo)方法開始之前創(chuàng)建或者加入一個(gè)事務(wù),在執(zhí)行完目標(biāo)方法之后根據(jù)執(zhí)行情況提交或者回滾事務(wù)。對(duì)于聲明式事務(wù)管理,springboot中推薦使用@Transactional注解。
1.為何用?
多數(shù)情況下,方法上聲明@Transactional注解聲明事務(wù)即可,簡(jiǎn)單、快捷、方便,但@Transactional聲明式事務(wù)的可控性太弱了,只可在方法或類上聲明,做不到細(xì)粒度的事務(wù)控制。
如果一個(gè)方法前10條sql都是select查詢語句,只有最后2條sql是update語句,那么只對(duì)最后2條sql做事務(wù)即可。
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事務(wù)管理器以及自動(dòng)注入配置類DataSourceTransactionManagerAutoConfiguration。
代碼中使用,在使用bean中注入TransactionTemplate即可:
@Service public class TestServiceImpl { ? ? @Resource ? ? private TransactionTemplate transactionTemplate; ? ? public Object testTransaction() { ? ? ? ? //數(shù)據(jù)庫查詢 ? ? ? ? dao.select(1); ? ? ? ? return transactionTemplate.execute(status -> { ? ? ? ? ? ? //數(shù)據(jù)庫新增 ? ? ? ? ? ? dao.insert(2); ? ? ? ? ? ? dao.insert(3); ? ? ? ? ? ? return new Object(); ? ? ? ? }); ? ? } }
TransactionTemplate簡(jiǎn)單使用
/** * 事務(wù)模板 * @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; } }); } }
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring MVC的項(xiàng)目準(zhǔn)備和連接建立方法
SpringWebMVC是基于Servlet API的Web框架,屬于Spring框架的一部分,主要用于簡(jiǎn)化Web應(yīng)用程序的開發(fā),SpringMVC通過控制器接收請(qǐng)求,使用模型處理數(shù)據(jù),并通過視圖展示結(jié)果,感興趣的朋友跟隨小編一起看看吧2024-10-10SpringBoot使用Atomikos技術(shù)整合多數(shù)據(jù)源的實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot使用Atomikos技術(shù)整合多數(shù)據(jù)源的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03SpringCloud微服務(wù)網(wǎng)關(guān)限流方式
這篇文章主要介紹了SpringCloud微服務(wù)網(wǎng)關(guān)限流方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08詳解Spring 基于 Aspect 注解的增強(qiáng)實(shí)現(xiàn)
本篇文章主要介紹了詳解Spring 基于 Aspect 注解的增強(qiáng)實(shí)現(xiàn),非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-04-04Java基礎(chǔ)入門篇之邏輯控制練習(xí)題與猜數(shù)字游戲
猜數(shù)字游戲是一款經(jīng)典的游戲,該游戲說簡(jiǎn)單也很簡(jiǎn)單,說不簡(jiǎn)單確實(shí)也很難,這篇文章主要給大家介紹了關(guān)于Java基礎(chǔ)入門篇之邏輯控制練習(xí)題與猜數(shù)字游戲的相關(guān)資料,需要的朋友可以參考下2023-06-06Java getResource()如何獲取class文件目錄位置
這篇文章主要介紹了Java getResource()如何獲取class文件目錄位置,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12