java - Hibernate 读行锁定

标签 java spring hibernate tomcat transactions

我有一个表 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 中拥有事务管理器以便它可以被两个应用程序共享可能会起作用,但我正在努力启动和运行它。这种方法行得通吗?

最佳答案

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

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

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

编辑>>>

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

关于java - Hibernate 读行锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17757732/

相关文章:

spring - javax.persistence.spi.PersistenceUnitInfo.getSharedCacheMode() Ljavax/persistence/SharedCacheMode;

java - 此 URL 不支持 HTTP 方法 GET

java - 使用 spring 表单在 spring mvc 中上传文件不起作用

java - 将多个输入读取到数组中的一个位置

java - spring Autowiring 注释错误

java - DefaultJmsListenerContainerFactory - 并发 - 每个队列的线程数在什么时候开始增加?

java - Hibernate @Version 不适用于一对多

mysql - "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax error" hibernate 4

java - SSL 和套接字 channel

java - 线程在它应该醒来的时候没有醒来