java - 触发Java进程检测满足特定条件的记录

标签 java spring oracle spring-integration

我正在使用 Spring 开发一个 Java 项目。数据库是Oracle 我们在附加到远程队列的容器中配置了一个消息监听器。以下是 onMessage 被触发后我们执行的步骤

  1. 解析消息
  2. 将消息插入数据库。
  3. 根据消息的内容执行一些额外的处理,涉及文件处理、数据库插入/更新等。

如果队列中收到的消息良好,但由于我们这边的某些问题,我们无法处理它,我们没有办法在等待一段时间后重新处理该消息[假设触发了该问题错误得到解决]。

以下是提出的新设计。 1. 解析消息 2. 将带有标志的消息插入到数据库中。说“假”[该标志仅在消息成功处理时才会更改。]

要添加的新进程会查询数据库中标记为“假”的记录[一次一个],对其进行处理并将标记更新为真。如果处理失败,请重试可配置的时间来处理同一记录。如果没有更多记录要处理或已耗尽重试次数,则进程可能会终止...

请提出合理的设计,以便在检测到标记为“错误”的记录时尽早处理消息

  1. 使用数据库触发器触发 java 进程? [DBA 反对]
  2. 有没有一种方法可以在数据库插入完成后在 onMessage 方法中触发该过程,并且不会阻止下一条消息的检索?
  3. 安排一项定期轮询数据库的作业?

最佳答案

这可以在 Spring 中使用 @Async 注释来完成。此注释允许在插入完成后异步启动任务。

这意味着在 @Async 操作运行时,进行插入的线程不会阻塞,并且会立即返回。

根据配置的任务执行器,@Async 将在单独的线程中执行,这正是本例中您所需要的。我建议从 SimpleAsyncTaskExecutor 开始,请参阅 here有哪些不同的任务执行器可用。

另请检查此 Spring tutorial欲了解更多信息。

关于java - 触发Java进程检测满足特定条件的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22081193/

相关文章:

Oracle Unified Directory 导入具有哈希密码的用户

oracle - 使用从同一个表获取值的变量创建更新触发器的正确​​方法是什么?

mysql - 功能与 to_char(datetime) 类似,可以在 Oracle 和 MySQL 中使用?

java - imageView 不显示在预览场景中,但仍显示在模拟器上

java - Spring /DI : Constructor injection in child class

Spring数据示例

spring - 如何使用 Spring Cloud Task 动态部署独立 Spring 批处理

java - 如何在java中打印svg?

java - 绑定(bind)不匹配 : The type MyClass1 is not a valid substitute for the bounded parameter <T extends Comparator<T>> of the type Person<T>

java - 方法无法解析为 Eclipse 中的变量