sti*_*kos 5 scheduled-tasks playframework
我正在尝试使用Play中的异步作业运行长时间运行的任务(不阻止HTTP请求执行池).Play中的Jobs完全由框架管理,因此Play将负责数据库连接和事务.这意味着作业在单个事务中作为普通调用运行.这对于大多数用例来说都很棒,但是如果你需要在作业完成之前提交一些数据呢?
那么,据Guillaume Bort说,一种选择就是
将您的流程分成几个小工作
他给出了以下例子:
@On("0 0 12 * * ?")
public class UpdateCounters extends Job {
public void doJob() {
List<Employee> empList = Employee.find("long and boring SQL :)").fetch();
for(Employee emp : empList) {
new UpdateEmployeeJob(emp).now().get();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这很酷......每个新工作都有自己的事务,所以当这个新工作完成时,它会提交数据.干净简单!但是如果你不想这样做呢?假设您需要等到数据提交后再继续初始作业?
通常,您将从新作业中检索Promise并调用await(jobPromise),但这在作业中不起作用(等待仅在扩展Controller时可用且未在作业上实现)...
那么,在新的小型工作完成之前暂停初始工作的最佳方法是什么?
| 归档时间: |
|
| 查看次数: |
2305 次 |
| 最近记录: |