-
Notifications
You must be signed in to change notification settings - Fork 2.2k
Description
When configuring com.azure.spring:spring-cloud-azure-starter-servicebus with connection-details via the consumer, processor, and/or the producer and NOT via the top-level key, auto-configuration fails.
Exception or Stack Trace
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'serviceBusSenderClient' defined in class path resource [com/azure/spring/cloud/autoconfigure/implementation/servicebus/AzureServiceBusProducerClientConfiguration.class]: Unsatisfied dependency expressed through method 'serviceBusSenderClient' parameter 0: Error creating bean with name 'serviceBusSenderClientBuilder' defined in class path resource [com/azure/spring/cloud/autoconfigure/implementation/servicebus/AzureServiceBusProducerClientConfiguration.class]: Unsatisfied dependency expressed through method 'serviceBusSenderClientBuilder' parameter 0: Error creating bean with name 'serviceBusSenderClientBuilderFactory' defined in class path resource [com/azure/spring/cloud/autoconfigure/implementation/servicebus/AzureServiceBusProducerClientConfiguration.class]: Unsatisfied dependency expressed through method 'serviceBusSenderClientBuilderFactory' parameter 0: No qualifying bean of type 'com.azure.spring.cloud.autoconfigure.implementation.servicebus.properties.AzureServiceBusProperties' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:804)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:546)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1362)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1194)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:565)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:525)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:333)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:371)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:331)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:201)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveBean(DefaultListableBeanFactory.java:1225)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1704)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1651)
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:912)
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791)
... 108 common frames omitted
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'serviceBusSenderClientBuilder' defined in class path resource [com/azure/spring/cloud/autoconfigure/implementation/servicebus/AzureServiceBusProducerClientConfiguration.class]: Unsatisfied dependency expressed through method 'serviceBusSenderClientBuilder' parameter 0: Error creating bean with name 'serviceBusSenderClientBuilderFactory' defined in class path resource [com/azure/spring/cloud/autoconfigure/implementation/servicebus/AzureServiceBusProducerClientConfiguration.class]: Unsatisfied dependency expressed through method 'serviceBusSenderClientBuilderFactory' parameter 0: No qualifying bean of type 'com.azure.spring.cloud.autoconfigure.implementation.servicebus.properties.AzureServiceBusProperties' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:804)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:546)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1362)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1194)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:565)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:525)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:333)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:371)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:331)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:201)
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:229)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1762)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1651)
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:912)
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791)
... 122 common frames omitted
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'serviceBusSenderClientBuilderFactory' defined in class path resource [com/azure/spring/cloud/autoconfigure/implementation/servicebus/AzureServiceBusProducerClientConfiguration.class]: Unsatisfied dependency expressed through method 'serviceBusSenderClientBuilderFactory' parameter 0: No qualifying bean of type 'com.azure.spring.cloud.autoconfigure.implementation.servicebus.properties.AzureServiceBusProperties' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:804)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:546)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1362)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1194)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:565)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:525)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:333)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:371)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:331)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:201)
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:229)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1762)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1651)
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:912)
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791)
... 136 common frames omitted
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.azure.spring.cloud.autoconfigure.implementation.servicebus.properties.AzureServiceBusProperties' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:2297)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1725)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1651)
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:912)
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791)
To Reproduce
Steps to reproduce the behavior:
spring:
cloud:
azure:
servicebus:
processor:
connection-string: Endpoint=dummy;SharedAccessKeyName=dummy;SharedAccessKey=dummy
entity-name: some-queue
entity-type: queue
producer:
connection-string: Endpoint=dummy;SharedAccessKeyName=dummy;SharedAccessKey=dummy
entity-name: some-other-queue
entity-type: queueRCA
In the previous versions, com.azure.spring.cloud.autoconfigure.implementation.servicebus.AzureServiceBusAutoConfiguration defined the following bean if spring.cloud.azure.servicebus.enabled is true or missing completely.
@Bean
@ConfigurationProperties(AzureServiceBusProperties.PREFIX)
AzureServiceBusProperties azureServiceBusProperties() {
return loadProperties(getAzureGlobalProperties(), new AzureServiceBusProperties());
}In the new versions (5.25.0 and 7.1.0), AzureServiceBusAutoConfiguration imports AzureServiceBusPropertiesConfiguration which in turn imports the newly introduced com.azure.spring.cloud.autoconfigure.implementation.servicebus.properties.ConfigurationWithoutConnectionDetailsBean that defines this bean:
@Bean
@ConditionalOnMissingBean
@ConfigurationProperties(AzureServiceBusProperties.PREFIX)
AzureServiceBusProperties azureServiceBusProperties() {
return AzureGlobalPropertiesUtils.loadProperties(azureGlobalProperties, new AzureServiceBusProperties());
}but ConfigurationWithoutConnectionDetailsBean is considered only if:
@ConditionalOnAnyProperty(prefix = "spring.cloud.azure.servicebus", name = {"connection-string", "namespace"})in the use case above, only spring.cloud.azure.servicebus.processor.connection-string and spring.cloud.azure.servicebus.producer.connection-string are set, so AzureServiceBusProperties is not created.
Workaround
Replace the consumer or processor connection-string (i.e. spring.cloud.azure.servicebus.processor.connection-string) with the top level one (i.e. spring.cloud.azure.servicebus.connection-string):
spring:
cloud:
azure:
servicebus:
connection-string: Endpoint=dummy;SharedAccessKeyName=dummy;SharedAccessKey=dummy
processor:
entity-name: some-queue
entity-type: queue
producer:
connection-string: Endpoint=dummy;SharedAccessKeyName=dummy;SharedAccessKey=dummy
entity-name: some-other-queue
entity-type: queueSetup (please complete the following information):
- OS: MacOS
- IDE: Intellij 2025.3.4
- Library/Libraries: com.azure.spring:spring-cloud-azure-starter-servicebus versions 7.1.0 & 5.25.0
- Java version: 25
- Frameworks: Spring Boot 4.0.4 & 3.5.12
Information Checklist
Kindly make sure that you have added all the following information above and checkoff the required fields otherwise we will treat the issuer as an incomplete report
- Bug Description Added
- Repro Steps Added
- Setup information Added