根据数据库更新和时间间隔触发Java程序
我想要一个启动
java程序(相当大的程序)的机制,具体取决于2个条件:
> MySQL表中的N个新插入 我知道我可以通过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作业可以做到,那就让它做,并做一次. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |