亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何強制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 關注
  • 124 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號