【问题标题】:Execute MySQL statement in the background automatically后台自动执行MySQL语句
【发布时间】:2015-05-06 10:22:22
【问题描述】:

我想从 MySQL 表中删除超过 3 分钟未更新的记录。如何在后台设置定时器来管理它而不被java中的事件或方法调用?这可能吗?

DELETE FROM bus WHERE created_at < (NOW() - INTERVAL 5 MINUTE) 

【问题讨论】:

  • 您使用的是哪个 dbms? (这不是 ANSI SQL,因此您需要产品特定的功能,如果可以的话。)
  • @jarlh:我正在使用 mysql。你能给我一个具有特定功能的产品的例子吗?

标签: java mysql sql server-side


【解决方案1】:

正如@abhishek-ghosh 正确指出的那样,您可以使用CREATE EVENT

CREATE EVENT event_bus_delete
   EVERY 5 MINUTE
   DO 
      DELETE FROM bus WHERE created_at < (NOW() - INTERVAL 5 MINUTE);

在 MySQL 5.1.6 中添加了事件支持。但是 MySQL Event Scheduler 默认情况下不运行,需要启用才能使事件工作。

请参阅 this StackOverflow answerHow to Configure MySQL Event Scheduler 文章,了解如何启用 MySQL 事件调度程序并确保它正在运行。

您可以使用 MySQL 配置文件(Windows 上的 my.cnf 或 my.ini)中的命令行选项 --event-scheduler=ONsetting event_scheduler=ON 确保启动 MySQL 时调度程序启动。

或者,您可以从 MySQL 命令行启动调度程序:

SET GLOBAL event_scheduler = ON;  

【讨论】:

  • 如何设置事件?我试过这样SET GLOBAL event_scheduler = ON; 还是不行?
  • 您使用的是什么版本的 MySQL?运行SET GLOBAL event_scheduler = ON; 时是否出现任何控制台错误?您在SHOW PROCESSLIST; 命令的输出中看到event_scheduler 用户吗?
【解决方案2】:

编辑

误读了您的问题 - 下面描述了如何使用 Java 来安排任务,而不是独立于 Java 层来完成它

您可以通过结合使用TimerTimerTask 来实现此目的。它们一起形成了一个非常简单的调度工具。 Timer 安排定期发生的 TimerTasks

网上有很多不错的教程:for example

【讨论】:

  • 我知道,但我的问题是如何在没有事件或触发器的情况下在后台调用它。在示例中,它是从 main 方法调用的?
  • 好吧,代码必须从 somewhere 调用,但是 Timer 创建了一个单独的执行线程,该线程仅在您的应用程序后台运行,让您的应用程序响应到用户发起的任何其他事件。因此,当您的应用程序启动时,创建 Timer,安排 TimerTask 并忘记它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-28
  • 1970-01-01
  • 2016-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-26
相关资源
最近更新 更多