我正在尝试使用@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
提交
取消
