项目中有这么个需求,每天晚上24点定时执行清除数据库中某张临时表的记录,刚开始采用定时器来做,但感觉有问题。后台晚上查询发现Quartz不错,就改用了Quartz来实现,以下是一点心得和实现代码,故分享给大家。
1、web.xml配置
2、监听器
3、调度实现
还有一些关于时间和执行的配置就不发了,网上搜索下很多的。这里只是自己的一个需求,只能起到一个抛砖引玉的作用吧。
1、web.xml配置
<servlet>
<servlet-name>QuartzInitializer</servlet-name>
<servlet-class>
org.quartz.ee.servlet.QuartzInitializerServlet
</servlet-class>
<init-param>
<param-name>shutdown-on-unload</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>config-file</param-name>
<param-value>quartz.properties</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<listener>
<listener-class>
QuartzServiceLoader
</listener-class>
</listener>
2、监听器
public class QuartzServiceLoader implements ServletContextListener {
public void contextDestroyed(ServletContextEvent arg0) {
try {
// 监听器关闭时关闭Sheduler
TestShedule.stop();
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
public void contextInitialized(ServletContextEvent arg0) {
try {
// 监听器启动时启动Sheduler
TestShedule.run();
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
}
3、调度实现
public class TestShedule implements Job {
static SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory();
static Scheduler sched;
@SuppressWarnings("static-access")
public static void run() throws Exception {
// 获取调度管理器
sched = schedFact.getScheduler();
// 创建工作
JobDetail jobDetail = new JobDetail("myJob", sched.DEFAULT_GROUP,
TestShedule.class);
// 创建触发器
CronTrigger trigger = new CronTrigger("myTrigger", "test",
"0/10 * * * * ?"); // 每天晚上24点
// 添加到调度管理器中
sched.scheduleJob(jobDetail, trigger);
// 启动调度管理器
sched.start();
}
public static void stop() throws Exception {
sched.shutdown();
}
public void execute(JobExecutionContext arg0) throws JobExecutionException {
System.out.println("Hello,world!");
}
}
还有一些关于时间和执行的配置就不发了,网上搜索下很多的。这里只是自己的一个需求,只能起到一个抛砖引玉的作用吧。