最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot事務(wù)注解超詳細(xì)講解

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

@Transactional

spring 事務(wù)注解

1.簡單開啟事務(wù)管理

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

2.事務(wù)注解詳解

默認(rèn)遇到throw new RuntimeException(“…”);會(huì)回滾 

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

指定回滾

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

指定不回滾

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

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

@Transactional(propagation=Propagation.REQUIRED)

容器不為這個(gè)方法開啟事務(wù)

@Transactional(propagation=Propagation.NOT_SUPPORTED)

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

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

設(shè)置超時(shí)時(shí)間

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

設(shè)置數(shù)據(jù)庫隔離級別

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

3.指定事務(wù)管理器

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

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

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

3.1 打印項(xiàng)目事務(wù)管理器

@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)做了,這些對我們并不透明,如果你項(xiàng)目做的比較大,添加的持久化依賴比較多,我們還是會(huì)選擇人為的指定使用哪個(gè)事務(wù)管理器。 
代碼如下:

3.2 指定事務(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)類。

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

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

3.3 使用指定的事務(wù)管理器

@EnableTransactionManagement // 開啟注解事務(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()<<<<<<<<");
    }

}

總結(jié) 

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

相關(guān)文章

  • java字符串切割實(shí)例學(xué)習(xí)(獲取文件名)

    java字符串切割實(shí)例學(xué)習(xí)(獲取文件名)

    在Java中處理一些路徑相關(guān)的問題的時(shí)候,如要取出ie瀏覽器上傳文件的文件名,由于ie會(huì)把整個(gè)文件路徑都作為文件名上傳,需要用java.lang.String中的replaceAll或者split來處理,下面看看使用方法
    2013-12-12
  • APP轉(zhuǎn)盤抽獎(jiǎng)Java服務(wù)端接口詳解

    APP轉(zhuǎn)盤抽獎(jiǎng)Java服務(wù)端接口詳解

    這篇文章主要為大家詳細(xì)介紹了APP轉(zhuǎn)盤抽獎(jiǎng)Java服務(wù)端接口,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • 在IDEA中搭建最小可用SpringMVC項(xiàng)目(純Java配置)

    在IDEA中搭建最小可用SpringMVC項(xiàng)目(純Java配置)

    這篇文章主要介紹了在IDEA中搭建最小可用SpringMVC項(xiàng)目(純Java配置),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • JavaEE開發(fā)之SpringMVC中的自定義消息轉(zhuǎn)換器與文件上傳

    JavaEE開發(fā)之SpringMVC中的自定義消息轉(zhuǎn)換器與文件上傳

    本篇文章主要介紹了SpringMVC的相關(guān)知識。同時(shí)也會(huì)介紹到j(luò)s、css這些靜態(tài)文件的加載配置,以及服務(wù)器推送的兩種實(shí)現(xiàn)方式并且給出了兩者的區(qū)別。下面跟著小編一起來看下吧
    2017-04-04
  • java8學(xué)習(xí)教程之函數(shù)引用的使用方法

    java8學(xué)習(xí)教程之函數(shù)引用的使用方法

    這篇文章主要給大家介紹了關(guān)于java8學(xué)習(xí)教程之函數(shù)引用的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)下吧。
    2017-09-09
  • springboot實(shí)現(xiàn)配置文件關(guān)鍵信息加解密

    springboot實(shí)現(xiàn)配置文件關(guān)鍵信息加解密

    在項(xiàng)目配置文件中常常會(huì)配置如數(shù)據(jù)庫連接信息,redis連接信息等,連接密碼明文配置在配置文件中會(huì)很不安全,所以本文就來聊聊如何使用springboot實(shí)現(xiàn)配置文件關(guān)鍵信息加解密吧
    2025-05-05
  • Java中的OpenTracing使用實(shí)例

    Java中的OpenTracing使用實(shí)例

    這篇文章主要介紹了Java中的OpenTracing使用實(shí)例,主要的OpenTracing API將所有主要組件聲明為接口以及輔助類,例如Tracer,Span,SpanContext,Scope,ScopeManager,Format(用映射定義通用的SpanContext注入和提取格式),需要的朋友可以參考下
    2024-01-01
  • Springboot核心機(jī)制詳細(xì)介紹

    Springboot核心機(jī)制詳細(xì)介紹

    SpringBoot的核心機(jī)制包括自動(dòng)配置、起步依賴、主類和運(yùn)行器、以及嵌入式服務(wù)器等,通過這些機(jī)制,SpringBoot簡化了應(yīng)用開發(fā)過程,本文給大家介紹Springboot核心機(jī)制,感興趣的朋友一起看看吧
    2024-11-11
  • 使用Java將字符串轉(zhuǎn)換為十進(jìn)制ASCII碼的代碼實(shí)現(xiàn)

    使用Java將字符串轉(zhuǎn)換為十進(jìn)制ASCII碼的代碼實(shí)現(xiàn)

    在 Java 開發(fā)中,將字符串轉(zhuǎn)換為十進(jìn)制 ASCII 碼是一個(gè)看似簡單、實(shí)則蘊(yùn)含豐富計(jì)算機(jī)科學(xué)基礎(chǔ)的操作,本文將從編碼本質(zhì)、Java 內(nèi)部機(jī)制、常見場景、邊界考量以及最佳實(shí)踐等維度,系統(tǒng)性地探討這一主題,需要的朋友可以參考下
    2026-05-05
  • Java根據(jù)code獲取枚舉優(yōu)化方式

    Java根據(jù)code獲取枚舉優(yōu)化方式

    文章介紹了如何優(yōu)化枚舉類根據(jù)code獲取枚舉類型的過程,通過創(chuàng)建基接口BaseEnum和枚舉工具類MyEnumUtil,實(shí)現(xiàn)了通用的獲取方法,同時(shí),還討論了根據(jù)description獲取枚舉的優(yōu)化方法,并建議使用第二種方法
    2026-03-03

最新評論

裕民县| 彭州市| 固阳县| 渑池县| 安阳市| 出国| 隆德县| 丘北县| 汤阴县| 淮滨县| 岢岚县| 临颍县| 津市市| 渭源县| 青田县| 师宗县| 化德县| 榆社县| 莲花县| 林甸县| 新疆| 定边县| 临汾市| 贵德县| 柏乡县| 肇州县| 同仁县| 通山县| 桂平市| 昌宁县| 武夷山市| 资中县| 大英县| 南陵县| 虎林市| 平罗县| 喀什市| 弥勒县| 广水市| 军事| 高雄县|