Java Spring集成和JPA更新出站网关时出现循环引用错误
在接下来的spring集成流中,我一直试图通过循环引用来解决这个问题 我正在为entityManagerFactory和transactionManager bean使用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
<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" />