真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

一文帶你讀懂SpringBoot中的事務(wù)管理

一文帶你讀懂SpringBoot中的事務(wù)管理?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

在鹽城等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作按需網(wǎng)站設(shè)計(jì),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),全網(wǎng)整合營(yíng)銷推廣,成都外貿(mào)網(wǎng)站制作,鹽城網(wǎng)站建設(shè)費(fèi)用合理。

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

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

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

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

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

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

HibernateTransactionManager
DataSourceTransactionManager
JtaTransactionManager
JpaTransactionManager

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

一文帶你讀懂SpringBoot中的事務(wù)管理

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

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

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

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

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

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

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

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

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

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

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

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

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

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

@ConditionalOnMissingBean(PlatformTransactionManager.class)

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

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

@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注解的時(shí)候需要聲明是哪個(gè)事務(wù)管理器:

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

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

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。


分享名稱:一文帶你讀懂SpringBoot中的事務(wù)管理
當(dāng)前URL:http://weahome.cn/article/geddsp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部