Spring:使用InitializingBean,DisposableBean介面實現在專案啟動/關閉時執行操作
阿新 • • 發佈:2018-12-18
最近專案中有一個需求需要一個儲存過程不停的執行,但是儲存過程執行中如果出現異常,自動通知管理員會很麻煩。所以打算直接把呼叫儲存過程這步驟整合進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這些定時任務元件也可以滿足該需求,而且實際上的實現原理都是相同的。