Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Sql事件与Sevlet中的ScheduledExecutorService_Java_Mysql_Servlets - Fatal编程技术网

Java Sql事件与Sevlet中的ScheduledExecutorService

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

我为不同的表单提交构建了一个web应用程序。我的要求是,我想每年4月1日自动删除我的数据库一次。为此,我找到了两个选择

首先是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日),我不需要另外的服务或逻辑层
因此,我将尝试在数据库本身中实现