加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 06:23:02 所属栏目:MsSql教程 来源:网络整理
导读:我想要一个启动 java程序(相当大的程序)的机制,具体取决于2个条件: MySQL表中的N个新插入 每隔5分钟一次. 我知道我可以通过crontab或使用Timer或使用存储过程等来完成此操作. 我的计划是编写一个Java类(我最熟悉),Listener有两个并行线程 – 数据库侦听器和
我想要一个启动 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作业可以做到,那就让它做,并做一次.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读