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

SpringBoot事務注解超詳細講解

 更新時間:2023年11月27日 09:11:00   作者:Kero小柯  
這篇文章主要給大家介紹了關于SpringBoot事務注解的相關資料,在Spring Boot中,事務管理是一個非常重要的概念,我們可以使用事務注解來控制事務的行為,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

@Transactional

spring 事務注解

1.簡單開啟事務管理

@EnableTransactionManagement // 啟注解事務管理,等同于xml配置方式的 <tx:annotation-driven />

2.事務注解詳解

默認遇到throw new RuntimeException(“…”);會回滾 

需要捕獲的throw new Exception(“…”);不會回滾

指定回滾

@Transactional(rollbackFor=Exception.class) 
    public void methodName() {
       // 不會回滾
       throw new Exception("...");
    }

指定不回滾

@Transactional(noRollbackFor=Exception.class)
    public ItimDaoImpl getItemDaoImpl() {
        // 會回滾
        throw new RuntimeException("注釋");
    }

如果有事務,那么加入事務,沒有的話新建一個(不寫的情況下)

@Transactional(propagation=Propagation.REQUIRED)

容器不為這個方法開啟事務

@Transactional(propagation=Propagation.NOT_SUPPORTED)

readOnly=true只讀,不能更新,刪除

@Transactional (propagation = Propagation.REQUIRED,readOnly=true)

設置超時時間

@Transactional (propagation = Propagation.REQUIRED,timeout=30)

設置數據庫隔離級別

@Transactional (propagation = Propagation.REQUIRED,isolation=Isolation.DEFAULT)

3.指定事務管理器

spring Boot 使用事務非常簡單,首先使用注解 @EnableTransactionManagement 開啟事務支持后,然后在訪問數據庫的Service方法上添加注解 @Transactional 便可。

關于事務管理器,不管是JPA還是JDBC等都實現自接口 PlatformTransactionManager 如果你添加的是 spring-boot-starter-jdbc 依賴,框架會默認注入 DataSourceTransactionManager 實例。如果你添加的是 spring-boot-starter-data-jpa 依賴,框架會默認注入 JpaTransactionManager 實例。

你可以在啟動類中添加如下方法,Debug測試,就能知道自動注入的是 PlatformTransactionManager 接口的哪個實現類。

3.1 打印項目事務管理器

@EnableTransactionManagement // 啟注解事務管理,等同于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為我們自動做了,這些對我們并不透明,如果你項目做的比較大,添加的持久化依賴比較多,我們還是會選擇人為的指定使用哪個事務管理器。 
代碼如下:

3.2 指定事務管理器

@EnableTransactionManagement
@SpringBootApplication
public class ProfiledemoApplication {

    // 其中 dataSource 框架會自動為我們注入
    @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)先加載,框架不會重新實例化其他的 PlatformTransactionManager 實現類。

然后在Service中,被 @Transactional 注解的方法,將支持事務。如果注解在類上,則整個類的所有方法都默認支持事務。

對于同一個工程中存在多個事務管理器要怎么處理,請看下面的實例,具體說明請看代碼中的注釋。

3.3 使用指定的事務管理器

@EnableTransactionManagement // 開啟注解事務管理,等同于xml配置文件中的 <tx:annotation-driven />
@SpringBootApplication
public class ProfiledemoApplication implements TransactionManagementConfigurer {

    @Resource(name="txManager2")
    private PlatformTransactionManager txManager2;

    // 創(chuàng)建事務管理器1
    @Bean(name = "txManager1")
    public PlatformTransactionManager txManager(DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    // 創(chuàng)建事務管理器2
    @Bean(name = "txManager2")
    public PlatformTransactionManager txManager2(EntityManagerFactory factory) {
        return new JpaTransactionManager(factory);
    }

    // 實現接口 TransactionManagementConfigurer 方法,其返回值代表在擁有多個事務管理器的情況下默認使用的事務管理器
    @Override
    public PlatformTransactionManager annotationDrivenTransactionManager() {
        return txManager2;
    }

    public static void main(String[] args) {
        SpringApplication.run(ProfiledemoApplication.class, args);
    }

}

@Component
public class DevSendMessage implements SendMessage {

    // 使用value具體指定使用哪個事務管理器
    @Transactional(value="txManager1")
    @Override
    public void send() {
        System.out.println(">>>>>>>>Dev Send()<<<<<<<<");
        send2();
    }

    // 在存在多個事務管理器的情況下,如果使用value具體指定
    // 則默認使用方法 annotationDrivenTransactionManager() 返回的事務管理器
    @Transactional
    public void send2() {
        System.out.println(">>>>>>>>Dev Send2()<<<<<<<<");
    }

}

總結 

到此這篇關于SpringBoot事務注解超詳細講解的文章就介紹到這了,更多相關SpringBoot事務注解內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Spring的事件和監(jiān)聽器-同步與異步詳解

    Spring的事件和監(jiān)聽器-同步與異步詳解

    這篇文章主要介紹了Spring的事件和監(jiān)聽器-同步與異步詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 詳解Java無需解壓直接讀取Zip文件和文件內容

    詳解Java無需解壓直接讀取Zip文件和文件內容

    本篇文章主要介紹了詳解Java無需解壓直接讀取Zip文件和文件內容,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • spring boot udp或者tcp接收數據的實例詳解

    spring boot udp或者tcp接收數據的實例詳解

    這篇文章主要介紹了spring boot udp或者tcp接收數據,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • 基于Java SSM框架開發(fā)圖書借閱系統源代碼

    基于Java SSM框架開發(fā)圖書借閱系統源代碼

    本文給大家介紹了基于Java SSM框架開發(fā)圖書借閱系統,開發(fā)環(huán)境基于idea2020+mysql數據庫,前端框架使用bootstrap4框架,完美了實現圖書借閱系統,喜歡的朋友快來體驗吧
    2021-05-05
  • Java進階:JNI使用技巧點滴

    Java進階:JNI使用技巧點滴

    Java進階:JNI使用技巧點滴...
    2006-12-12
  • 解決Spring?AOP攔截抽象類(父類)中方法失效問題

    解決Spring?AOP攔截抽象類(父類)中方法失效問題

    這篇文章主要介紹了解決Spring?AOP攔截抽象類(父類)中方法失效問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • java實現變更文件查詢的方法

    java實現變更文件查詢的方法

    這篇文章主要介紹了java實現變更文件查詢的方法,可通過java查詢文件最后修改時間的方法實現查找變更文件的功能,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • mybatis-plus自定義排序的實現

    mybatis-plus自定義排序的實現

    本文主要介紹了mybatis-plus自定義排序的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • SpringCloud組件OpenFeign之攔截器解讀

    SpringCloud組件OpenFeign之攔截器解讀

    這篇文章主要介紹了SpringCloud組件OpenFeign之攔截器用法。具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Spring Boot動態(tài)加載Jar包與動態(tài)配置實現

    Spring Boot動態(tài)加載Jar包與動態(tài)配置實現

    隨著項目的不斷演進和業(yè)務需求的增長,很多場景下需要實現系統的動態(tài)性和靈活性,本文主要介紹了Spring Boot動態(tài)加載Jar包與動態(tài)配置實現,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02

最新評論