Describe the bug Setting both org.springframework.cloud:spring-cloud-bus and org.springframework.cloud:spring-cloud-starter-stream-kafka as dependency for a spring boot application and configuring cloud bus and multiple kafka binders with custom environment settings the following exception is thrown during startup:

g.springframework.context.ApplicationContextException: Failed to start bean 'inputBindingLifecycle'; nested exception is java.lang.IllegalStateException: org.springframework.context.annotation.AnnotationConfigApplicationContext@4fd74223 has not been refreshed yet at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:181) ~[spring-context-5.3.4.jar:5.3.4] at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:54) ~[spring-context-5.3.4.jar:5.3.4] at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:356) ~[spring-context-5.3.4.jar:5.3.4] at java.lang.Iterable.forEach(Iterable.java:75) ~[na:1.8.0_211] at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:155) ~[spring-context-5.3.4.jar:5.3.4] at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:123) ~[spring-context-5.3.4.jar:5.3.4] at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:934) ~[spring-context-5.3.4.jar:5.3.4] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:585) ~[spring-context-5.3.4.jar:5.3.4] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:144) ~[spring-boot-2.4.3.jar:2.4.3] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:767) [spring-boot-2.4.3.jar:2.4.3] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) [spring-boot-2.4.3.jar:2.4.3] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:426) [spring-boot-2.4.3.jar:2.4.3] at org.springframework.boot.SpringApplication.run(SpringApplication.java:326) [spring-boot-2.4.3.jar:2.4.3] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1311) [spring-boot-2.4.3.jar:2.4.3] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1300) [spring-boot-2.4.3.jar:2.4.3] at my.projects.apps.NotificationApplication.main(NotificationApplication.java:10) [main/:na] Caused by: java.lang.IllegalStateException: org.springframework.context.annotation.AnnotationConfigApplicationContext@4fd74223 has not been refreshed yet at org.springframework.context.support.AbstractApplicationContext.assertBeanFactoryActive(AbstractApplicationContext.java:1140) ~[spring-context-5.3.4.jar:5.3.4] at org.springframework.context.support.AbstractApplicationContext.getBeanProvider(AbstractApplicationContext.java:1182) ~[spring-context-5.3.4.jar:5.3.4] at org.springframework.cloud.context.restart.RestartEndpoint.onApplicationEvent(RestartEndpoint.java:95) ~[spring-cloud-context-3.0.1.jar:3.0.1] at org.springframework.cloud.context.restart.RestartEndpoint.onApplicationEvent(RestartEndpoint.java:53) ~[spring-cloud-context-3.0.1.jar:3.0.1] at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176) ~[spring-context-5.3.4.jar:5.3.4] at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169) ~[spring-context-5.3.4.jar:5.3.4] at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143) ~[spring-context-5.3.4.jar:5.3.4] at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:420) ~[spring-context-5.3.4.jar:5.3.4] at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:377) ~[spring-context-5.3.4.jar:5.3.4] at org.springframework.cloud.stream.binder.DefaultBinderFactory$1.onApplicationEvent(DefaultBinderFactory.java:294) ~[spring-cloud-stream-3.1.1.jar:3.1.1] at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176) ~[spring-context-5.3.4.jar:5.3.4] at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169) ~[spring-context-5.3.4.jar:5.3.4] at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143) ~[spring-context-5.3.4.jar:5.3.4] at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:131) ~[spring-context-5.3.4.jar:5.3.4] at org.springframework.boot.context.event.EventPublishingRunListener.contextLoaded(EventPublishingRunListener.java:100) ~[spring-boot-2.4.3.jar:2.4.3] at org.springframework.boot.SpringApplicationRunListeners.lambda$contextLoaded$4(SpringApplicationRunListeners.java:71) ~[spring-boot-2.4.3.jar:2.4.3] at java.util.ArrayList.forEach(ArrayList.java:1257) ~[na:1.8.0_211] at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:117) ~[spring-boot-2.4.3.jar:2.4.3] at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:111) ~[spring-boot-2.4.3.jar:2.4.3] at org.springframework.boot.SpringApplicationRunListeners.contextLoaded(SpringApplicationRunListeners.java:71) ~[spring-boot-2.4.3.jar:2.4.3] at org.springframework.boot.SpringApplication.prepareContext(SpringApplication.java:414) [spring-boot-2.4.3.jar:2.4.3] at org.springframework.boot.SpringApplication.run(SpringApplication.java:325) [spring-boot-2.4.3.jar:2.4.3] at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:144) ~[spring-boot-2.4.3.jar:2.4.3] at org.springframework.cloud.stream.binder.DefaultBinderFactory.getBinderInstance(DefaultBinderFactory.java:326) ~[spring-cloud-stream-3.1.1.jar:3.1.1] at org.springframework.cloud.stream.binder.DefaultBinderFactory.doGetBinder(DefaultBinderFactory.java:215) ~[spring-cloud-stream-3.1.1.jar:3.1.1] at org.springframework.cloud.stream.binder.DefaultBinderFactory.getBinder(DefaultBinderFactory.java:143) ~[spring-cloud-stream-3.1.1.jar:3.1.1] at org.springframework.cloud.stream.binding.BindingService.getBinder(BindingService.java:379) ~[spring-cloud-stream-3.1.1.jar:3.1.1] at org.springframework.cloud.stream.binding.BindingService.bindConsumer(BindingService.java:102) ~[spring-cloud-stream-3.1.1.jar:3.1.1] at org.springframework.cloud.stream.binding.AbstractBindableProxyFactory.createAndBindInputs(AbstractBindableProxyFactory.java:112) ~[spring-cloud-stream-3.1.1.jar:3.1.1] at org.springframework.cloud.stream.binding.InputBindingLifecycle.doStartWithBindable(InputBindingLifecycle.java:58) ~[spring-cloud-stream-3.1.1.jar:3.1.1] at java.util.LinkedHashMap$LinkedValues.forEach(LinkedHashMap.java:608) ~[na:1.8.0_211] at org.springframework.cloud.stream.binding.AbstractBindingLifecycle.start(AbstractBindingLifecycle.java:57) ~[spring-cloud-stream-3.1.1.jar:3.1.1] at org.springframework.cloud.stream.binding.InputBindingLifecycle.start(InputBindingLifecycle.java:34) ~[spring-cloud-stream-3.1.1.jar:3.1.1] at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:178) ~[spring-context-5.3.4.jar:5.3.4] ... 15 common frames omitted

Sample

gradle.build:

buildscript {
   dependencies {
        classpath group: 'io.spring.gradle', name: 'dependency-management-plugin', version: '1.0.11.RELEASE'
        classpath group: 'org.springframework.boot', name: 'spring-boot-gradle-plugin', version: '2.4.3'
    }
}

dependencyManagement {
    imports {
        mavenBom "org.springframework.boot:spring-boot-dependencies:2.4.3"
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:2020.0.1"
    }
}

dependencies {
    implementation group: 'org.springframework.boot', name: 'spring-boot-starter-actuator'
    implementation group: 'org.springframework.boot', name: 'spring-boot-starter-mail'
    implementation group: 'org.springframework.boot', name: 'spring-boot-starter-web'

    implementation group: 'org.springframework.cloud', name: 'spring-cloud-starter-config'
    implementation group: 'org.springframework.cloud', name: 'spring-cloud-starter-bus-kafka'
}

application.yaml:

spring:
  cloud:
    discovery:
      enabled: false
    bus:
      enabled: true
      trace:
        enabled: false
      destination: my-cloud-bus-local
      id: my-config-server
      refresh:
        enabled: true
      env:
        enabled: true
    function:
      definition: myEventConsumer
    stream:
      bindings:
        my-cloud-bus:
          destination: my-cloud-bus-local
          binder: kafka-bus-message
        myEventConsumer-in-0:
          destination: event-message-local
          binder: kafka-event-message
      binders:
        kafka-bus-message:
          type: kafka
          environment:
            spring:
              cloud:
                stream:
                  kafka:
                    binder:
                      brokers: localhost
                      configuration:
                        "[security.protocol]": Plaintext
        kafka-event-message:
          type: kafka
          environment:
            spring:
              cloud:
                stream:
                  kafka:
                    binder:
                      brokers: localhost
                      configuration:
                        "[security.protocol]": Plaintext

Comment From: gelluszi

If I drop/comment the environment settings from the Kafka binders the application will start and use the default Kafka environment settings:

binders:
  kafka-bus-message:
    type: kafka
 kafka-event-message:
    type: kafka

Comment From: gelluszi

Checking some earlier spring boot and spring cloud versions I found the above problem is not present if I set the following versions:

springBootVersion = '2.4.0-M3'
springCloudVersion = '2020.0.0-M4'

However, the following new error message is logged (it's not blocking my actual task): 2021-03-05 15:57:44.343 INFO 32392 --- [pool-4-thread-1] i.m.c.i.binder.kafka.KafkaMetrics : Failed to bind meter: kafka.consumer.fetch.manager.records.consumed.total [tag(client-id=consumer-anonymous.7c914275-a40a-4cf6-9568-ee7938448ff6-4), tag(topic=iss-cloud-bus-local), tag(kafka-version=2.6.0), tag(spring.id=my-cloud-bus-local.consumer.consumer-anonymous.7c914275-a40a-4cf6-9568-ee7938448ff6-4)]. However, this could happen and might be restored in the next refresh. Right after the startup, these kinds of logs disappear.

Comment From: gelluszi

The issue has been moved to spring-cloud-stream-binder-kafka project: https://github.com/spring-cloud/spring-cloud-stream-binder-kafka/issues/1049