Después de agregar la anotación @Retryable a mi interfaz de repositorio spring-data-cassandra, ahora la aplicación no se inicia con la siguiente excepción:
LA APLICACIÓN FALLÓ AL INICIAR
The bean 'airingDao' could not be injected as a 'my.dao.AiringDao' because it is a JDK dynamic proxy that implements: org.springframework.data.cassandra.repository.CassandraRepositoryAcción:
Consider injecting the bean as one of its interfaces or forcing the use of CGLib-based proxies by setting proxyTargetClass=true on @EnableAsync and/or @EnableCaching. Se agregó proxyTargetClass=true a @EnableAsync y @EnableCaching , incluso a @EnableRetry(proxyTargetClass = true) @EnableAspectJAutoProxy(proxyTargetClass = true)
Pero todavía no funciona.
Después de eliminar @Retryable , todo funciona bien.
Verificó el código, sin @Retryable , en org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(String, Class<T>, Object[], boolean)
bean.getClass().getInterfaces() (java.lang.Class<T>[]) [interface my.dao.AiringDao, interface org.springframework.data.repository.Repository, interface org.springframework.transaction.interceptor.TransactionalProxy, interface org.springframework.aop.framework.Advised, interface org.springframework.core.DecoratingProxy] Así requiredType.isAssignableFrom(bean.getClass()) es true
Pero después de agregar @Retryable :
bean.getClass().getInterfaces() (java.lang.Class<T>[]) [interface org.springframework.retry.interceptor.Retryable, interface org.springframework.aop.SpringProxy, interface org.springframework.aop.framework.Advised, interface org.springframework.core.DecoratingProxy] Así que ahora requiredType.isAssignableFrom(bean.getClass())) es false y getTypeConverter().convertIfNecessary(bean, requiredType) arroja la excepción.
¿Alguien podría ayudar o proporcionar alguna pista sobre cómo solucionarlo? Gracias por tu ayuda.
No conozco Spring Retry y no lo he comprobado en detalle, pero sospecho que todavía no hay integración entre Spring Data y Spring Retry. Si esto es cierto, tiene dos enfoques disponibles para usted:
Abra un problema en Spring Data o Spring Retry para implementar la integración.
Introduce una capa separada para ti @Retry que luego dejas delegar a tus repositorios de Spring Data.
Por supuesto, esos enfoques no se excluyen mutuamente.
Aquí hay una solución proporcionada. Planteé un problema para esto en Spring-Retry GitHub.