Java 在JEE中24小时后从MySQL中删除一行?

Java 在JEE中24小时后从MySQL中删除一行?,java,mysql,jakarta-ee,Java,Mysql,Jakarta Ee,我正在尝试删除表中的一行。这是我的示例代码 String DBDate = new String(); Long date = new Date().getTime(); String dateToday = date.toString(); dbobj.clear(); dbobj.put(LAST_TIME_ANSWERED, ""); int hasDB = dbobj.getFromDB(tableName,column key, prim

我正在尝试删除表中的一行。这是我的示例代码

String DBDate = new String();
Long date = new Date().getTime();           
String dateToday = date.toString();             
dbobj.clear();
dbobj.put(LAST_TIME_ANSWERED, "");
int hasDB = dbobj.getFromDB(tableName,column key, primary key);

if(hasDB != 0) {
    DBDate = dbobj.get(LAST_TIME_ANSWERED);
    if(DBDate != dateToday) {
        dbobj.deleteClientDB(tableName, column key, primary key);
    }
}
如何更改计时器的日期?
任何帮助都很好。提前谢谢

这在java中很难实现,因为需要按计划运行作业才能实现。您应该强烈考虑使用MySQL事件调度器。请参阅以获取此示例

在db中插入行时,应设置一个事件,该事件在24小时后触发一次,并使用必要的sql删除该行。您将以每行一个事件结束

或者,使用java和正确配置的服务器,在每次插入行之后,您可以添加一个cron或quartz作业,该作业将在24小时后触发一次,该作业将调用java函数删除该行。这比使用db的内置事件调度器更难

根据JEE版本>6,您可以使用EJB3.1计时器,如中所述


在这些选项中,db事件调度器可能是最好的,因为如果JEE服务器关闭,其他选项可能会出错。

有两个选项可供选择。 1.使用java调度器或
2.使用数据库级别的计划作业在每天结束时清除数据

一种常见做法是删除早于某个阈值的数据库记录。为此,数据库表应该有一列,该列的时间戳表示插入或更新时间。执行计划任务时,将执行伪代码命令,假设“更新”时间戳:

从上次更新的表名称中删除<当前时间-阈值

或者执行一个select查询来检索所有这些记录并逐个处理它们的删除,包括日志记录和一些条件逻辑

为了实现此功能,java SE提供了可用于执行延迟任务的功能:

    // initialize scheduler
    ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

    // schedule repeating task
    ScheduledFuture future = scheduler.scheduleAtFixedRate(
            () -> {
                System.out.println("Excuting task...");
            },
            60,
            60,
            TimeUnit.SECONDS
    );
future对象可用于取消任务:

future.cancel(true);
scheduler.shutdown();

但是当使用企业解决方案时,通常会有库和框架,提供执行计划任务的功能:,或者。

您不能在数据库行级别使用TTL吗?这取决于数据库,您使用的是什么数据库?我使用的是mysql。在我的网站上。我想在24小时后清除特定用户数据库中的所有数据。您应该阅读以下内容:谢谢,将阅读此内容。感谢所有的帮助,这基本上就是我们所说的“一行回答”,他们对此感到沮丧。如果你能在这一点上扩展一下,那就太好了。也许可以给你一些指导,看看这些选项代表了什么,以及如何在它们之间做出选择。可以用简单的方式说的事情,也不应该像写文章一样:要清楚,你推荐了一份经常运行的工作,它可以清除任何超过24小时阈值的内容。这可能就足够了。但是,如果您想在记录到达24小时后立即删除它,那么每行必须有一个计时器。此外,这个问题明确要求JEE,因此SE和Spring虽然很好,但并不在上下文中。