2019獨角獸企業重金招聘Python工程師標準>>>
1、建立項目
@SpringBootApplication
@EnableAsync
@EnableScheduling
@EnableAutoConfiguration(exclude={ DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class})
@ImportResource("classpath:spring.xml")
@EnableAsync 開啟異步支持
@EnableScheduling 開啟定時任務支持
@EnableAutoConfiguration作用?Spring Boot會自動根據你jar包的依賴來自動配置項目。例如當你項目下面有HSQLDB的依賴時,Spring Boot會創建默認的內存數據庫的數據源DataSource,如果你自己創建了DataSource,Spring Boot就不會創建默認的DataSource。
@ImportResource("classpath:spring.xml") ?導入一些常規性配置,雖然spring-boot不推薦用xml了,但是本來還是有些習慣用xml來配置
?
2、
@Component
public class TaskTest {@Scheduled(cron="0/30 * * * * ?")public void task(){System.out.println("========每30秒運行一次=======");}
}
這樣一個簡單的定時任務作業系統就完成了
?
問題:下面說說過程中遇到的一個小坑,至今我都沒搞明白的一個問題主要是異常任務問題
@Scheduled(cron="0/30 * * * * ?")public void task1(){asyn();System.out.println("========每30秒運行一次=======");}@Asyncpublic void asyn(){System.out.println("========異步任務=======");}
看到代碼,很簡單明了,30秒運行一次task1方法,而task1方法則調用了一個異步方法,但是問題就出在這里,如果這樣寫的會,他這里只會同步執行異步任務,這里百思不得其解。
我的解決辦法
@Component
public class TaskTest {@Autowiredprivate AsyncTask asyncTask;@Scheduled(cron="0/30 * * * * ?")public void task1(){asyncTask.asyn();//調用異步任務System.out.println("========每30秒運行一次=======");}
}
異步方法不在原來定時作業的class里,這樣就可以異步作業了,不明白這里的原因,如果有人知道麻煩告訴一下
@Component
public class AsyncTask {@Asyncpublic void asyn() throws InterruptedException{Thread.sleep(5000);System.out.println("========異步任務=======");}
}
?
?