2010-01-31 47 views
1

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

回答

5

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

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

石英最近被兵马俑收购了,它的未来和财富得到了提升。希望它现在会得到一些真正的积极发展。

1

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

3

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

+0

谢谢!但是,请你给我一个例子吗? :) – Supereme 2010-02-03 02:08:55

+1

我在我原来的答案中包含了一个到JavaDoc的链接,但这里有一些其他资源: (1)http://www.javaconcurrencyinpractice.com/jcip-sample.pdf (2)http:///www.java2s.com/Tutorial/Java/0160__Thread/JDK15providesamechanismtocreateapoolascheduledtask.htm (3)http://book.javanb.com/java-threads-3rd/jthreads3-CHP-11-SECT-4.html – 2010-02-03 03:49:45