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,感觉能提升一点效率,但是听说这个会导致死锁,很郁闷

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值