Java Sql事件与Sevlet中的ScheduledExecutorService
我为不同的表单提交构建了一个web应用程序。我的要求是,我想每年4月1日自动删除我的数据库一次。为此,我找到了两个选择Java Sql事件与Sevlet中的ScheduledExecutorService,java,mysql,servlets,Java,Mysql,Servlets,我为不同的表单提交构建了一个web应用程序。我的要求是,我想每年4月1日自动删除我的数据库一次。为此,我找到了两个选择 首先是servlet中的ScheduledExecutorService。比如说 @WebListener public class BackgroundJobManager implements ServletContextListener { private ScheduledExecutorService scheduler; public void co
首先是servlet中的ScheduledExecutorService
。比如说
@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();
}
}
每天的工作是什么
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;
}
}
}
第二个选择是在数据库中使用MySQL的事件调度器
CREATE EVENT `event_name`
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE | DISABLE ON SLAVE]
DO BEGIN
-- event body
END;
可以为计划分配各种设置,例如:
- 在特定日期/时间运行一次:在“YYYY-MM-DD HH:MM.SS”,例如在 “2011-06-01 02:00.00”
- 在特定时间段结束后运行一次:在当前时间戳+ 间隔n[小时|月|周|日|分钟],例如当前时间戳+ 间隔1天
- 永远以特定的间隔运行:每n [小时|月|周|日|分钟]例如每1天
还有别的办法吗?谢谢。我更喜欢数据库中的事件调度程序
- 由于数据库调用被视为重调用,我将尝试减少调用
- 由于时间/日期是固定的(您的情况是4月1日),我不需要另外的服务或逻辑层