0

我有一个Jobs带有字段NameStatus.

我正在尝试在 tomcat 实例中部署两个单独的应用程序以轮询作业表以获取新记录,但重要的是两个进程都不会收到相同的作业记录。我怎样才能做到这一点?

到目前为止,我的(不成功的)方法是使用 spring 集成:

<int-jdbc:inbound-channel-adapter 
    query="select * from jobs where status=1"
    channel="rawInputDataListChannel"
    data-source="dataSource"
    update="update input_table set status=2 where status=1">
    <int:poller fixed-rate="1">
        <int:transactional isolation="READ_COMMITTED" />
    </int:poller>
</int-jdbc:inbound-channel-adapter>

由于这不起作用,我认为也许在 tomcat 中有事务管理器以便两个应用程序共享它可能会起作用,但我正在努力让它启动并运行。这种方法行得通吗?

4

1 回答 1

10

你的问题的标题提到了休眠,所以让我们看看 JPA 2.0 必须提供什么,这LockMode与悲观锁定的想法有关。在您正在查看的情况下,您可能希望同时运行查询,并让每个 JVM 获得一组唯一的结果。在这种情况下,您想模拟 a SELECT... FOR UPDATE(它有点专有,取决于您的数据库是否会直接支持该语句)。

在 JPA 2.0 中,您可以使用@LockMode并指定检索结果集以进行更新,因此将其“锁定”在数据库中,这样其他连接就无法获得相同的结果。

看看这篇文章,尝试比我更好地解释它,并特别看看“悲观”模式。

编辑>>>

如果您正在查看休眠 3.x,请尝试链接

于 2013-07-20T01:53:09.120 回答