spring中@Scheduled定時任務執行時間不准確問題


一、問題背景

使用@Scheduled創建兩個定時任務,其中一個1s執行。另一個1min執行。按分鍾執行的出現了bug,我設定的規則如下:

@Async
@Scheduled(cron = "0 0/1 * * * ?")
public void workOfMin() {
    
    logger.info("---------》work start...");

}

實際執行的時間不是每分鍾00秒,而是隨機的01~20之間。比如:每分鍾的03、04、11秒執行任務。但是我要的結果是每分鍾的00秒執行,必須精確。

二、解決方案

@SpringBootApplication
@EnableJpaRepositories(repositoryFactoryBeanClass = MyRepositoryFactoryBean.class)
@EnableTransactionManagement
@EnableAutoConfiguration
@EnableScheduling
@Configuration
@EnableDiscoveryClient
@EnableFeignClients
@EnableCaching
public class Application extends DefaultApplication {
    
    /**
     *
     *〈簡述〉修復同一時間無法執行多個 定時任務問題
     *〈詳細描述〉
     */
    @Bean
    public TaskScheduler taskScheduler() {
        ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
        taskScheduler.setPoolSize(50);
        return taskScheduler;
    }
    
    /**
     * 〈簡述〉應用啟動入口
     * 〈詳細描述〉
     *
     * @param args String[] 參數
     */
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

 創建一個@Bean方法,設置poolSize。原因是spring計划任務線程阻塞導致。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM