Skip to content

[BUG] ServiceBus AutoConfiguration is broken #48510

@yanivnahoum

Description

@yanivnahoum

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: queue

RCA
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: queue

Setup (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

Metadata

Metadata

Assignees

No one assigned

    Labels

    customer-reportedIssues that are reported by GitHub users external to the Azure organization.needs-triageWorkflow: This is a new issue that needs to be triaged to the appropriate team.questionThe issue doesn't require a change to the product in order to be resolved. Most issues start as that

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions