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这些定时任务组件也可以满足该需求,而且实际上的实现原理都是相同的。

你可能感兴趣的:(Spring)