欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Spring Boot 事務(wù)的使用

 更新時(shí)間:2017年04月10日 11:11:13   投稿:mrr  
spring Boot 使用事務(wù)非常簡(jiǎn)單,首先使用注解 @EnableTransactionManagement 開(kāi)啟事務(wù)支持后,然后在訪問(wèn)數(shù)據(jù)庫(kù)的Service方法上添加注解 @Transactional 便可。接下來(lái)通過(guò)本文重點(diǎn)給大家介紹spring boot事務(wù)的使用,需要的的朋友參考下吧

spring Boot 使用事務(wù)非常簡(jiǎn)單,首先使用注解 @EnableTransactionManagement 開(kāi)啟事務(wù)支持后,然后在訪問(wèn)數(shù)據(jù)庫(kù)的Service方法上添加注解 @Transactional 便可。

關(guān)于事務(wù)管理器,不管是JPA還是JDBC等都實(shí)現(xiàn)自接口 PlatformTransactionManager 如果你添加的是 spring-boot-starter-jdbc 依賴(lài),框架會(huì)默認(rèn)注入 DataSourceTransactionManager 實(shí)例。如果你添加的是 spring-boot-starter-data-jpa 依賴(lài),框架會(huì)默認(rèn)注入 JpaTransactionManager 實(shí)例。

你可以在啟動(dòng)類(lèi)中添加如下方法,Debug測(cè)試,就能知道自動(dòng)注入的是 PlatformTransactionManager 接口的哪個(gè)實(shí)現(xiàn)類(lèi)。

@EnableTransactionManagement // 啟注解事務(wù)管理,等同于xml配置方式的 <tx:annotation-driven />
@SpringBootApplication
public class ProfiledemoApplication {
 @Bean
 public Object testBean(PlatformTransactionManager platformTransactionManager){
 System.out.println(">>>>>>>>>>" + platformTransactionManager.getClass().getName());
 return new Object();
 }
 public static void main(String[] args) {
 SpringApplication.run(ProfiledemoApplication.class, args);
 }
}

這些SpringBoot為我們自動(dòng)做了,這些對(duì)我們并不透明,如果你項(xiàng)目做的比較大,添加的持久化依賴(lài)比較多,我們還是會(huì)選擇人為的指定使用哪個(gè)事務(wù)管理器。

代碼如下:

@EnableTransactionManagement
@SpringBootApplication
public class ProfiledemoApplication {
 // 其中 dataSource 框架會(huì)自動(dòng)為我們注入
 @Bean
 public PlatformTransactionManager txManager(DataSource dataSource) {
 return new DataSourceTransactionManager(dataSource);
 }
 @Bean
 public Object testBean(PlatformTransactionManager platformTransactionManager) {
 System.out.println(">>>>>>>>>>" + platformTransactionManager.getClass().getName());
 return new Object();
 }
 public static void main(String[] args) {
 SpringApplication.run(ProfiledemoApplication.class, args);
 }
}

在Spring容器中,我們手工注解@Bean 將被優(yōu)先加載,框架不會(huì)重新實(shí)例化其他的 PlatformTransactionManager 實(shí)現(xiàn)類(lèi)。

然后在Service中,被 @Transactional 注解的方法,將支持事務(wù)。如果注解在類(lèi)上,則整個(gè)類(lèi)的所有方法都默認(rèn)支持事務(wù)。

對(duì)于同一個(gè)工程中存在多個(gè)事務(wù)管理器要怎么處理,請(qǐng)看下面的實(shí)例,具體說(shuō)明請(qǐng)看代碼中的注釋。

@EnableTransactionManagement // 開(kāi)啟注解事務(wù)管理,等同于xml配置文件中的 <tx:annotation-driven />
@SpringBootApplication
public class ProfiledemoApplication implements TransactionManagementConfigurer {
 @Resource(name="txManager2")
 private PlatformTransactionManager txManager2;
 // 創(chuàng)建事務(wù)管理器1
 @Bean(name = "txManager1")
 public PlatformTransactionManager txManager(DataSource dataSource) {
 return new DataSourceTransactionManager(dataSource);
 }
 // 創(chuàng)建事務(wù)管理器2
 @Bean(name = "txManager2")
 public PlatformTransactionManager txManager2(EntityManagerFactory factory) {
 return new JpaTransactionManager(factory);
 }
 // 實(shí)現(xiàn)接口 TransactionManagementConfigurer 方法,其返回值代表在擁有多個(gè)事務(wù)管理器的情況下默認(rèn)使用的事務(wù)管理器
 @Override
 public PlatformTransactionManager annotationDrivenTransactionManager() {
 return txManager2;
 }
 public static void main(String[] args) {
 SpringApplication.run(ProfiledemoApplication.class, args);
 }
}
@Component
public class DevSendMessage implements SendMessage {
 // 使用value具體指定使用哪個(gè)事務(wù)管理器
 @Transactional(value="txManager1")
 @Override
 public void send() {
 System.out.println(">>>>>>>>Dev Send()<<<<<<<<");
 send2();
 }
 // 在存在多個(gè)事務(wù)管理器的情況下,如果使用value具體指定
 // 則默認(rèn)使用方法 annotationDrivenTransactionManager() 返回的事務(wù)管理器
 @Transactional
 public void send2() {
 System.out.println(">>>>>>>>Dev Send2()<<<<<<<<");
 }
}

注:

如果Spring容器中存在多個(gè) PlatformTransactionManager 實(shí)例,并且沒(méi)有實(shí)現(xiàn)接口 TransactionManagementConfigurer 指定默認(rèn)值,在我們?cè)诜椒ㄉ鲜褂米⒔?@Transactional 的時(shí)候,就必須要用value指定,如果不指定,則會(huì)拋出異常。

對(duì)于系統(tǒng)需要提供默認(rèn)事務(wù)管理的情況下,實(shí)現(xiàn)接口 TransactionManagementConfigurer 指定。

對(duì)有的系統(tǒng),為了避免不必要的問(wèn)題,在業(yè)務(wù)中必須要明確指定 @Transactional 的 value 值的情況下。不建議實(shí)現(xiàn)接口 TransactionManagementConfigurer,這樣控制臺(tái)會(huì)明確拋出異常,開(kāi)發(fā)人員就不會(huì)忘記主動(dòng)指定。

參考閱讀:

詳解SpringBoot的事務(wù)管理

Spring Boot 快速入門(mén)指南

Spring Boot 快速入門(mén)教程

以上所述是小編給大家介紹的Spring Boot 事務(wù)的使用,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Java基礎(chǔ)之Comparable與Comparator概述

    Java基礎(chǔ)之Comparable與Comparator概述

    這篇文章主要介紹了Java基礎(chǔ)之Comparable與Comparator詳解,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • java基礎(chǔ)理論Stream的Filter與謂詞邏輯

    java基礎(chǔ)理論Stream的Filter與謂詞邏輯

    這篇文章主要為大家介紹了java基礎(chǔ)理論Stream的Filter與謂詞邏輯,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • Spring Boot文件上傳簡(jiǎn)單實(shí)例代碼

    Spring Boot文件上傳簡(jiǎn)單實(shí)例代碼

    在本篇文章里小編給大家分享的是關(guān)于Spring Boot 文件上傳簡(jiǎn)易教程以及相關(guān)知識(shí)點(diǎn),需要的朋友們參考下。
    2019-08-08
  • Compare And Swap底層原理及代碼示例詳解

    Compare And Swap底層原理及代碼示例詳解

    這篇文章主要介紹了Compare And Swap底層原理及代碼示例詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Java執(zhí)行shell命令的實(shí)現(xiàn)

    Java執(zhí)行shell命令的實(shí)現(xiàn)

    本文主要介紹了Java執(zhí)行shell命令的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • 帶你了解Java數(shù)據(jù)結(jié)構(gòu)和算法之?dāng)?shù)組

    帶你了解Java數(shù)據(jù)結(jié)構(gòu)和算法之?dāng)?shù)組

    這篇文章主要為大家介紹了Java數(shù)據(jù)結(jié)構(gòu)和算法之?dāng)?shù)組,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-01-01
  • java面試應(yīng)用上線后Cpu使用率飆升如何排查

    java面試應(yīng)用上線后Cpu使用率飆升如何排查

    這篇文章主要為大家介紹了java面試中應(yīng)用上線后Cpu使用率飆升如何排查的方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • 解析java中的error該不該捕獲

    解析java中的error該不該捕獲

    這篇文章主要介紹了java中的error該不該捕獲,需要的朋友可以參考下
    2014-02-02
  • java依賴(lài)混亂存在的問(wèn)題與解決方案

    java依賴(lài)混亂存在的問(wèn)題與解決方案

    這篇文章主要為大家介紹了java依賴(lài)混亂存在的問(wèn)題與解決方案,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • SpringBoot?實(shí)現(xiàn)全局異常處理的示例代碼

    SpringBoot?實(shí)現(xiàn)全局異常處理的示例代碼

    本文主要介紹了SpringBoot實(shí)現(xiàn)全局異常處理,全局異常處理器的使用可以顯著提高Spring Boot項(xiàng)目的代碼質(zhì)量和可維護(hù)性,減少冗余代碼,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-06-06

最新評(píng)論