日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

springboot事物注解不生效_Springboot注解事务隔离性无效

發布時間:2024/10/6 javascript 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 springboot事物注解不生效_Springboot注解事务隔离性无效 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

框架用的SpringBoot2.1.3 + MyBatis-Plus

有一個方法里面要對mysql一張表進行上百次的 為空插入非空更新操作

寫好后開jmeter測一下發現插入大量重復數據

所以想通過串行事務的方式來

@Transactional(propagation=Propagation.REQUIRES_NEW,isolation=Isolation.serializable,readOnly = false)

但是這個注解并沒有起作用,我試著手動在方法里拋異常,能夠正常的回滾,就是依然不能串行的執行

之后嘗試在給表加上唯一索引,現在是沒有重復數據了,但是mybatis一直瘋狂的拋重復key的異常,更新操作依舊沒有執行,因為回滾了

方法是public修飾的

Service類也用@Service注解了的

就是建立的類有些不一樣

Service是將多個實例注入到map中取的

public interface IBase{

void a();

// ....

}

// 這個虛基類里有部分抽象方法,其他有大量的公共方法

public abstract class Base impl IBase{

@Overwired

public void a(){

//....

func();

}

public abstract void func();

// ...

}

@Service("a")

public class A extends Base{

@Overwired

@Transactional(propagation=Propagation.REQUIRES_NEW,isolation=Isolation.serializable,readOnly = false)

public void func(){

// 大量的為空插入非空更新操作

// ...

}

}

之后由Controller調用

@Controller

public class BaseController impl IBaseController {

@Autowried

private Map map;

@Overwired

public void test(String str){

map.get(str).a();

}

}

項目是用Netty搞TCP長連接的,所以其實沒有Springboot的Web層

我就在NettyHandler的Read函數中,利用SpringContext.getBean(Clazz)方式獲取IBaseController來執行test()方法,流程就是這樣主要就是想讓A.func()串行執行來保證能夠正常

用Jemter開幾百個線程,只有部分能更新,其余的全部拋異常,究竟咋回事啊?

其實我覺得用串行的隔離性太慢了,或者有沒有什么更好的方式避免這種問題

比較更新我部分用的on duplicate key update,感覺能提升一點效率,但是聽說這個會導致死鎖,很郁悶

總結

以上是生活随笔為你收集整理的springboot事物注解不生效_Springboot注解事务隔离性无效的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。