一、創建項目java
@SpringBootApplication @EnableAsync @EnableScheduling @EnableAutoConfiguration(exclude={ DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class}) @ImportResource("classpath:spring.xml")
@EnableAsync 開啓異步支持spring
@EnableScheduling 開啓定時任務支持數據庫
@EnableAutoConfiguration做用 Spring Boot會自動根據你jar包的依賴來自動配置項目。例如當你項目下面有HSQLDB的依賴時,Spring Boot會建立默認的內存數據庫的數據源DataSource,若是你本身建立了DataSource,Spring Boot就不會建立默認的DataSource。異步
@ImportResource("classpath:spring.xml") 導入一些常規性配置,雖然spring-boot不推薦用xml了,可是原本仍是有些習慣用xml來配置async
二、spring-boot
@Component public class TaskTest { @Scheduled(cron="0/30 * * * * ?") public void task(){ System.out.println("========每30秒運行一次======="); } }
這樣一個簡單的定時任務做業系統就完成了spa
問題:下面說說過程當中遇到的一個小坑,至今我都沒搞明白的一個問題主要是異常任務問題code
@Scheduled(cron="0/30 * * * * ?") public void task1(){ asyn(); System.out.println("========每30秒運行一次======="); } @Async public void asyn(){ System.out.println("========異步任務======="); }
看到代碼,很簡單明瞭,30秒運行一次task1方法,而task1方法則調用了一個異步方法,可是問題就出在這裏,若是這樣寫的會,他這裏只會同步執行異步任務,這裏百思不得其解。xml
個人解決辦法內存
@Component public class TaskTest { @Autowired private AsyncTask asyncTask; @Scheduled(cron="0/30 * * * * ?") public void task1(){ asyncTask.asyn();//調用異步任務 System.out.println("========每30秒運行一次======="); } }
異步方法不在原來定時做業的class裏,這樣就能夠異步做業了,不明白這裏的緣由,若是有人知道麻煩告訴一下
@Component public class AsyncTask { @Async public void asyn() throws InterruptedException{ Thread.sleep(5000); System.out.println("========異步任務======="); } }