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