我有一個從輪詢器開始的集成流程。這不會打開交易。在該流程中,我有一個 JPA 更新出站網關:
<int-jpa:updating-outbound-gateway
request-channel="requestChannel"
reply-channel="replyChannel"
named-query="myUpdatingJpqlQuery"
entity-manager-factory="entityManagerFactory">
<int-jpa:transactional
transaction-manager="transactionManager" />
<int-jpa:parameter name="param1" expression="payload" />
<int-jpa:parameter name="param2"
expression="T(java.time.Instant).now()" />
</int-jpa:updating-outbound-gateway>
然而,這是有效的,這個網關打開的事務包含整個下游流(除非我用執行器打破事務邊界)。在這種情況下,這不是我想要的:我希望事務只包含更新操作(某種“自動提交”),因為下游流將以更細粒度的方式處理事務并需要處理獨立事務(不要加入外部的)。
這確實似乎得到了檔案的證實:https : //docs.spring.io/spring-integration/docs/5.4.11/reference/html/messaging-endpoints.html#tx-handle-message-advice
如果我很好地理解了鏈接部分,如果我改為使用 a<request-handler-advice-chain>和 a<tx:advice>我應該會得到所需的結果。
但是,如果我使用這個:
<int-jpa:updating-outbound-gateway
request-channel="requestChannel"
reply-channel="replyChannel"
named-query="myUpdatingJpqlQuery"
entity-manager-factory="entityManagerFactory">
<int-jpa:parameter name="param1" expression="payload" />
<int-jpa:parameter name="param2"
expression="T(java.time.Instant).now()" />
<int-jpa:request-handler-advice-chain>
<tx:advice transaction-manager="transactionManager" />
</int-jpa:request-handler-advice-chain>
</int-jpa:updating-outbound-gateway>
我得到了一個javax.persistence.TransactionRequiredException,所以這個建議似乎不起作用(至少不是我想要的方式)。
什么是更好的方法來做到這一點?我是否被迫在回復通道上使用帶有執行程式的調度程式來打破事務邊界?
uj5u.com熱心網友回復:
讓它像這樣:
<tx:advice>
<tx:attributes>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
默認情況下,它沒有任何方法匹配,因此此類建議不適用于內部AdvisedRequestHandler.
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/336544.html
