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

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

 更新時間:2017年04月10日 11:07:18   投稿:mrr  
Springboot內(nèi)部提供的事務(wù)管理器是根據(jù)autoconfigure來進行決定的。接下來通過本文給大家介紹SpringBoot的事務(wù)管理相關(guān)知識,感興趣的朋友一起學(xué)習(xí)吧

Springboot內(nèi)部提供的事務(wù)管理器是根據(jù)autoconfigure來進行決定的。

比如當(dāng)使用jpa的時候,也就是pom中加入了spring-boot-starter-data-jpa這個starter之后。

Springboot會構(gòu)造一個JpaTransactionManager這個事務(wù)管理器。

而當(dāng)我們使用spring-boot-starter-jdbc的時候,構(gòu)造的事務(wù)管理器則是DataSourceTransactionManager。

這2個事務(wù)管理器都實現(xiàn)了spring中提供的PlatformTransactionManager接口,這個接口是spring的事務(wù)核心接口。

這個核心接口有以下這幾個常用的實現(xiàn)策略:

HibernateTransactionManager
DataSourceTransactionManager
JtaTransactionManager
JpaTransactionManager

具體的PlatformTransactionManager繼承關(guān)系如下:

spring-boot-starter-data-jpa這個starter會觸發(fā)HibernateJpaAutoConfiguration這個自動化配置類,HibernateJpaAutoConfiguration繼承了JpaBaseConfiguration基礎(chǔ)類。

在JpaBaseConfiguration中構(gòu)造了事務(wù)管理器:

@Bean
@ConditionalOnMissingBean(PlatformTransactionManager.class)
public PlatformTransactionManager transactionManager() {
return new JpaTransactionManager();
}

spring-boot-starter-jdbc會觸發(fā)DataSourceTransactionManagerAutoConfiguration這個自動化配置類,也會構(gòu)造事務(wù)管理器:

@Bean
@ConditionalOnMissingBean(PlatformTransactionManager.class)
@ConditionalOnBean(DataSource.class)
public DataSourceTransactionManager transactionManager() {
return new DataSourceTransactionManager(this.dataSource);
}

Spring的事務(wù)管理器PlatformTransactionManager接口中定義了3個方法:

// 基于事務(wù)的傳播特性,返回一個已經(jīng)存在的事務(wù)或者創(chuàng)建一個新的事務(wù)
TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException;
// 提交事務(wù)
void commit(TransactionStatus status) throws TransactionException;
// 回滾事務(wù)
void rollback(TransactionStatus status) throws TransactionException;

其中TransactionDefinition接口表示跟spring兼容的事務(wù)屬性,比如傳播行為、隔離級別、超時時間、是否只讀等屬性。

DefaultTransactionDefinition類是一個默認的TransactionDefinition實現(xiàn),它的傳播行為是PROPAGATION_REQUIRED(如果當(dāng)前沒事務(wù),則創(chuàng)建一個,否則加入到當(dāng)前事務(wù)中),隔離級別是數(shù)據(jù)庫默認級別。

TransactionStatus接口表示事務(wù)的狀態(tài),比如事務(wù)是否是一個剛構(gòu)造的事務(wù)、事務(wù)是否已經(jīng)完成等狀態(tài)。

下面這段代碼就是傳統(tǒng)事務(wù)的常見寫法:

transaction.begin();
try {
...
transaction.commit();
} catch(Exception e) {
...
transaction.rollback();
} finally {
}

由于spring的事務(wù)操作被封裝到了PlatformTransactionManager接口中,commit和rollback方法對應(yīng)接口中的方法,begin方法在getTransaction方法中會被調(diào)用。

細心的讀者發(fā)現(xiàn)文章前面構(gòu)造事務(wù)管理器的時候都會加上這段注解:

@ConditionalOnMissingBean(PlatformTransactionManager.class)

也就是說如果我們手動配置了事務(wù)管理器,Springboot就不會再為我們自動配置事務(wù)管理器。

如果要使用多個事務(wù)管理器的話,那么需要手動配置多個:

@Configuration
public class DatabaseConfiguration {
@Bean
public PlatformTransactionManager transactionManager1(EntityManagerFactory entityManagerFactory) {
return new JpaTransactionManager(entityManagerFactory);
}
@Bean
public PlatformTransactionManager transactionManager2(DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
}

然后使用Transactional注解的時候需要聲明是哪個事務(wù)管理器:

@Transactional(value="transactionManager1")
public void save() {
doSave();
}

Spring給我們提供了一個TransactionManagementConfigurer接口,該接口只有一個方法返回PlatformTransactionManager。其中返回的PlatformTransactionManager就表示這是默認的事務(wù)處理器,這樣在Transactional注解上就不需要聲明是使用哪個事務(wù)管理器了。

參考閱讀:

Spring Boot 快速入門指南

Spring Boot 快速入門教程

以上所述是小編給大家介紹的SpringBoot的事務(wù)管理,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Java中常見延時隊列的實現(xiàn)方案小結(jié)(建議收藏)

    Java中常見延時隊列的實現(xiàn)方案小結(jié)(建議收藏)

    延時隊列它要具有隊列的特性,再給它附加一個延遲消費隊列消息的功能,也就是說可以指定隊列中的消息在哪個時間點被消費,這篇文章主要介紹了Java中常見延時隊列的實現(xiàn)方案總結(jié),需要的朋友可以參考下
    2024-04-04
  • Java實現(xiàn)合并多個PDF的示例代碼

    Java實現(xiàn)合并多個PDF的示例代碼

    這篇文章主要介紹了通過Java實現(xiàn)合并多個PDF,并將合并后的新PDF存儲到文件夾下,文中的示例代碼簡潔易懂,感興趣的可以跟隨小編一起試一試
    2022-01-01
  • SpringBoot集成geodesy實現(xiàn)距離計算功能

    SpringBoot集成geodesy實現(xiàn)距離計算功能

    Geodesy:大地測量學(xué)的神奇力量 Geodesy,又稱大地測量學(xué),是一門研究地球形狀、大小及其重力場的學(xué)科,在地球距離計算中,它扮演著至關(guān)重要的角色,故本文給大家介紹了SpringBoot集成geodesy實現(xiàn)距離計算功能,感興趣的朋友可以參考下
    2024-06-06
  • 學(xué)習(xí)Java之如何對時間進行格式化

    學(xué)習(xí)Java之如何對時間進行格式化

    當(dāng)我們在默認情況下構(gòu)造出來的時間對象,它的時間格式并不適合我們閱讀,并且在開發(fā)時,pc端、Android端、iOS端等展示的時間格式可能也并不完全一樣,本文就從這幾個問題給大家介紹如何對時間進行格式化,感興趣的同學(xué)可以借鑒一下
    2023-05-05
  • Spring?Boot?整合?Reactor實例詳解

    Spring?Boot?整合?Reactor實例詳解

    這篇文章主要為大家介紹了Spring?Boot?整合?Reactor實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • Java 定時器的多種實現(xiàn)方式

    Java 定時器的多種實現(xiàn)方式

    本文介紹了Java中定時器的多種實現(xiàn)方式,有此需求的朋友可以根據(jù)實際選擇適合自己的方式
    2021-06-06
  • Java中對象的比較操作實例分析

    Java中對象的比較操作實例分析

    這篇文章主要介紹了Java中對象的比較操作,結(jié)合實例形式分析了java對象比較操作實現(xiàn)方法與相關(guān)操作注意事項,需要的朋友可以參考下
    2019-08-08
  • 密碼系統(tǒng)AES私鑰RSA公鑰的加解密示例

    密碼系統(tǒng)AES私鑰RSA公鑰的加解密示例

    這篇文章主要為大家詮釋并介紹了AES私鑰RSA公鑰的加解密系統(tǒng)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-03-03
  • Java標識接口的使用方法

    Java標識接口的使用方法

    在本篇文章中小編給大家分享了關(guān)于Java標識接口的使用方法和教程內(nèi)容,有需要的朋友們學(xué)習(xí)下。
    2019-01-01
  • MyBatis別名和settings設(shè)置方式

    MyBatis別名和settings設(shè)置方式

    這篇文章主要介紹了MyBatis別名和settings設(shè)置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07

最新評論