redisson
redisson copied to clipboard
Cannot use Spring autowire injection with Spring devtools
Redis version
5.0.13
Redisson version
3.40.2
Redisson configuration
WorkerOptions
.defaults()
.workers(4)
.beanFactory(beanFactory)
// Defines task timeout since task execution start moment
.taskTimeout(60, TimeUnit.SECONDS)
.addListener(
object : TaskFailureListener {
override fun onFailed(
taskId: String,
exception: Throwable,
) {
Sentry.captureException(exception)
logger.error("Task $taskId failed", exception)
}
}
)
What is the Expected behavior?
Task runs successfully
What is the Actual behavior?
o.s.b.f.NoSuchBeanDefinitionException: No qualifying bean of type 'com.claravine.aimia.integration.inbound.orchestration.IntegrationJobListener' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} at o.s.b.f.s.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:2139) at o.s.b.f.s.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1589) at o.s.b.f.s.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1514) at o.s.b.f.a.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:785) ... 16 common frames omitted Wrapped by: <#5bd27f55> o.s.b.f.UnsatisfiedDependencyException: Error creating bean with name 'null': Unsatisfied dependency expressed through field 'integrationJobListener': No qualifying bean of type 'com.claravine.aimia.integration.inbound.orchestration.IntegrationJobListener' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} at o.s.b.f.a.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:788) at o.s.b.f.a.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:768) at o.s.b.f.a.InjectionMetadata.inject(InjectionMetadata.java:146) at o.s.b.f.a.AutowiredAnnotationBeanPostProcessor.processInjection(AutowiredAnnotationBeanPostProcessor.java:532) at o.r.e.SpringTasksInjector.inject(SpringTasksInjector.java:38) at o.r.e.TasksRunnerService.decode(TasksRunnerService.java:332) ... 11 common frames omitted Wrapped by: <#4c799c21> j.l.IllegalStateException: Unable to initialize codec with ClassLoader parameter at o.r.e.TasksRunnerService.decode(TasksRunnerService.java:337) at o.r.e.TasksRunnerService.executeCallable(TasksRunnerService.java:205) ... 10 common frames omitted Wrapped by: <#26055c7f> j.l.IllegalArgumentException: java.lang.IllegalStateException: Unable to initialize codec with ClassLoader parameter at o.r.e.TasksRunnerService.executeCallable(TasksRunnerService.java:221) at j.i.r.DirectMethodHandleAccessor.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at o.r.e.RedissonExecutorRemoteService.invokeMethod(RedissonExecutorRemoteService.java:106) at o.r.RedissonRemoteService.lambda$executeMethod$14(RedissonRemoteService.java:453) at j.u.c.Executors$RunnableAdapter.call(Unknown Source)
Additional information
This only happens when Spring Devtools reload is active
Unfortunately it's not checked with Spring Devtools reload
Does that mean you don't plan to support this use case? I understand if that's the case, just want to be clear.
Unable to initialize codec with ClassLoader parameter
Which codec do you use?
I just use the default one, maybe another will work?
Tried a few other codecs, but ultimately just got different classloader errors around serialization.