一、問題背景
使用@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計划任務線程阻塞導致。
