IllegalStateException on app start when configuring spring.cloud.stream.binders
See original GitHub issueSpringboot version 2.3.9.RELEASE SpringCloud: Hoxton.SR10 Kafka server: 5.2.1
Received the following error when starting the application. The application chokes on creating spring.cloud.stream.binder.
java.lang.IllegalStateException: org.springframework.context.annotation.AnnotationConfigApplicationContext@597050fa has not been refreshed yet
at org.springframework.context.support.AbstractApplicationContext.assertBeanFactoryActive(AbstractApplicationContext.java:1096) ~[spring-context-5.2.13.RELEASE.jar:5.2.13.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.getBeanProvider(AbstractApplicationContext.java:1138) ~[spring-context-5.2.13.RELEASE.jar:5.2.13.RELEASE]
at org.springframework.cloud.context.restart.RestartEndpoint.onApplicationEvent(RestartEndpoint.java:95) ~[spring-cloud-context-2.2.7.RELEASE.jar:2.2.7.RELEASE]
at org.springframework.cloud.context.restart.RestartEndpoint.onApplicationEvent(RestartEndpoint.java:53) ~[spring-cloud-context-2.2.7.RELEASE.jar:2.2.7.RELEASE]
at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172) ~[spring-context-5.2.13.RELEASE.jar:5.2.13.RELEASE]
at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165) ~[spring-context-5.2.13.RELEASE.jar:5.2.13.RELEASE]
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139) ~[spring-context-5.2.13.RELEASE.jar:5.2.13.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:404) ~[spring-context-5.2.13.RELEASE.jar:5.2.13.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:361) ~[spring-context-5.2.13.RELEASE.jar:5.2.13.RELEASE]
at org.springframework.cloud.stream.binder.DefaultBinderFactory$1.onApplicationEvent(DefaultBinderFactory.java:288) ~[spring-cloud-stream-3.0.11.RELEASE.jar:3.0.11.RELEASE]
at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172) ~[spring-context-5.2.13.RELEASE.jar:5.2.13.RELEASE]
at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165) ~[spring-context-5.2.13.RELEASE.jar:5.2.13.RELEASE]
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139) ~[spring-context-5.2.13.RELEASE.jar:5.2.13.RELEASE]
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:127) ~[spring-context-5.2.13.RELEASE.jar:5.2.13.RELEASE]
at org.springframework.boot.context.event.EventPublishingRunListener.contextLoaded(EventPublishingRunListener.java:97) ~[spring-boot-2.3.9.RELEASE.jar:2.3.9.RELEASE]
at org.springframework.boot.SpringApplicationRunListeners.contextLoaded(SpringApplicationRunListeners.java:65) ~[spring-boot-2.3.9.RELEASE.jar:2.3.9.RELEASE]
at org.springframework.boot.SpringApplication.prepareContext(SpringApplication.java:393) ~[spring-boot-2.3.9.RELEASE.jar:2.3.9.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:314) ~[spring-boot-2.3.9.RELEASE.jar:2.3.9.RELEASE]
at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:140) ~[spring-boot-2.3.9.RELEASE.jar:2.3.9.RELEASE]
at org.springframework.cloud.stream.binder.DefaultBinderFactory.getBinderInstance(DefaultBinderFactory.java:320) ~[spring-cloud-stream-3.0.11.RELEASE.jar:3.0.11.RELEASE]
at org.springframework.cloud.stream.binder.DefaultBinderFactory.doGetBinder(DefaultBinderFactory.java:209) ~[spring-cloud-stream-3.0.11.RELEASE.jar:3.0.11.RELEASE]
at org.springframework.cloud.stream.binder.DefaultBinderFactory.getBinder(DefaultBinderFactory.java:140) ~[spring-cloud-stream-3.0.11.RELEASE.jar:3.0.11.RELEASE]
at org.springframework.cloud.stream.binding.BindingService.getBinder(BindingService.java:379) ~[spring-cloud-stream-3.0.11.RELEASE.jar:3.0.11.RELEASE]
at org.springframework.cloud.stream.binding.BindingService.bindProducer(BindingService.java:268) ~[spring-cloud-stream-3.0.11.RELEASE.jar:3.0.11.RELEASE]
at org.springframework.cloud.stream.binding.BindingService.bindProducer(BindingService.java:291) ~[spring-cloud-stream-3.0.11.RELEASE.jar:3.0.11.RELEASE]
at org.springframework.cloud.stream.binding.AbstractBindableProxyFactory.createAndBindOutputs(AbstractBindableProxyFactory.java:136) ~[spring-cloud-stream-3.0.11.RELEASE.jar:3.0.11.RELEASE]
at org.springframework.cloud.stream.binding.OutputBindingLifecycle.doStartWithBindable(OutputBindingLifecycle.java:58) ~[spring-cloud-stream-3.0.11.RELEASE.jar:3.0.11.RELEASE]
at java.base/java.util.LinkedHashMap$LinkedValues.forEach(LinkedHashMap.java:608) ~[na:na]
at org.springframework.cloud.stream.binding.AbstractBindingLifecycle.start(AbstractBindingLifecycle.java:57) ~[spring-cloud-stream-3.0.11.RELEASE.jar:3.0.11.RELEASE]
at org.springframework.cloud.stream.binding.OutputBindingLifecycle.start(OutputBindingLifecycle.java:34) ~[spring-cloud-stream-3.0.11.RELEASE.jar:3.0.11.RELEASE]
at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:182) ~[spring-context-5.2.13.RELEASE.jar:5.2.13.RELEASE]
at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:53) ~[spring-context-5.2.13.RELEASE.jar:5.2.13.RELEASE]
at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:360) ~[spring-context-5.2.13.RELEASE.jar:5.2.13.RELEASE]
at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:158) ~[spring-context-5.2.13.RELEASE.jar:5.2.13.RELEASE]
at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:122) ~[spring-context-5.2.13.RELEASE.jar:5.2.13.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:895) ~[spring-context-5.2.13.RELEASE.jar:5.2.13.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:554) ~[spring-context-5.2.13.RELEASE.jar:5.2.13.RELEASE]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143) ~[spring-boot-2.3.9.RELEASE.jar:2.3.9.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:758) ~[spring-boot-2.3.9.RELEASE.jar:2.3.9.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:750) ~[spring-boot-2.3.9.RELEASE.jar:2.3.9.RELEASE]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:405) ~[spring-boot-2.3.9.RELEASE.jar:2.3.9.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) ~[spring-boot-2.3.9.RELEASE.jar:2.3.9.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1237) ~[spring-boot-2.3.9.RELEASE.jar:2.3.9.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) ~[spring-boot-2.3.9.RELEASE.jar:2.3.9.RELEASE]
Here’s the configuration yml, for demo purpose the two binders both point to the same kafka broker but in prod we have different kafka brokers servers:
spring:
cloud.stream:
defaultBinder: scl
binders:
scl:
type: kafka
environment.spring.cloud.stream:
kafka.binder.brokers: "localhost:9092"
scl1:
type: kafka
environment.spring.cloud.stream:
kafka.binder.brokers: "localhost:9092"
bindings:
outputRequest:
destination: "outputRequestDev"
binder: scl1
kafka.binder:
autoAddPartitions: true
The channel outputRequest is created using spring cloud stream @Output anno:
public interface Source {
@Output("outputRequest")
MessageChannel oaaRequestOutput();
}
Our application uses both spring-cloud-sleuth and spring-cloud-stream. After some digging around the problem seems to stem from spring-cloud-context 2.2.7.RELEASE, which is a dependency brought in from spring-cloud-starter-sleuth. So when we downgrade spring-cloud-sleuth dependencies from 2.2.7.RELEASE (default from Hoxton.SR10) to spring-cloud-sleuth dependencies 2.2.6.RELEASE, then the application is able to start.
It is worth mentioning that even with this work around, when shutting down the application, I am seeing intermittent warning when the kafka binder is @Output binder:
o.s.c.support.DefaultLifecycleProcessor : Failed to stop bean 'outerContext'
org.springframework.beans.factory.BeanCreationNotAllowedException: Error creating bean with name 'org.springframework.integration.config.IdGeneratorConfigurer#0': Singleton bean creation not allowed while singletons of this factory are in destruction (Do not request a bean from a BeanFactory in a destroy method implementation!)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:220) ~[spring-beans-5.2.13.RELEASE.jar:5.2.13.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322) ~[spring-beans-5.2.13.RELEASE.jar:5.2.13.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:207) ~[spring-beans-5.2.13.RELEASE.jar:5.2.13.RELEASE]
at org.springframework.context.event.AbstractApplicationEventMulticaster.retrieveApplicationListeners(AbstractApplicationEventMulticaster.java:247) ~[spring-context-5.2.13.RELEASE.jar:5.2.13.RELEASE]
at org.springframework.context.event.AbstractApplicationEventMulticaster.getApplicationListeners(AbstractApplicationEventMulticaster.java:204) ~[spring-context-5.2.13.RELEASE.jar:5.2.13.RELEASE]
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:134) ~[spring-context-5.2.13.RELEASE.jar:5.2.13.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:404) ~[spring-context-5.2.13.RELEASE.jar:5.2.13.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:361) ~[spring-context-5.2.13.RELEASE.jar:5.2.13.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.stop(AbstractApplicationContext.java:1371) ~[spring-context-5.2.13.RELEASE.jar:5.2.13.RELEASE]
at org.springframework.context.support.DefaultLifecycleProcessor.doStop(DefaultLifecycleProcessor.java:251) ~[spring-context-5.2.13.RELEASE.jar:5.2.13.RELEASE]
at org.springframework.context.support.DefaultLifecycleProcessor.access$300(DefaultLifecycleProcessor.java:53) ~[spring-context-5.2.13.RELEASE.jar:5.2.13.RELEASE]
at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.stop(DefaultLifecycleProcessor.java:377) ~[spring-context-5.2.13.RELEASE.jar:5.2.13.RELEASE]
at org.springframework.context.support.DefaultLifecycleProcessor.stopBeans(DefaultLifecycleProcessor.java:210) ~[spring-context-5.2.13.RELEASE.jar:5.2.13.RELEASE]
at org.springframework.context.support.DefaultLifecycleProcessor.onClose(DefaultLifecycleProcessor.java:128) ~[spring-context-5.2.13.RELEASE.jar:5.2.13.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1022) ~[spring-context-5.2.13.RELEASE.jar:5.2.13.RELEASE]
at org.springframework.context.support.AbstractApplicationContext$1.run(AbstractApplicationContext.java:949) ~[spring-context-5.2.13.RELEASE.jar:5.2.13.RELEASE]
…and when the kafka binder is an @Input binder:
[extShutdownHook] o.s.c.support.DefaultLifecycleProcessor : Failed to stop bean 'inputBindingLifecycle'
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'pie.rosettaPieGroup.errors.recoverer' available
at org.springframework.beans.factory.support.DefaultListableBeanFactory.removeBeanDefinition(DefaultListableBeanFactory.java:1009) ~[spring-beans-5.2.13.RELEASE.jar:5.2.13.RELEASE]
at org.springframework.context.support.GenericApplicationContext.removeBeanDefinition(GenericApplicationContext.java:328) ~[spring-context-5.2.13.RELEASE.jar:5.2.13.RELEASE]
at org.springframework.cloud.stream.binder.AbstractMessageChannelBinder.destroyBean(AbstractMessageChannelBinder.java:828) ~[spring-cloud-stream-3.0.11.RELEASE.jar:3.0.11.RELEASE]
at org.springframework.cloud.stream.binder.AbstractMessageChannelBinder.destroyErrorInfrastructure(AbstractMessageChannelBinder.java:787) ~[spring-cloud-stream-3.0.11.RELEASE.jar:3.0.11.RELEASE]
at org.springframework.cloud.stream.binder.AbstractMessageChannelBinder.access$300(AbstractMessageChannelBinder.java:91) ~[spring-cloud-stream-3.0.11.RELEASE.jar:3.0.11.RELEASE]
at org.springframework.cloud.stream.binder.AbstractMessageChannelBinder$2.afterUnbind(AbstractMessageChannelBinder.java:444) ~[spring-cloud-stream-3.0.11.RELEASE.jar:3.0.11.RELEASE]
at org.springframework.cloud.stream.binder.DefaultBinding.unbind(DefaultBinding.java:176) ~[spring-cloud-stream-3.0.11.RELEASE.jar:3.0.11.RELEASE]
at org.springframework.cloud.stream.binding.BindingService.unbindConsumers(BindingService.java:351) ~[spring-cloud-stream-3.0.11.RELEASE.jar:3.0.11.RELEASE]
at org.springframework.cloud.stream.binding.AbstractBindableProxyFactory.unbindInputs(AbstractBindableProxyFactory.java:156) ~[spring-cloud-stream-3.0.11.RELEASE.jar:3.0.11.RELEASE]
at org.springframework.cloud.stream.binding.InputBindingLifecycle.doStopWithBindable(InputBindingLifecycle.java:66) ~[spring-cloud-stream-3.0.11.RELEASE.jar:3.0.11.RELEASE]
at java.base/java.util.LinkedHashMap$LinkedValues.forEach(LinkedHashMap.java:608) ~[na:na]
at org.springframework.cloud.stream.binding.AbstractBindingLifecycle.stop(AbstractBindingLifecycle.java:68) ~[spring-cloud-stream-3.0.11.RELEASE.jar:3.0.11.RELEASE]
at org.springframework.cloud.stream.binding.InputBindingLifecycle.stop(InputBindingLifecycle.java:34) ~[spring-cloud-stream-3.0.11.RELEASE.jar:3.0.11.RELEASE]
at org.springframework.cloud.stream.binding.AbstractBindingLifecycle.stop(AbstractBindingLifecycle.java:85) ~[spring-cloud-stream-3.0.11.RELEASE.jar:3.0.11.RELEASE]
at org.springframework.cloud.stream.binding.InputBindingLifecycle.stop(InputBindingLifecycle.java:34) ~[spring-cloud-stream-3.0.11.RELEASE.jar:3.0.11.RELEASE]
at org.springframework.context.support.DefaultLifecycleProcessor.doStop(DefaultLifecycleProcessor.java:238) ~[spring-context-5.2.13.RELEASE.jar:5.2.13.RELEASE]
at org.springframework.context.support.DefaultLifecycleProcessor.access$300(DefaultLifecycleProcessor.java:53) ~[spring-context-5.2.13.RELEASE.jar:5.2.13.RELEASE]
at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.stop(DefaultLifecycleProcessor.java:377) ~[spring-context-5.2.13.RELEASE.jar:5.2.13.RELEASE]
at org.springframework.context.support.DefaultLifecycleProcessor.stopBeans(DefaultLifecycleProcessor.java:210) ~[spring-context-5.2.13.RELEASE.jar:5.2.13.RELEASE]
at org.springframework.context.support.DefaultLifecycleProcessor.onClose(DefaultLifecycleProcessor.java:128) ~[spring-context-5.2.13.RELEASE.jar:5.2.13.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1022) ~[spring-context-5.2.13.RELEASE.jar:5.2.13.RELEASE]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.doClose(ServletWebServerApplicationContext.java:170) ~[spring-boot-2.3.9.RELEASE.jar:2.3.9.RELEASE]
at org.springframework.context.support.AbstractApplicationContext$1.run(AbstractApplicationContext.java:949) ~[spring-context-5.2.13.RELEASE.jar:5.2.13.RELEASE]
Issue Analytics
- State:
- Created 3 years ago
- Comments:11 (7 by maintainers)

Top Related StackOverflow Question
@bbdick just an FYI, we have long deprecated annotation-based configuration model for stream, so the StreamListener, Input/Output, EnableBinding are soon to be gone completely. Please migrate to a functional approach as described in documentation
As mentioned the warning occurs only when spring.cloud.streams.binders are defined, which I did in the local profile only. From your log I see that you are running the default profile, which I included for comparison purpose with the local profile. Please try again specifying the local profile:
The subscriber topic on the local profile is “testInputDev”, see this line. In your log you have “testInput” which comes from default profile.
I have refreshed my maven repo, then run the local profile, and I am still seeing warnings on shutdown on both the input and output bindings.
Thanks for your time I appreciate your help.