spring-boot 定時任務

一、創建項目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("========異步任務=======");
	}
}
相關文章
相關標籤/搜索