如何强制Spring Scheduled运行单个方法的并行执行?

我正在尝试使用@Scheduled方法来处理一些常规工作(每秒)。此方法的主体可以在一秒以上的时间内处理,我看到如果发生这种情况,则不会启动下一次执行。Spring 是否支持它或者我应该将它更改为任何其他并发解决方案?


我曾尝试将 Scheduler 更改为ConcurrentTaskScheduler,但看起来只有当我们的调度方法很少时它才有用。


@Service

public class MainService {

    @Scheduled(cron = "* * * * * *")

    public void doSomething() {

       //some logic which can takes more than 1 second   

    }

}


@Configuration

public class SchedulingConfig implements SchedulingConfigurer {


    @Override

    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {

        taskRegistrar.setScheduler(taskExecutor());

    }


    @Bean

    public Executor taskExecutor() {

        return new ConcurrentTaskScheduler(

                Executors.newScheduledThreadPool(100));

    }

}


一旦第一次执行花费了额外的时间,第二次执行将不会开始。否则,一切正常。如何设置一个预定方法的并行执行?


呼如林
浏览 139回答 1
1回答

收到一只叮咚

您可以引入一个异步组件,这样它不需要 1 秒https://www.baeldung.com/spring-async@Servicepublic class MainService {@Autowiredprivate 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@Componentpublic class SomethingService {    @Async    public void doSomething() {       //some logic which can takes more than 1 second       }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java