假设我的网络应用程序有两个spring cron作业,计划每分钟/小时运行一次。在我重新部署我的应用程序之前,我不能只关闭它,我必须等待工作正确完成。我可以在数据库或其他地方提供一些标志,以便作业将停止迭代运行 - 每分钟或每小时 - 在作业函数内部进行一些检查,如果检查了这样的标志,则在下一次触发调用时返回/不执行任何操作。
但我怎么能等待当前的工作电话完成?如何从蚂蚁或其他外部脚本中看到它 - 为服务器关闭选择好时机。
可能有解决方案在db或file中放置一些标志,然后读取它。但可能有一些更准确的方式 - jms或类似的东西?
答案 0 :(得分:0)
如果您使用TaskExecutor
来运行“cron”作业,那么您可以使用this answer中的skaffman描述的方法来获取任务执行的结果。如果你需要从ant访问这个,你可以使用spring JMS support和ant-jms。
答案 1 :(得分:0)
您可以使用JMX代替使用数据库。 - 但我认为:如果你已经使用了数据库但还没有使用JMX,那么使用DB标志或简单文件来通知计时器“停止”。
比使用该标志更好,并且如果设置了标志则检查每次调用将在ThreadPoolTaskSchedule
或ThreadPoolTaskExecutor
下面shutdown()
。
但这需要第二个任务(每分钟或更短时间运行)来检查标志然后关闭到调度程序。
要使ant任务等待一段时间,在设置标志后,为了确保上一个任务完成,您可以使用WaitFor任务。