Java 长时间运行的操作的状态应存储在哪里?
我们在系统中内置了一个操作(特此命名为Java 长时间运行的操作的状态应存储在哪里?,java,spring,Java,Spring,我们在系统中内置了一个操作(特此命名为check())。启动此过程后,我们希望将此资源的状态从未启动更改为正在进行,并在完成后更改为失败或成功 当前实现是将所述资源的相应状态写入数据库。因此,流程如下(如果运行成功): 用户单击检查->check()started->在数据库中将资源的状态设置为In Processcheck()finished->在数据库中将资源的状态设置为Successful 在check()期间,如果用户单击前端上的刷新,将触发对相应资源的获取请求,从而检索要向用户显示的当
check()
)。启动此过程后,我们希望将此资源的状态从未启动
更改为正在进行
,并在完成后更改为失败
或成功
当前实现是将所述资源的相应状态写入数据库。因此,流程如下(如果运行成功):
用户单击检查->check()
started->在数据库中将资源的状态设置为In Process
check()
finished->在数据库中将资源的状态设置为Successful
在check()
期间,如果用户单击前端上的刷新,将触发对相应资源的获取
请求,从而检索要向用户显示的当前状态(正在进行
)。如果另一个用户试图对当前正在处理中的资源运行check()
,则在检查数据库中资源的状态时,请求应失败
这是向DB注册临时状态的正确解决方案吗?我觉得DB应该用来保存记录,而不是用作闩锁 您可以使用此技术解决此问题。您可以将一系列状态转换存储为事件,而不是存储流程的最新状态。对于每个传入命令(如您提到的检查或刷新),您可以:
要正确实现此类系统,请不要忘记对事件进行版本控制。以下是版本控制指南:数据库中的行表示流程,流程具有随时间变化的状态。我没有看到任何错误。如果操作结果是数据,那么我会将操作结果存储在DB中,而不是状态。另一个解决方案-您可以创建一个web服务来处理该操作。它将在过程完成后在主系统中注册结果。你的解决方案也可以。