根据数据库更新和时间间隔触发Java程序

前端之家收集整理的这篇文章主要介绍了根据数据库更新和时间间隔触发Java程序前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想要一个启动 java程序(相当大的程序)的机制,具体取决于2个条件:

> MySQL表中的N个新插入
>每隔5分钟一次.

我知道我可以通过crontab或使用Timer或使用存储过程等来完成此操作.

我的计划是编写一个Java类(我最熟悉),Listener有两个并行线程 – 数据库侦听器和时间监听器线程,每个线程监视其中一个条件.如果有人说,是的,父类将启动一个新线程来运行该程序.

我觉得这将是一个沉重的重量计划.我还有其他选择吗?

解决方法

写一份工作.让它定期执行.

实际上,你会做一些以下的性质:

SELECT count(*) FROM table WHERE new = 1;

(管他呢)

每隔一秒,5秒,10秒运行一次,根据您的活动看似合理.

当count == N时,运行您的流程.当“自上次运行以来的时间”== 5分钟时,运行您的流程.

这个过程是一样的,你只需要用两个标准来检查它.

这提供了一个优势,即你不会在工作激活TWICE时遇到流氓竞争条件(因为工作A发现插入计数恰好是从最后一个工作运行起5分钟).很少见,但是,竞争条件似乎总是积极地寻找“从未发生过”的“罕见”事件.

至于调度,crontab很容易,因为你不必维护你的进程,保持活动,守护等等.

如果你已经在一个长期运行的容器(app server,tomcat等)中运行,那么这个问题已经解决了,你可以利用它.

cron的缺点是它的粒度,它最多只运行每分钟.如果时间太长,它对你不起作用.但如果没关系,那么只需点亮一个简单的过程,检查并退出就有了真正的价值.当然,它必须以某种方式保持它的状态(例如,它可以在作业日志中查看最后一个作业的运行时间).

在java中,有很多选项:原始线程,休眠,Timers,ScheduledExecutorService,类似Quartz,EJB Timer bean(如果你运行的是Java EE容器).

但是,我是KISS粉丝.如果一个cron作业可以做到,那就让它做,并做一次.

猜你在找的MsSQL相关文章