那里可以做PC28网站的,设计动画公司,动易官方网站,贵州大地建设集团网站单体架构__用户限买
一个id一单的多线程事务失效问题解决 背景介绍#xff1a;有一种情况#xff0c;我们在使用Synchronized的时候出现失效情况。 经过排查#xff0c;是因为使用了this.当前对象#xff0c;他现在使用的是目标对象加锁失效#xff0c;使用代理对象加锁就…单体架构__用户限买
一个id一单的多线程事务失效问题解决 背景介绍有一种情况我们在使用Synchronized的时候出现失效情况。 经过排查是因为使用了this.当前对象他现在使用的是目标对象加锁失效使用代理对象加锁就不失效了。特此记录以下从获取到解决的步骤
1.导入依赖
dependencygroupIdorg.aspectj/groupIdartifactIdaspectjweaver/artifactId/dependency2.启动类加注解
EnableAspectJAutoProxy(exposeProxy true)这个注解会在启动的时候暴露代理对象
3.具体业务场景使用
背景介绍我这边是将需要加锁的代码抽取成了一个方法ctrlaltm然后用Synchronized锁的整个方法。
// 获取当前代理对象将此对象作为锁Object obj AopContext.currentProxy();
// 当前此对象可以强转也可以是接口或者类
// 可以在server中定义方法直接用server引用也可以这样获取到了代理对象加锁可以保证事务不失效synchronized (obj){
// 需要被封装的代码块}注上方强转的应该是当前实现类的server接口然后用那个接口获取到当前实现类的方法这个方法是加了事务控制的方法然后在引用的地方外面加sync锁就行了解决了事务失效
4.扩展
toString方法里面有一个intern的方法在创建字符串的时候优先去字符串常量池里面查找有的话返回字符串常量池地址引用。
如果这种方法帮你解决了问题帮点个赞哦。