我试图将spring批处理过程的输出发送到RabbitMQ。为了避免对Rabbitmq的硬依赖,我使用了spring集成,如spring xd中是否有API来写入消息总线?。在我决定通过Spring自动连接或实例化bean之前,我将消息推送到RabbitMQ,一切都很好。
<context:component-scan base-package="com.test.*"/>
<channel id="input" />
<rabbit:connection-factory id="connectionFactory" />
<rabbit:template id="amqpTemplate" connection-factory="connectionFactory"
exchange="testExchange" routing-key="foo.bar" />
<rabbit:admin connection-factory="connectionFactory" />
<rabbit:queue name="testQueue" id="timeseriesQueue" />
<rabbit:topic-exchange name="testExchange"
id="testExchange">
<rabbit:bindings>
<rabbit:binding queue="testQueue" pattern="foo.*" />
</rabbit:bindings>
</rabbit:topic-exchange>
<!-- Send message to rabbitmq -->
<gateway id="testGateway"
service-interface="com.test.TestService"
default-request-channel="input" />
<amqp:outbound-channel-adapter channel="input"
amqp-template="amqpTemplate" exchange-name="testExchange"
routing-key="foo.bar" />
testService只是方法sendMessage的接口。
spring批处理作业有一个itemWriter,它使用网关bean写入RabbitMQ
在itemWriter的write方法中,当我使用ApplicationContext实例化bean时,如下图所示,它运行良好
AbstractApplicationContext ctx =
new ClassPathXmlApplicationContext("META-INF/spring/integration/rabbit.xml");
TestService service = ctx.getBean("testGateway", TestService.class);
service.sendMessage(items);
ctx.close();
然而,当我尝试自动连线时,如下所示:
@Autowired
TestService service;
我得到以下例外:
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.test.TestService com.test.TransportItemWriter.testGateway; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.test.TestService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:508)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:289)
... 22 more
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.test.TestService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1103)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:963)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:858)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:480)
... 24 more
我试着四处看看,但是网关的大多数示例(在Spring集成示例中)都是通过Application Context调用它的。我找到了http://java.dzone.com/articles/spring-integration-gateways-1,并添加了我认为丢失的任何注释,但无法让它工作。
自动连接在功能上等同于从上下文中获取bean(除非有多个实例,在这种情况下,您需要正确的变量名或限定符),但这会给您带来不同的错误。网关是否与ItemWriter处于相同的上下文中?
`META-INF/spring/integration/rabbit.xml`
意味着它在自己的语境中。你是<代码>
我通常通过打开org的调试日志来调试这样的问题。springframework;它为bean连接发出大量日志。
另一种很好的调试技术是将应用程序上下文打印出来。getBeanFactory()。toString()。
我知道这是一个老问题,但我有一个类似的问题:
我将使用一个名为MySFTPUploadGateway的类MessagingGateway接口。java(当然是一个网关)放在mydependency1中。罐子我还有一个名为ApplicationMain的SpringBoot应用程序。但是当我启动我的应用程序时,这个崩溃是因为ApplicationMain。运行时,未找到MySFTPUploadGateway的jar。类,用于将自动连接作为Bean。我尝试了组件扫描(“
读了一点,我发现https://github.com/spring-projects/spring-boot/issues/2037,很酷,我想我有@IntegrationComponentScan
的解决方案(给我@jogo的线索)。但是...这种anotation仅适用于@EnableAutoConfiguration。这是关键。
因此,请将您的:
@EnableAutoConfiguration
@IntegrationComponentScan("<yourpathPackage>")
..让它继续运行!
我最近也在处理类似的问题。解决方案是在配置中添加新注释:
@IntegrationComponentScan(“路径到您的网关”)
问题内容: 我在结合JavaFX和Spring时遇到问题。我有一个简单的JavaFX应用程序,它运行良好。现在,我正在尝试向其中添加一些Spring。我在Spring教程中跟随JavaFX 2。我的代码: 是具有main的文件: : : 我的SpringFxmlLoader在教程中看起来与此类似: 我的SpringApplicationConfig: 在我的应用程序中,我具有绑定控制器: 当我运行
这里排着队 但我用 使用请求/响应体系结构。它确实工作得很好,因为它提供了动态路由,手动创建tcp客户端。
我的豆子。xml Java控制器 DAO类 @自动连线专用DAO数据库;
主要内容:Spring 自动装配,自动装配规则,示例我们把 Spring 在 Bean 与 Bean 之间建立依赖关系的行为称为“装配”。 Spring 的 IOC 容器虽然功能强大,但它本身不过只是一个空壳而已,它自己并不能独自完成装配工作。需要我们主动将 Bean 放进去,并告诉它 Bean 和 Bean 之间的依赖关系,它才能按照我们的要求完成装配工作。 在前面的学习中,我们都是在 XML 配置中通过 <constructor-arg>和 <
我正在开发一个Spring集成应用程序,我有一个地图列表,我需要将其插入到表格中。 我使用了jdbc: Outsport-网关或适配器将记录插入到表中。 但是如何使用jdbc:出站网关从我的地图列表中插入所有记录。
我对Spring集成中通道适配器和网关的差异感到困惑。正如@gary-russell在https://stackoverflow.com/a/29992267/467944中所述,通道适配器是非分布式的,而网关是双向的。如果是这种情况,为什么有amqp入站网关和amqp出站网关? 我最终要完成的是以下几点: 在控制器内接收到Http请求 将消息放在amqp队列上 消费者使用消息并将结果放入结果队列