1. 程式人生 > >Spring:使用InitializingBean,DisposableBean介面實現在專案啟動/關閉時執行操作

Spring:使用InitializingBean,DisposableBean介面實現在專案啟動/關閉時執行操作

最近專案中有一個需求需要一個儲存過程不停的執行,但是儲存過程執行中如果出現異常,自動通知管理員會很麻煩。所以打算直接把呼叫儲存過程這步驟整合進Spring Boot專案中(這樣不論異常捕獲和郵件通知都相對簡單)。
於是考慮使用實現Spring的InitializingBean,DisposableBean介面+新建一個執行緒來實現需求。思路為Spring Boot啟動時初始化並執行該執行緒,然後執行緒中不停呼叫該儲存過程,當然需要加上個緩衝時間,不然跑的太頻繁。然後在Spring Boot專案關閉時銷燬該執行緒。
1.首先新建InitCommon.java
實現InitializingBean,DisposableBean兩個介面

@Component
public class InitCommon implements InitializingBean,DisposableBean{

	@Resource
	private MyThread myThread;
	
	@Override
	public void destroy() throws Exception {
		// TODO Auto-generated method stub
		//專案關閉時執行的方法
		System.out.println("thread 關閉");
		myThread.interrupt();
	}

	@Override
	public void afterPropertiesSet() throws Exception {
		// TODO Auto-generated method stub
		//專案啟動時執行的方法
		System.out.println("thread 開始");
		myThread.start();
	}

}

2.MyThread.java

@Component
public class MyThread extends Thread{
	@Override
	public void run() {
		while(true)
		{	
			try {
				System.out.println(new Date());
				//所要進行的操作,我這裡就是呼叫儲存過程了。
				
				//
				
				MyThread.sleep(3000);//休眠3秒,避免執行過於頻繁
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}

當然使用quartz和Spring Boot自帶的@Scheduled這些定時任務元件也可以滿足該需求,而且實際上的實現原理都是相同的。