在我将@Retryable
注释添加到spring-data-cassandra存储库界面后,现在应用程序无法启动以下异常:
申请失败
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.CassandraRepository
动作:
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.
将proxyTargetClass=true
添加到@EnableAsync
和@EnableCaching
,甚至添加到@EnableRetry(proxyTargetClass = true)
@EnableAspectJAutoProxy(proxyTargetClass = true)
但仍然无法发挥作用。
删除@Retryable
后,每件事情都可以。
在@Retryable
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]
所以requiredType.isAssignableFrom(bean.getClass())
是true
但是在添加@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]
所以现在requiredType.isAssignableFrom(bean.getClass()))
是false
而getTypeConverter().convertIfNecessary(bean, requiredType)
会抛出异常。
有人可以帮忙或提供一些线索如何排除故障吗? 谢谢你的帮助。
答案 0 :(得分:2)
不知道Spring Retry,并且没有详细检查,但我怀疑,Spring Data和Spring Retry之间还没有集成。如果是这样,您可以使用两种方法:
打开Spring Data或Spring Retry上的问题以实现集成。
为您@Retry
引入一个单独的图层,然后将其委托给您的Spring Data存储库。
当然,这些方法并不是互相排斥的。
答案 1 :(得分:1)
这里提供了一种解决方法。我在Spring-Retry GitHub上提出了一个问题。