如何检查JAVA代码(存在于数据库中)是否正确完成或突然终止



我有一个在SQL Server中持久化某些数据的服务。我正在保存的两个字段被命名为

is_valid,这只是一个安全检查,以防将来我们需要使当前运行的服务(以及它在DB中保留的任何数据(无效。

另一个字段是end_execution_time,它是当前服务结束的时间。

当我启动服务时,我有is_valid=0end_execution_time=NULL。当运行完成(成功(时,我有is_valid=1end_execution_time=GETDATETIME()。现在,这是我关心的

我有3种可能发生的情况->

  1. 服务运行失败。代码知道运行失败。所以我们在数据库中更新is_valid = 0end_execution_time保持为空
  2. 由于某种原因,Run失败,代码也停止工作(有点像终端中的Ctrl-C(。CCD_ 9最初具有值0。它仍然为零。end_execution_time保持为空
  3. 某些跑步活动。现在is_valid为0。end_execution_time为空

在未来,我如何检查当前某些服务是否正在进行中,或者是否已提前终止?

无法区分第二种和第三种情况。请帮帮我。我正在使用Spring Mybatis和Java/Kotlin

如果您可以修改服务代码,以下是您可以做的一些事情,以帮助区分第二种和第三种情况。

1( 检查长时间运行的服务呼叫并使其过期。假设某个时间间隔(1分钟?(内的呼叫已终止。使用开始时间和日期差异来实现这一点。

2( 使用try/catch/FINALLY的FINALLY部分来更新服务调用失败时的数据库。

3( 将服务调用实现为异步服务调用,如下所述:http://wiki.eclipse.org/Jetty/Feature/Continuations#Jetty_6_Continuations我知道您没有使用Jetty,但听起来您需要在更新数据库的服务调用上超时。

我不知道如何在不修改代码的情况下解决您的问题。

祝你好运!

通过编程,您可以捕捉到进程是否突然结束。然而,令人担忧的是,你正在与三个州打交道。在我看来,您要么需要is_valid和end_time的中间状态,要么需要数据库中的额外列来标识当前状态

例如:

状态1:

success 
is_valid = 1
end_time = time

状态2:不成功,但过程没有突然结束

is_valid = 0 
end_time = null 

状态3:未成功,但处理并突然结束

is_valid = -1 // just an example
end_time = -1  // just an example

最新更新