关于秒杀事务相关
作者:互联网
intern
锁对象 toString 后返回的是不同的 String 对象,需要用 intern 方法直接从常量池中调用字符串对象
synchronized (userId.toString().intern())
proxy
使用 @Transaction 注解开启事务,spring 创建代理对象实现事务,但是在 service 中调用方法都是本身 this 调用,需要得到当前的代理对象调用方法。
IVoucherOrderService proxy = (IVoucherOrderService) AopContext.currentProxy();
return proxy.creatVoucherOrder(voucherId);
还需要添加 AspectJ 依赖
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
在启动类上添加 @EnableAspectJAutoProxy 注解,并将其属性 exposeProxy 改为 true,对外暴露代理对象,可以显示调用。
@EnableAspectJAutoProxy(exposeProxy = true)
标签:事务,调用,对象,intern,秒杀,关于,exposeProxy,toString,proxy 来源: https://www.cnblogs.com/xy7112/p/16441336.html