【问题标题】:Spring Integration JPA inbound channel adapterSpring Integration JPA 入站通道适配器
【发布时间】:2014-06-29 10:27:02
【问题描述】:

我有一个spring-integrationmessage channel,它使用jpa inbound-channel-adapter 从数据库中读取。

<int:channel id="logChannel">
    <int:priority-queue capacity="20" />
</int:channel>

<int-jpa:inbound-channel-adapter
    channel="logChannel" entity-class="com.objects.Transactionlog"
    entity-manager-factory="entityManagerFactory" auto-startup="true"
    jpa-query="SELECT x FROM Transactionlog AS x WHERE x.status LIKE '1'" max-results="1">
    <int:poller fixed-rate="5000">
        <int:transactional propagation="REQUIRED"
            transaction-manager="transactionManager" />
    </int:poller>
</int-jpa:inbound-channel-adapter>

这始终只读取表transactionlog 的第一行。所以我想在读取后更新每个数据库条目的status。有没有人知道怎么做?

【问题讨论】:

    标签: java spring jpa spring-integration


    【解决方案1】:

    如果max-results="1" 适合您并且每 5 秒只接收一个实体适合您的用例,那就顺其自然吧。

    现在如何更新该实体以在下次投票时跳过它。

    &lt;int-jpa:inbound-channel-adapter&gt;delete-after-poll="true" 选项,允许在实体检索后执行entityManager.remove(entity)

    是的,这是从数据库中真正删除。要将其转换为 UPDATE,您可以使用以下标记您的实体:

    @SQLDelete(sql = "UPDATE Transactionlog SET status = false WHERE id = ?")
    

    或者类似的,适合你的。

    另一个功能是Transaction Synchronization,当你用一些before-commit 工厂标记你的&lt;poller&gt; 并在那里进行更新时。比如:

    <int-jpa:inbound-channel-adapter ...>
        <int:poller fixed-rate="5000">
          <int:transactional propagation="REQUIRED"
               transaction-manager="transactionManager"
               synchronization-factory="txSyncFactory" />
        </int:poller>
    <int-jpa:inbound-channel-adapter>
    
    <int:transaction-synchronization-factory id="txSyncFactory">
        <int:before-commit channel="updateEntityChannel" />
    </int:transaction-synchronization-factory>
    
    <int:chain input-channel="updateEntityChannel">
       <int:enricher>
           <int:property name="status" value="true"/>
       </int:enricher>
       <int-jpa:outbound-channel-adapter entity-manager="entityManager"/>
    </int:chain/>
    

    类似的东西。

    【讨论】:

      猜你喜欢
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 2016-07-19
      • 2016-11-17
      • 2017-10-08
      • 1970-01-01
      • 2019-12-04
      • 2017-11-10
      相关资源
      最近更新 更多