返回信息流rt。lz发现在同一个类中,如果同时存在@Scheduled和@Transactional注解,则无法触发定时任务,去掉@Transactional定时任务就出来了。。。
@Service
@EnableScheduling
public class TestService {
@Scheduled(cron = "0/3 * * * * *")
public void print(){
System.out.println(System.currentTimeMillis());
}
// @Transactional(rollbackFor = Exception.class)
public void trans(){
System.out.println("trans");
}
}
//像上面这样就可以正常触发,如果去掉@Transactional的注释,定时任务就失效了[ema1],求大佬帮忙看看
这是一条镜像帖。来源:北邮人论坛 / java / #65250同步于 2021/6/7
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
为什么@Scheduled和@Transactional同时存在,定时任务就失效了
buptsyf
2021/6/7镜像同步11 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
应该是这样的吧, @Scheduled和@Transactional生成的代理过程不同,Scheduled和Async仅仅BeanpostProcessor,Transactional还继承了abstractAutoCreatetorProxy,这样生成代理的时候,在三级缓存暴漏的时候,会先生成代理,而Scheduled和Async仅仅在BeanpostProcessor处理的时候,查找相应的方法,然后生成代理,加入设定好的线程池中。
两个注解都有就会失效。只是一个demo[ema1]
【 在 LeesangHyuk 的大作中提到: 】
: 到底失效没失效? 而且上面这个仅仅是做了Print()函数的定时任务吧?
感谢大佬,好细致,我研究研究
【 在 zxk422 的大作中提到: 】
: 应该是这样的吧, @Scheduled和@Transactional生成的代理过程不同,Scheduled和Async仅仅BeanpostProcessor,Transactional还继承了abstractAutoCreatetorProxy,这样生成代理的时候,在三级缓存暴漏的时候,会先生成代理,而Scheduled和Async仅仅在BeanpostProcessor处理的时候,查找相应的方法,然后生成代理,加入设定好的线程池中。
: --
可以这么理解
1. @Scheduled 相当于是 this 调用,自己调用自己,没有经过spring 的 aop
2. @Transactional 是通过 aop 实现的
综上,调用失败
可以看下@Transactional 的几种失效案例,老八股文了
【 在 buptsyf 的大作中提到: 】
: rt。lz发现在同一个类中,如果同时存在@Scheduled和@Transactional注解,则无法触发定时任务,去掉@Transactional定时任务就出来了。。。
: @Service
: @EnableScheduling
: ...................
可以看一下附件,源码的实现方式