javascript
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注解事务隔离性无效的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hadoop job 未跑满资源_Had
- 下一篇: inodesusedpercent_Li