我有問題: 爲什麼當我們使用@Scheduled
和@Transaction
註釋方法時,事務不起作用? 我知道@Scheduled
調用我的類而不是由Spring創建的代理類,但無法理解此行爲。爲什麼@ Scheduled註釋不能用@Transaction註解。 Spring Boot
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
是這樣的嗎?
謝謝!
_doesn't_的意思是什麼? –
我的意思是說,如果調度程序調用此方法,那麼方法中沒有事務,用@Transactional註釋。因爲調度程序調用我的類的方法而不是代理類的方法。 –
它可能工作時,你廢除'實現UserService'部分,因爲它應該觸發不同類型的代理:https://stackoverflow.com/a/30489513/995891 – zapl