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

时间:2014-02-27 21:47:01

标签: java spring oracle spring-integration

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

  1. 解析消息
  2. 将消息插入数据库。
  3. 根据消息内容做一些额外的过程,包括文件处理,数据库插入/更新等。
  4. 如果队列中收到的消息是好的并且由于我们方面的某些问题,我们无法处理它,我们没有办法在等待一段时间后重新处理消息[假设触发了该问题的问题错误得到解决]。

    以下是提出的新设计。 1.解析消息 2.使用标志在数据库中插入消息。说“false”[只有在成功处理邮件时才会更改标志。]

    要添加的新进程,查询数据库以标记为“false”[一次一个]的记录,处理它并将标志更新为true。如果处理失败,请重试可配置的时间来处理相同的记录。如果没有更多记录要处理或已经用尽重试次数,该过程可能会死亡......

    请建议合理的设计,尽早处理邮件,检测标记为“false”的记录

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

2 个答案:

答案 0 :(得分:1)

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

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

根据配置的任务执行程序,@Async将在单独的线程中执行,这是您在这种情况下所需的。我建议从SimpleAsyncTaskExecutor开始,参见here可用的不同任务执行程序。

另请查看此Spring tutorial以获取更多信息。

答案 1 :(得分:1)

由于您已经在使用Spring Integration,为什么不将增强的消息发送到新的频道并在那里进行处理?如果通道是QueueChannel,则处理将是同步的。还有重试功能。