redisson icon indicating copy to clipboard operation
redisson copied to clipboard

Cannot use Spring autowire injection with Spring devtools

Open jasonab opened this issue 11 months ago • 5 comments
trafficstars

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

jasonab avatar Dec 20 '24 01:12 jasonab

Unfortunately it's not checked with Spring Devtools reload

mrniko avatar Dec 20 '24 14:12 mrniko

Does that mean you don't plan to support this use case? I understand if that's the case, just want to be clear.

jasonab avatar Dec 20 '24 15:12 jasonab

Unable to initialize codec with ClassLoader parameter

Which codec do you use?

mrniko avatar Dec 20 '24 16:12 mrniko

I just use the default one, maybe another will work?

jasonab avatar Dec 20 '24 17:12 jasonab

Tried a few other codecs, but ultimately just got different classloader errors around serialization.

jasonab avatar Dec 20 '24 19:12 jasonab