@Transactional屬性詳解
點(diǎn)擊上方藍(lán)色字體,選擇“標(biāo)星公眾號”
優(yōu)質(zhì)文章,第一時(shí)間送達(dá)
76套java從入門到精通實(shí)戰(zhàn)課程分享
使用說明
注解失效問題
@Transactional 應(yīng)用在非 public 修飾的方法上
@Transactional 注解屬性 rollbackFor 設(shè)置錯(cuò)誤
同一個(gè)類中方法調(diào)用,導(dǎo)致@Transactional失效
異常被你的 catch“吃了”導(dǎo)致@Transactional失效
數(shù)據(jù)庫引擎不支持事務(wù)
開啟多線程任務(wù)時(shí),事務(wù)管理會(huì)受到影響
@Service
public class ServiceA {
@Transactional
public void threadMethod(){
this.insert();
System.out.println("main insert is over");
for(int a=0 ;a<3;a++){
ThreadOperation threadOperation= new ThreadOperation();
Thread innerThread = new Thread(threadOperation);
innerThread.start();
}
}
public class ThreadOperation implements Runnable {
public ThreadOperation(){
}
@Override
public void run(){
insert();
System.out.println("thread insert is over");
}
}
public void insert(){
//do insert......
}
}
@Service
public class ServiceA {
@Autowired
private ServiceB serviceB;
@Transactional
public void threadMethod(){
this.insert();
System.out.println("main insert is over");
for(int a=0 ;a<3;a++){
ThreadOperation threadOperation= new ThreadOperation();
Thread innerThread = new Thread(threadOperation);
innerThread.start();
}
}
public class ThreadOperation implements Runnable {
public ThreadOperation(){
}
@Override
public void run(){
serviceB.insert();
System.out.println("thread insert is over");
}
}
public void insert(){
//do insert......
}
}
@Service
public class ServiceB {
@Transactional
public void insert(){
//do insert......
}
}
@Service
public class ServiceA {
@Autowired
private ServiceB serviceB;
@Transactional
public void threadMethod(){
this.insert();
System.out.println("main insert is over");
for(int a=0 ;a<3;a++){
ThreadOperation threadOperation= new ThreadOperation();
Thread innerThread = new Thread(threadOperation);
innerThread.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
public void uncaughtException(Thread t, Throwable e) {
try {
serviceB.delete();③
} catch (Exception e1) {
e1.printStackTrace();
}
}
});
innerThread.start();
}
}
public class ThreadOperation implements Runnable {
public ThreadOperation(){
}
@Override
public void run(){
try {
serviceB.insert();
}catch (Exception ex){ ②
System.out.println(" Exception in run ");
throw new RuntimeException();
}
System.out.println("thread insert is over");
}
}
public void insert(){
//do insert......
}
}
@Service
public class ServiceB {
@Transactional
public void insert() throws Exception{ ①
//do insert......
}
@Transactional
public void delete() throws Exception{
//do delete......
}
}
————————————————
版權(quán)聲明:本文為CSDN博主「丶煒欽」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_44521690/article/details/116797363
版權(quán)聲明:本文為博主原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接和本聲明。
本文鏈接:
https://blog.csdn.net/weixin_44521690/article/details/116797363
粉絲福利:Java從入門到入土學(xué)習(xí)路線圖
??????

??長按上方微信二維碼 2 秒
感謝點(diǎn)贊支持下哈 
評論
圖片
表情



