I'm getting an error from StreamBridge when trying to send a message to a specific Kafka topic. Funny thing is that I only get this error sometimes. When I trigger the service manually it does not give any errors. I stuck with this error for a while

java.version = 17
org.springframework.boot = 2.6.4
spring-cloud.version = 2021.0.1
spring-cloud-starter-stream-kafka = 3.2.4

Code :

@Slf4j
@Service
@RequiredArgsConstructor
public class UpdateEventAdapter implements UpdateEventPort {

    private final StreamBridge streamBridge;

    @Async
    @Override
    public void instrumentUpdated(InstrumentUpdatedEvent instrumentUpdatedEvent) {
        streamBridge.send(INSTRUMENT_UPDATED_PRODUCER, KafkaMessageBuilder.build(instrumentUpdatedEvent, instrumentUpdatedEvent.getUid()));
    }
}

Trace:

va.util.concurrent.CompletionException: java.lang.IllegalArgumentException: Could not find class [org.springframework.boot.autoconfigure.condition.OnBeanCondition] at java.base/java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:315) ~[na:na] at java.base/java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:320) ~[na:na] at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1770) ~[na:na] at util.TokenAwareRunnable.run(TokenAwareRunnable.java:28) ~[na:na] at java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1395) ~[na:na] at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373) ~[na:na] at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182) ~[na:na] at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655) ~[na:na] at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622) ~[na:na] at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165) ~[na:na] Caused by: java.lang.IllegalArgumentException: Could not find class [org.springframework.boot.autoconfigure.condition.OnBeanCondition] at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:334) ~[spring-core-5.3.16.jar!/:5.3.16] at org.springframework.context.annotation.ConditionEvaluator.getCondition(ConditionEvaluator.java:124) ~[spring-context-5.3.16.jar!/:5.3.16] at org.springframework.context.annotation.ConditionEvaluator.shouldSkip(ConditionEvaluator.java:96) ~[spring-context-5.3.16.jar!/:5.3.16] at org.springframework.context.annotation.ConditionEvaluator.shouldSkip(ConditionEvaluator.java:88) ~[spring-context-5.3.16.jar!/:5.3.16] at org.springframework.context.annotation.ConditionEvaluator.shouldSkip(ConditionEvaluator.java:71) ~[spring-context-5.3.16.jar!/:5.3.16] at org.springframework.context.annotation.AnnotatedBeanDefinitionReader.doRegisterBean(AnnotatedBeanDefinitionReader.java:254) ~[spring-context-5.3.16.jar!/:5.3.16] at org.springframework.context.annotation.AnnotatedBeanDefinitionReader.registerBean(AnnotatedBeanDefinitionReader.java:147) ~[spring-context-5.3.16.jar!/:5.3.16] at org.springframework.context.annotation.AnnotatedBeanDefinitionReader.register(AnnotatedBeanDefinitionReader.java:137) ~[spring-context-5.3.16.jar!/:5.3.16] at org.springframework.context.annotation.AnnotationConfigApplicationContext.register(AnnotationConfigApplicationContext.java:168) ~[spring-context-5.3.16.jar!/:5.3.16] at org.springframework.cloud.stream.binder.DefaultBinderFactory.initializeBinderContextSimple(DefaultBinderFactory.java:410) ~[spring-cloud-stream-3.2.2.jar!/:3.2.2] at org.springframework.cloud.stream.binder.DefaultBinderFactory.getBinderInstance(DefaultBinderFactory.java:265) ~[spring-cloud-stream-3.2.2.jar!/:3.2.2] at org.springframework.cloud.stream.binder.DefaultBinderFactory.doGetBinder(DefaultBinderFactory.java:223) ~[spring-cloud-stream-3.2.2.jar!/:3.2.2] at org.springframework.cloud.stream.binder.DefaultBinderFactory.getBinder(DefaultBinderFactory.java:151) ~[spring-cloud-stream-3.2.2.jar!/:3.2.2] at org.springframework.cloud.stream.binding.BindingService.getBinder(BindingService.java:389) ~[spring-cloud-stream-3.2.2.jar!/:3.2.2] at org.springframework.cloud.stream.binding.BindingService.bindProducer(BindingService.java:273) ~[spring-cloud-stream-3.2.2.jar!/:3.2.2] at org.springframework.cloud.stream.function.StreamBridge.resolveDestination(StreamBridge.java:282) ~[spring-cloud-stream-3.2.2.jar!/:3.2.2] at org.springframework.cloud.stream.function.StreamBridge.send(StreamBridge.java:210) ~[spring-cloud-stream-3.2.2.jar!/:3.2.2] at org.springframework.cloud.stream.function.StreamBridge.send(StreamBridge.java:164) ~[spring-cloud-stream-3.2.2.jar!/:3.2.2] at org.springframework.cloud.stream.function.StreamBridge.send(StreamBridge.java:144) ~[spring-cloud-stream-3.2.2.jar!/:3.2.2] at com.getmidas.instrument.api.adapter.kafka.InstrumentUpdateEventAdapter.instrumentUpdated(InstrumentUpdateEventAdapter.java:24) ~[classes!/:0.0.1-SNAPSHOT] at com.getmidas.instrument.api.domain.service.StockService.sendInstrumentEvent(StockService.java:194) ~[classes!/:0.0.1-SNAPSHOT] at com.getmidas.instrument.api.domain.service.StockService.update(StockService.java:166) ~[classes!/:0.0.1-SNAPSHOT] at com.getmidas.instrument.api.domain.service.sync.instrument.tr.TrInstrumentSyncHelper.updateStock(TrInstrumentSyncHelper.java:92) ~[classes!/:0.0.1-SNAPSHOT] at com.getmidas.instrument.api.domain.service.sync.instrument.tr.TrInstrumentSyncHelper.syncHelper(TrInstrumentSyncHelper.java:36) ~[classes!/:0.0.1-SNAPSHOT] at com.getmidas.instrument.api.domain.service.sync.instrument.tr.TrInstrumentSyncService.lambda$syncCompletable$5(TrInstrumentSyncService.java:86) ~[classes!/:0.0.1-SNAPSHOT] at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1768) ~[na:na] ... 7 common frames omitted Caused by: java.lang.ClassNotFoundException: org.springframework.boot.autoconfigure.condition.OnBeanCondition at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na] at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[na:na] at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) ~[na:na] at java.base/java.lang.Class.forName0(Native Method) ~[na:na] at java.base/java.lang.Class.forName(Class.java:467) ~[na:na] at org.springframework.util.ClassUtils.forName(ClassUtils.java:284) ~[spring-core-5.3.16.jar!/:5.3.16] at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:324) ~[spring-core-5.3.16.jar!/:5.3.16]

Comment From: olegz

Without a way to reproduce it there is no error, especially with CNFE on spring boot class which is at the core of everything. Any chance you can provide a sample that reproduces it?

Comment From: cemthecebi

I will try to reproduce the error, however when looking at the stack-trace, it is obvious that the ForkJoinWorkerThread in a Docker image built using the Spring Boot Build Image plugin seems to cause this error when trying to lazily initialize. The error seems to be strongly related to the Spring Boot Build Image, since using jib instead, does not cause this error.

The same is true for running the Docker image in certain Kubernetes environments, although not all environments seem to be affected.

Same problem happened with spring boot cloud openfeign, maybe it helps someway https://github.com/spring-cloud/spring-cloud-openfeign/issues/475

Comment From: HJK181

I'm facing the same problem when my application is running inside Docker. However, running the same code from the IDE works ...

Comment From: sobychacko

Could you please create a small reproducible app with specific instructions to build and run?

Comment From: HJK181

I've should have been more precise in my explanation, I'm also facing

java.lang.ClassNotFoundException: org.springframework.boot.autoconfigure.condition.OnBeanCondition at

but in the context of spring-cloud-openfeign. But what is similar to the issue here is, that the problem does only appear when executing the application inside a Docker container. The same application running in the IDE works fine. The author of that issue provided a sample

Comment From: olegz

As last user explained this issue only appears with the addition of open feign, hence the transfer of the issue

Comment From: OlgaMaciaszek

Fixed with https://github.com/spring-cloud/spring-cloud-commons/pull/1256.