diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/JmsAnnotationDrivenConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/JmsAnnotationDrivenConfiguration.java index 6354e4d841..9d77cb4d82 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/JmsAnnotationDrivenConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jms/JmsAnnotationDrivenConfiguration.java @@ -22,6 +22,7 @@ import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnJndi; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnSingleCandidate; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.jms.annotation.EnableJms; @@ -73,6 +74,7 @@ class JmsAnnotationDrivenConfiguration { } @Bean + @ConditionalOnSingleCandidate(ConnectionFactory.class) @ConditionalOnMissingBean(name = "jmsListenerContainerFactory") public DefaultJmsListenerContainerFactory jmsListenerContainerFactory( DefaultJmsListenerContainerFactoryConfigurer configurer, diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jms/JmsAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jms/JmsAutoConfigurationTests.java index 2d3f6dfdba..8ef062aff6 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jms/JmsAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jms/JmsAutoConfigurationTests.java @@ -149,6 +149,13 @@ public class JmsAutoConfigurationTests { SimpleJmsListenerContainerFactory.class)); } + @Test + public void jmsListenerContainerFactoryWhenMultipleConnectionFactoryBeansShouldBackOff() { + this.contextRunner.withUserConfiguration(TestConfiguration10.class) + .run((context) -> assertThat(context) + .doesNotHaveBean(JmsListenerContainerFactory.class)); + } + @Test public void testJmsListenerContainerFactoryWithCustomSettings() { this.contextRunner.withUserConfiguration(EnableJmsConfiguration.class) @@ -572,6 +579,21 @@ public class JmsAutoConfigurationTests { } + @Configuration + protected static class TestConfiguration10 { + + @Bean + public ConnectionFactory connectionFactory1() { + return new ActiveMQConnectionFactory(); + } + + @Bean + public ConnectionFactory connectionFactory2() { + return new ActiveMQConnectionFactory(); + } + + } + @Configuration @EnableJms protected static class EnableJmsConfiguration {