Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在spring集成dsl中配置spring事务_Java_Spring_Spring Integration - Fatal编程技术网

Java 在spring集成dsl中配置spring事务

Java 在spring集成dsl中配置spring事务,java,spring,spring-integration,Java,Spring,Spring Integration,我目前正在使用SpringIntegrationDSL配置SpringIntegration,如下所示 @Bean public IntegrationFlow flow() { return IntegrationFlows.from(inboundServer()) .transform(Transformers.objectToString()) .transform(...) .route(...)

我目前正在使用SpringIntegrationDSL配置SpringIntegration,如下所示

@Bean
public IntegrationFlow flow() {
    return IntegrationFlows.from(inboundServer())
            .transform(Transformers.objectToString())
            .transform(...)
            .route(...)
            .transform(Transformers.toJson())
            .channel(...)
            .get();
}

@Bean
public PlatformTransactionManager transactionManager() {
    ....
}

我不知道如何配置流以使用我配置的事务管理器。

实际上,Spring Integration Java DSL支持XML可用的所有事务功能

请提供您希望从何处开始交易的更多信息。请记住,TX支持仅限于线程边界。因此,您可以从轮询器或JMS(AMQP)消息驱动通道适配器启动TX

或者使用
TransactionInterceptor
作为流中任何端点的建议。但在这种情况下,仅对
AbstractReplyProducingMessageHandler.HandlerRequestMessage
限制发送

更新

为流程的某些部分启动TX不是标准任务,它可以作为
工作单元
一些事务性黑盒来实现。为此,我们有一个类似于网关的组件。因此,您可以指定一些接口,用
@MessagingGateway
标记它,将
@IntegrationComponentScan
@EnableConfiguration
一起添加,并用
@Transactional
标记该接口的方法。此网关的
requestChannel
应使用JDBC和Jackson转换将消息发送到某个单独的流,并等待结果在主流中继续。在从该网关的方法调用返回时,发送将完成


句柄(“myGateway”,“getData”)

将该网关称为常规
服务激活器。inboundServer()是一个TCP入站网关,我希望在它收到消息时立即启动事务。很抱歉延迟。通过原始TCP上的发送,您将获得哪些收益?即使我们可以使用AOP在那里添加TX拦截器,回滚也不会将收到的消息返回到套接字。请为您的用例共享更多信息。我不会获得传入原始TCP的发送。我的用例是,传入的数据是一个查询数据库的请求。它将使用jdbcTemplate返回一个大数据,并使用Jackson进行序列化。这种方法的问题是,在序列化之前,所有数据都必须加载到内存中。如果数据太大,可能会导致内存不足。为了克服这个问题,我扩展了jdbcTemplate,它返回
java.util.stream.stream
。问题是,流仅在tx内部打开。一旦tx关闭,流将关闭。所以我需要在序列化期间打开tx。感谢您更新的答案。如果我错了,请纠正我,我认为您的意思是使用@Transactional注释的方法创建一个网关,该方法返回json字符串?对。请记住,流必须是
直接的
单线程的,并且依赖于由网关填充的
回复通道