我有一个问题:
为什么当我们使用@Scheduled
和@Transaction
同时注解一个方法时,事务不起作用?
我知道@Scheduled
会调用由Spring创建的代理类而不是我的类本身,但我无法理解这种行为。
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.transaction.annotation.Transactional;
@Service
public class UserServiceImpl implements UserService {
@Override
@Scheduled(fixedRateString = "${somestring}",initialDelayString = "${anotherstring}")
@Transactional
public void doSomething() {
}
}
我有两个解决这个问题的方案:
从
Scheduled
方法中调用代理。实现
ConcurrentTaskScheduler
并将ScheduledMethodRunnable
对象(即我的类的对象)替换为带有代理的ScheduledMethodRunnable
对象。
但是这些解决方案都非常不方便。
你能否解释一下为什么@Scheduled
会这样工作吗?
谢谢!
implements UserService
部分时,它可能会起作用,因为那应该会触发不同类型的代理:https://stackoverflow.com/a/30489513/995891 - zapl