如何在java中安排一个动作?

时间:2010-01-31 19:24:22

标签: java scheduling

我正在开发一个应用程序,它要求在每天结束时将数据库的内容写入ms-excel文件。我已经编写了将内容复制到ms-excel文件的代码但是现在该如何继续进行?线程是否用于检查24小时的完成情况还是有其他机制?请给我一些指导。

3 个答案:

答案 0 :(得分:5)

如果你需要设置在白天的固定时间运行,你应该考虑Quartz Scheduler。它可能有点矫枉过正,但它非常有能力。

例如,您可以使用其CronTrigger将作业配置为按照cron表达式定义的计划运行,例如0 23 55 * * ?(或类似的东西)会在每晚5点至午夜开始工作(见examples)。

Quartz最近被Terracotta人员收购,从而推动了其未来和财富。希望它现在能得到一些真正的积极发展。

答案 1 :(得分:3)

我同意其他人使用像crontab这样的东西会更好。但是,如果你不能这样做,我会使用Java 1.5中添加的java.util.concurrent包。您需要的课程是ScheduledThreadPoolExecutor。具体来说,scheduleAtFixedRate()方法。

答案 2 :(得分:1)

我认为从设计角度来看,最好在Linux平台上使用crontab或在Windows平台上使用任务调度程序。它将使您的Java程序保持小巧,简单。虽然线程等待特定时间的解决方案看起来很简单,但它会增加一个严重的问题 - 您必须监视其健康状况。 另外 - 我建议每次运行时仔细计划你的工作正在编写的日志。为成功和不成功运行记录日志非常重要。 为这样的日志创建单独的文件是有意义的。 还有一个需要考虑的案例 - 如果数据库在作业运行时没有完全可用,该怎么办?是否可以再等24小时?