国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - 詳解Spring Boot 事務(wù)的使用

詳解Spring Boot 事務(wù)的使用

2020-09-08 13:59Java教程網(wǎng) Java教程

spring Boot 使用事務(wù)非常簡(jiǎn)單,首先使用注解 @EnableTransactionManagement 開(kāi)啟事務(wù)支持后,然后在訪問(wèn)數(shù)據(jù)庫(kù)的Service方法上添加注解 @Transactional 便可。接下來(lái)通過(guò)本文重點(diǎn)給大家介紹spring boot事務(wù)的使用,需要的的朋友參考下吧

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
@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)做了,這些對(duì)我們并不透明,如果你項(xiàng)目做的比較大,添加的持久化依賴(lài)比較多,我們還是會(huì)選擇人為的指定使用哪個(gè)事務(wù)管理器。

代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@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)類(lèi)。

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@EnableTransactionManagement // 開(kāi)啟注解事務(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);
 }
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@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í)例,并且沒(méi)有實(shí)現(xiàn)接口 TransactionManagementConfigurer 指定默認(rèn)值,在我們?cè)诜椒ㄉ鲜褂米⒔?@Transactional 的時(shí)候,就必須要用value指定,如果不指定,則會(huì)拋出異常。

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

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

參考閱讀:

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

Spring Boot 快速入門(mén)指南

Spring Boot 快速入門(mén)教程

以上所述是小編給大家介紹的Spring Boot 事務(wù)的使用,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)服務(wù)器之家網(wǎng)站的支持!

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 精品福利在线 | 美国理论 | 欧美日韩精品在线观看 | 日韩成人影片 | 久久精品欧美 | 国产精品久久久久久久久久久久久 | 欧美成人精品一区二区三区 | 精品麻豆剧传媒av国产九九九 | 九九99九九 | 精品国产乱码久久久久久牛牛 | 91精品国产91久久综合桃花 | 欧美日韩一区二区三区在线观看 | 亚洲一区二区在线 | a国产精品 | 国产免费黄色 | 成人av视| 午夜黄色影院 | 狠狠操操| 免费一级毛片电影 | 亚洲五码中文字幕 | 日韩在线一区二区三区 | 国产成人精品午夜视频' | 国产精品毛片一区二区 | 国产女爽爽视频精品免费 | 亚洲网站在线观看 | 国产有码 | 99re6在线视频精品免费 | 国产精品99久久免费观看 | 91亚洲国产精品 | 高清一区二区三区 | 欧美福利视频 | 久久久久久人 | 天天爱天天操 | yy6080久久伦理一区二区 | av在线免费播 | 亚洲一区二区三区四区五区中文 | 中文字幕日韩欧美一区二区三区 | 婷婷国产 | 精品国产欧美 | 国产高清av在线一区二区三区 | 国产成人精品免高潮在线观看 |