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

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

事務(wù)如何在SpringBoot中使用

今天就跟大家聊聊有關(guān)事務(wù)如何在Spring Boot 中使用,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

創(chuàng)新互聯(lián)公司是一家專業(yè)提供德州企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、html5、小程序制作等業(yè)務(wù)。10年已為德州眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計(jì)公司優(yōu)惠進(jìn)行中。

spring Boot 使用事務(wù)非常簡(jiǎn)單,首先使用注解 @EnableTransactionManagement 開啟事務(wù)支持后,然后在訪問數(shù)據(jù)庫(kù)的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測(cè)試,就能知道自動(dòng)注入的是 PlatformTransactionManager 接口的哪個(gè)實(shí)現(xiàn)類。

@EnableTransactionManagement // 啟注解事務(wù)管理,等同于xml配置方式的 
@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)目做的比較大,添加的持久化依賴比較多,我們還是會(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)類。

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

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

@EnableTransactionManagement // 開啟注解事務(wù)管理,等同于xml配置文件中的 
@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í)例,并且沒有實(shí)現(xiàn)接口 TransactionManagementConfigurer 指定默認(rèn)值,在我們?cè)诜椒ㄉ鲜褂米⒔?@Transactional 的時(shí)候,就必須要用value指定,如果不指定,則會(huì)拋出異常。

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

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

看完上述內(nèi)容,你們對(duì)事務(wù)如何在Spring Boot 中使用有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。


當(dāng)前名稱:事務(wù)如何在SpringBoot中使用
地址分享:http://weahome.cn/article/ispied.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部