为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

呼如林 2023-02-23 10:32:46
我正在尝试使用@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   

    }

}


查看完整回答
反对 回复 2023-02-23
  • 1 回答
  • 0 关注
  • 138 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号