@Transactional如果在一個方法上面添加@Transactional注解
查看postgresql數據庫當前的事務隔離級別:
@Transactional
public void updateData(){
aService.updateA();//更新A表
bService.updateB();//更新B表
cService.updateC();//更新C表
}
假設,如果每一個service只會對應的更新他所對應的這張表,下面這三個方法上面加不加@Transactional效果都是一樣的。不會對最終的結果產生影響。
Pubic void updateA(){
//只進行更新A表的操作
}
Pubic void updateB(){
//只進行更新B表的操作
}
Pubic void updateC(){
//只進行更新C表的操作
}
這種架構,的意思是將ABC三張表的更新操作綁定成一個原子,更新的時候,要成功都成功,要失敗都失敗。
如果將上面的架構換成下面這種模式:
public void updateData(){
aService.updateA();//更新A表
if(1==1){
Throw new BussinessException(“模擬發生異常”);
}
bService.updateB();//更新B表
cService.updateC();//更新C表
}
假設,如果每一個service只會對應的更新他所對應的這張表,下面這三個方法上面加不加@Transactional效果都是一樣的。不會對最終的結果產生影響。
Pubic void updateA(){
//只進行更新A表的操作
}
Pubic void updateB(){
//只進行更新B表的操作
}
Pubic void updateC(){
//只進行更新C表的操作
}
我們會發現程序拋出了異常,但是A表成功的更新了數據。
如果我們在類上面添加@Transactional 注解
@Transactional
public class Test{
public void updateData(){
aService.updateA();//更新A表
bService.updateB();//更新B表
cService.updateC();//更新C表
}
}
Pubic void updateA(){
//只進行更新A表的操作 假設A表中有兩條三條數據要進行更新操作,
//我在更新第二條數據的時候手動拋出一個異常
}
這個時候,我們進行測試,會發現,所有的數據都不會進行更新,這就是類級別的@Transactional的作用。