Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.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集成和JPA更新出站网关时出现循环引用错误_Java_Hibernate_Spring Boot_Spring Integration_Spring Data Jpa - Fatal编程技术网

Java Spring集成和JPA更新出站网关时出现循环引用错误

Java Spring集成和JPA更新出站网关时出现循环引用错误,java,hibernate,spring-boot,spring-integration,spring-data-jpa,Java,Hibernate,Spring Boot,Spring Integration,Spring Data Jpa,在接下来的spring集成流中,我一直试图通过循环引用来解决这个问题 我正在为entityManagerFactory和transactionManager bean使用Spring引导自动配置 下面是两个jpa的集成上下文:更新出站网关,该网关从两个不同的通道读取消息,并将响应发送到一个公共通道 <int-jms:message-driven-channel-adapter id="jmsListener" connection-factory="connectionFa

在接下来的spring集成流中,我一直试图通过循环引用来解决这个问题

我正在为entityManagerFactory和transactionManager bean使用Spring引导自动配置

下面是两个jpa的集成上下文:更新出站网关,该网关从两个不同的通道读取消息,并将响应发送到一个公共通道

<int-jms:message-driven-channel-adapter
        id="jmsListener" connection-factory="connectionFactory"
        channel="queueChannel" destination="queueName"
        error-channel="errorChannel"/>

<int:chain input-channel="queueChannel" output-channel="dbChannel">
    ....
    // more stuff
    ....
</int:chain>

<int-jpa:updating-outbound-gateway id="updatingGateway1" request-channel="dbChannel" entity-manager-factory="entityManagerFactory" entity-class="com.example.MyMessage1" persist-mode="PERSIST" reply-channel="reportChannel" reply-timeout="5000">
    <int-jpa:transactional transaction-manager="transactionManager" propagation="REQUIRED"/>
</int-jpa:updating-outbound-gateway> 

<int:channel id="errorChannel"/>

<int-jpa:updating-outbound-gateway id="updatingGateway2" request-channel="errorChannel" entity-manager-factory="entityManagerFactory" entity-class="com.example.MyMessage2" persist-mode="PERSIST" reply-channel="reportChannel" reply-timeout="5000">
    <int-jpa:transactional transaction-manager="transactionManager" propagation="REQUIRED"/>
</int-jpa:updating-outbound-gateway>

<int:channel id="reportChannel"/>
<int:logging-channel-adapter channel="reportChannel" expression="payload"/>
但是,如果我删除其中一个

<int-jpa:updating-outbound-gateway ..> 


流,应用程序运行良好。任何意见或建议都将不胜感激。

好吧,我认为我们正是遇到了这个问题::对于
FactoryBean
,CTOR注入导致DEP的实例化太早

不幸的是,我们刚刚发布了SI-4.2.4,因此
JpaOutboundGatewayFactoryBean
的修复将在稍后的某个地方进行

同时,您可以尝试将此作为解决方法吗

<bean id="jpaOperations" class="org.springframework.integration.jpa.core.DefaultJpaOperations">
    <property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>

<int-jpa:updating-outbound-gateway jpa-operations="jpaOperations" />

而不是实体管理器工厂=“entityManagerFactory”


关于此事的JIRA罚单:。

您只需删除一个网关?或者两者都有?你能发布一个小应用程序(例如github)来演示这个问题吗?我只需要删除一个。删除任何一个网关和应用程序都可以正常运行。哪一个重要吗?我想知道什么是
errormessageupdateinggateway
。。。我们在您的配置中没有看到它的定义。我已经能够在本地复制它。奇怪的情况:当我们有多个
实体管理器工厂=“entityManagerFactory”
用法时,我们失败了。调查…是的,带有XML配置的JPAOOperations bean工作正常,但是Java配置抛出了相同的错误。Java配置?这里有新的吗?请分享!使用@Bean public JPAOOperations JPAOOperations(EntityManagerFactory EntityManagerFactory){DefaultJPAOOperations JPAOOperations=new DefaultJPAOOperations();JPAOOperations.setEntityManagerFactory(EntityManagerFactory);return JPAOOperations;}不起作用,但答案中的xml起作用。对,因为JpaOutboundGatewayFactoryBean确实使用了CTOR注入,这必须得到修复。既然您已经使用了一些XML,我假设您可以在那里再使用一个简单的
,直到我们的解决方案:-):)是的,我将使用XML。我将xml用于集成流只是因为它更容易用图表可视化,否则我更喜欢Java配置用于bean配置。再次感谢您的解决方案。
<bean id="jpaOperations" class="org.springframework.integration.jpa.core.DefaultJpaOperations">
    <property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>

<int-jpa:updating-outbound-gateway jpa-operations="jpaOperations" />