java - 从后台线程的 catch block 更新表状态

标签 java spring hibernate try-catch

我正在调用一个方法,该方法涉及大量获取和更新表的操作,可能需要 10 多分钟的时间。这是使用后台线程完成的,以便 UI 具有响应能力,并且用户不必等待它完成。

有可能会引发异常。在这种情况下,我需要将列的状态从“待处理”更新为“失败”。

在 catch block 中执行此操作可以吗?我可以catch block 中编写代码,以便执行查询以将状态更新为失败吗?这是正确的方法还是还有其他方法可以做到这一点?

编辑:我可以做这样的事情,以便在引发异常时,状态更新为“失败”并打印异常堆栈跟踪吗?

catch (Exception e) {
        updateStatusByReqId(reqKey, "F");
        e.printStackTrace();
        }

这是否可以确保如果出现任何异常,请求的状态会更改为“失败”?请注意,在线创建请求时,请求的状态将是“待处理”。如果一切正常,它应该保持待定状态,否则更改为“失败”

最佳答案

如果您编写代码来更新 catch block 中的状态,它将正常工作,但是由于您位于方法内部,因此最好从方法返回 boolean 值并从线程的调用者更新 ui,像这样的东西:

private boolean updateDatabase() {
   try { 
    //Your long updating code ...
} catch {
 return false;
}
return true;
}

然后您可以从后台线程调用该方法,如果返回 false,则在 UI 中记录状态:

if(!updateDatabase()) {
//Update UI status 
}

从我的角度来看,这样做是一种更好的风格......

关于java - 从后台线程的 catch block 更新表状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9766004/

相关文章:

java - 检查 Java 字符串实例是否可能包含垃圾邮件数据的最简单方法

java - Intellij IDEA 未在小窗口中显示完整的 javadoc

java - setOnClickListener 方法中的重复代码 - android - java

java - 使用 JPA Criteria API 进行分页的总行数

java - 尝试使用 JPA 注释保存具有复合键和基本值的映射

java - 使用工厂创建策略

java - 在 Spring Boot 应用程序中禁用事务管理器

spring - 使用 SB 2.4 禁用 Consul 进行集成测试

java - 使用SimpleBrokerMessageHandler时的通信关系 - STOMP Spring

java - 缺少 Artifact org.hibernate :hibernate:pom:3. 3.2.GA