我现在有一个 Java 的 WEB 程序, 有一些前端触发的后台任务, 比如同步一些数据. 为了不让它重复运行, 我在数据库里单独给后台任务建了一张表, 记录当前运行状态(运行, 结束, 错误), 这样即使前端意外刷新或者关闭了也不会导致用户重复触发这个任务.
现在遇到一个问题, 正常结束或者异常都能正确检测到,然后更新状态(在最外面用了 try.catch.finally). 但是确实发现有时后台任务已经结束了, 但是那个任务记录没有被更新.
比如正常任务 5 分钟结束, 但是几个小时过去了, 状态还是正在运行, 但是查 log 又什么都没有发现, 感觉就像这个任务线程莫名其妙自己结束了.
这样的情况偶尔发生, 但是每次发生都要人工去数据库修改状态, 才能继续重新运行, 很麻烦.
我现在一方面在查问题的原因, 另一方面想请教大家在这个任务上业界的一般做法或者最佳实践是什么? 有没有什么好的办法能避免这样的问题, 或者能自动检测这样的情况自动处理掉?
现在遇到一个问题, 正常结束或者异常都能正确检测到,然后更新状态(在最外面用了 try.catch.finally). 但是确实发现有时后台任务已经结束了, 但是那个任务记录没有被更新.
比如正常任务 5 分钟结束, 但是几个小时过去了, 状态还是正在运行, 但是查 log 又什么都没有发现, 感觉就像这个任务线程莫名其妙自己结束了.
这样的情况偶尔发生, 但是每次发生都要人工去数据库修改状态, 才能继续重新运行, 很麻烦.
我现在一方面在查问题的原因, 另一方面想请教大家在这个任务上业界的一般做法或者最佳实践是什么? 有没有什么好的办法能避免这样的问题, 或者能自动检测这样的情况自动处理掉?