我正在使用 Spring 开发一个 Java 项目。数据库是Oracle 我们在附加到远程队列的容器中配置了一个消息监听器。以下是 onMessage 被触发后我们执行的步骤
- 解析消息
- 将消息插入数据库。
- 根据消息的内容执行一些额外的处理,涉及文件处理、数据库插入/更新等。
如果队列中收到的消息良好,但由于我们这边的某些问题,我们无法处理它,我们没有办法在等待一段时间后重新处理该消息[假设触发了该问题错误得到解决]。
以下是提出的新设计。 1. 解析消息 2. 将带有标志的消息插入到数据库中。说“假”[该标志仅在消息成功处理时才会更改。]
要添加的新进程会查询数据库中标记为“假”的记录[一次一个],对其进行处理并将标记更新为真。如果处理失败,请重试可配置的时间来处理同一记录。如果没有更多记录要处理或已耗尽重试次数,则进程可能会终止...
请提出合理的设计,以便在检测到标记为“错误”的记录时尽早处理消息
- 使用数据库触发器触发 java 进程? [DBA 反对]
- 有没有一种方法可以在数据库插入完成后在 onMessage 方法中触发该过程,并且不会阻止下一条消息的检索?
- 安排一项定期轮询数据库的作业?
最佳答案
这可以在 Spring 中使用 @Async
注释来完成。此注释允许在插入完成后异步启动任务。
这意味着在 @Async
操作运行时,进行插入的线程不会阻塞,并且会立即返回。
根据配置的任务执行器,@Async
将在单独的线程中执行,这正是本例中您所需要的。我建议从 SimpleAsyncTaskExecutor
开始,请参阅 here有哪些不同的任务执行器可用。
另请检查此 Spring tutorial欲了解更多信息。
关于java - 触发Java进程检测满足特定条件的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22081193/