|
该版本仍在开发中,尚未被视为稳定。对于最新的稳定版本,请使用 Spring Integration 7.0.0! |
交易支持
从5.0版本开始,一个新的交易处理消息建议被引入以使整个下游流程成为交易性,这得益于HandleMessageAdvice实现。
当他成为常规成员时交易拦截者用于<请求-处理-建议链>元素(例如,通过配置<tx:建议>),初始事务仅应用于内部摘要回复ProducingMessageHandler.handleRequestMessage()并且不会传播到下游流。
为了简化XML配置,同时<请求-处理-建议链>一个<交易性>元素已被添加到所有<出站网关>和<服务激活器>以及相关组件。
以下示例显示<交易性>使用情况:
<int-jdbc:outbound-gateway query="select * from things where id=:headers[id]">
<int-jdbc:transactional/>
</int-jdbc:outbound-gateway>
<bean id="transactionManager" class="org.mockito.Mockito" factory-method="mock">
<constructor-arg value="org.springframework.transaction.TransactionManager"/>
</bean>
Java 配置可以通过使用交易拦截构建器,结果豆名可用于消息注释 建议链属性,如下例所示:
@Bean
public ConcurrentMetadataStore store() {
return new SimpleMetadataStore(hazelcastInstance()
.getMap("idempotentReceiverMetadataStore"));
}
@Bean
public IdempotentReceiverInterceptor idempotentReceiverInterceptor() {
return new IdempotentReceiverInterceptor(
new MetadataStoreSelector(
message -> message.getPayload().toString(),
message -> message.getPayload().toString().toUpperCase(), store()));
}
@Bean
public TransactionInterceptor transactionInterceptor() {
return new TransactionInterceptorBuilder(true)
.transactionManager(this.transactionManager)
.isolation(Isolation.READ_COMMITTED)
.propagation(Propagation.REQUIRES_NEW)
.build();
}
@Bean
@org.springframework.integration.annotation.Transformer(inputChannel = "input",
outputChannel = "output",
adviceChain = { "idempotentReceiverInterceptor",
"transactionInterceptor" })
public Transformer transformer() {
return message -> message;
}
注意true参数交易拦截构建器构造 函数。
它导致交易处理消息建议,不是常规交易拦截者.
Java DSL 支持建议通过.transactional()端点配置中的选项,如下示例所示:
@Bean
public IntegrationFlow updatingGatewayFlow() {
return f -> f
.handle(Jpa.updatingGateway(this.entityManagerFactory),
e -> e.transactional(true))
.channel(c -> c.queue("persistResults"));
}