我正在嘗試使用@Scheduled方法來處理一些常規工作(每秒)。此方法的主體可以在一秒以上的時間內處理,我看到如果發生這種情況,則不會啟動下一次執行。Spring 是否支持它或者我應該將它更改為任何其他并發解決方案?我曾嘗試將 Scheduler 更改為ConcurrentTaskScheduler,但看起來只有當我們的調度方法很少時它才有用。@Servicepublic class MainService { @Scheduled(cron = "* * * * * *") public void doSomething() { //some logic which can takes more than 1 second }}@Configurationpublic class SchedulingConfig implements SchedulingConfigurer { @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { taskRegistrar.setScheduler(taskExecutor()); } @Bean public Executor taskExecutor() { return new ConcurrentTaskScheduler( Executors.newScheduledThreadPool(100)); }}一旦第一次執行花費了額外的時間,第二次執行將不會開始。否則,一切正常。如何設置一個預定方法的并行執行?
1 回答

收到一只叮咚
TA貢獻1821條經驗 獲得超5個贊
您可以引入一個異步組件,這樣它不需要 1 秒https://www.baeldung.com/spring-async
@Service
public class MainService {
@Autowired
private SomethingService somethingService;
@Scheduled(cron = "* * * * * *")
public void doSomething() {
somethingService.doSomething();
}
}
//Introduce an async component so it does not take 1 second. runs doSomething() in a separate thread
@Component
public class SomethingService {
@Async
public void doSomething() {
//some logic which can takes more than 1 second
}
}
添加回答
舉報
0/150
提交
取消