我为不同的表单提交构建了一个Web应用程序。我的要求是,我希望自动每年1月1日删除一次我的数据库。为此,我找到了两个选择。
First is ScheduledExecutorService in servlet
。例如
@WebListener
public class BackgroundJobManager implements ServletContextListener {
private ScheduledExecutorService scheduler;
public void contextInitialized(ServletContextEvent event) {
System.out.println("BackgroundJobManager");
scheduler = Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate(new DailyJob(), 0, 1, TimeUnit.DAYS);
}
public void contextDestroyed(ServletContextEvent event) {
scheduler.shutdownNow();
}
}
班级DailyJob是
public class DailyJob implements Runnable {
private static int lock=0;
public void run() {
int month=Calendar.getInstance().get(Calendar.MONTH);
int day= Calendar.getInstance().get(Calendar.DATE);
if((day==1)&&(month==3)&&(lock==0))
{
//Some Logic To Delete Database
lock=1;
}
if((day==2)&&(month==3)&&(lock==1))
{
lock=0;
}
}
}
Second option is to use MySQL’s Event Scheduler at database
CREATE EVENT `event_name`
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE | DISABLE ON SLAVE]
DO BEGIN
-- event body
END;
可以为计划分配各种设置,例如
我的问题是哪种方法好,为什么? 还有其他方法吗?谢谢。
答案 0 :(得分:1)
我更喜欢数据库中的事件调度程序
因此我将尝试在数据库中实现