Spring:使用InitializingBean,DisposableBean接口实现在项目启动/关闭时执行操作

本文介绍如何在SpringBoot项目中整合定时任务,通过实现InitializingBean和DisposableBean接口,结合自定义线程,实现项目启动时自动执行存储过程,并在项目关闭时优雅地结束线程。此外,还探讨了使用Quartz和@Scheduled等组件作为替代方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近项目中有一个需求需要一个存储过程不停的执行,但是存储过程执行中如果出现异常,自动通知管理员会很麻烦。所以打算直接把调用存储过程这步骤整合进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这些定时任务组件也可以满足该需求,而且实际上的实现原理都是相同的。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

团子ing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值