gpt4 book ai didi

java - Sql事件与Servlet中的ScheduledExecutorService

转载 作者:行者123 更新时间:2023-11-28 23:25:57 24 4
gpt4 key购买 nike

我为不同的表单提交构建了一个网络应用程序。我的要求是,我想每年 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();
}
}

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;
}
}
}

第二种选择是在数据库中使用 MySQL 的事件调度器

CREATE EVENT `event_name` 
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE | DISABLE ON SLAVE]
DO BEGIN
-- event body
END;

可以为时间表分配各种设置,例如

  • 在特定日期/时间运行一次:AT ‘YYYY-MM-DD HH:MM.SS’ 例如在‘2011-06-01 02:00.00’
  • 在特定时间段过去后运行一次:AT CURRENT_TIMESTAMP +INTERVAL n [HOUR|MONTH|WEEK|DAY|MINUTE] 例如在 CURRENT_TIMESTAMP +间隔 1 天
  • 永远以特定的时间间隔运行:EVERY n[小时|月|周|日|分钟] 例如每 1 天一次

我的问题是哪种方法好,为什么?还有其他方法吗?谢谢。

最佳答案

我会更喜欢数据库中的事件调度器

  • 由于数据库调用被认为是繁重的调用,我会尽量减少调用。
  • 由于时间/日期是固定的(在您的情况下是 4 月 1 日),我不需要其他额外的服务或逻辑层

因此我会尝试在数据库中实现

关于java - Sql事件与Servlet中的ScheduledExecutorService,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39346259/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com