Spring boot 弹簧靴1.2.0.M2应用程序

Spring boot 弹簧靴1.2.0.M2应用程序,spring-boot,Spring Boot,我有一个spring boot应用程序,在我从1.2.0.M1升级到1.2.0.M2之前运行良好。由于spring boot RabbitAutoConfiguration导致未满足的PendencyException,应用程序将无法生成: Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'jmsMessagingTempl

我有一个spring boot应用程序,在我从1.2.0.M1升级到1.2.0.M2之前运行良好。由于spring boot RabbitAutoConfiguration导致未满足的PendencyException,应用程序将无法生成:

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException:
    Error creating bean with name 'jmsMessagingTemplate' defined in class path resource [org/springframework/boot/autoconfigure/amqp/RabbitAutoConfiguration$MessagingTemplateConfiguration.class]: 
    Unsatisfied dependency expressed through constructor argument with index 0 of type [org.springframework.amqp.rabbit.core.RabbitTemplate]: :
    No qualifying bean of type [org.springframework.amqp.rabbit.core.RabbitTemplate] is defined: 
    expected single matching bean but found 3: looperTemplate,pingTemplate,orgRequestTemplate; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: 
    No qualifying bean of type [org.springframework.amqp.rabbit.core.RabbitTemplate] is defined: 
    expected single matching bean but found 3: looperTemplate,pingTemplate,orgRequestTemplate
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:751) ~[spring-beans-4.1.1.RELEASE.jar:4.1.1.RELEASE]
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:466) ~[spring-beans-4.1.1.RELEASE.jar:4.1.1.RELEASE]
问题是我确实有RabbitMQ模板,但我有3个,它需要一个限定符来选择单个模板。然而,这段代码在spring boot中,不是我的代码。我希望不必修改spring引导代码,但我不确定应该在代码中做什么来防止这种异常

我可以看到在1.2.0.M2版本中添加了有问题的jmsMessagingTemplate。这种命名也有误导性,因为我的应用程序中没有启用JMS(尽管这是spring boot中特定于RabbitMQ的自动配置文件)

关于如何在不删除模板或修改spring启动代码的情况下配置代码,有什么建议吗?

我创建了这些建议来跟踪命名问题。您应该阅读那里的
rabbitMessagingTemplate

引导中有几个自动配置实例,如果某些类型未使用“默认”名称,则需要使用
@Primary
标记它们。例如,如果不存在JdbcTemplate且存在数据源,则会自动为您创建一个
JdbcTemplate
。如果您有多个数据源,则应将其中一个数据源命名为
或将其中一个标记为
@Primary

在您的情况下,RabbitMQ的消息自动配置要求将一个
RabbitTemplate
命名为
RabbitTemplate
,或者将三个中的一个标记为
@Primary

这很烦人,我们应该做得更好。我为此而创造


如果这对你有效,请告诉我。谢谢

您不需要将其中一个模板标记为
@Primary
?我有一个解决问题的方法,只需将其中一个模板重命名为“jmsMessagingTemplate”。这允许我的代码工作,并且不会更改任何spring引导代码。这仍然是一个问题,我应该如何妥善解决这个问题。我想我还可以添加一个未使用的模板名“jmsMessagingTemplate”,以满足RabbitAutoConfiguration依赖关系,但这似乎也是错误的。当模板仅在xml配置中定义时,如何将其标记为@Primary?我是否可以添加一个xml属性,或者我是否需要将模板创建为java配置来工作“
会有用的。那太好了。我有一个手表的问题,可以利用戴夫赛尔的建议,同时。非常感谢。
@Primary
适用于spring boot 1.2.2版。RELEASE@Primary救命啊!