@Retryable在spring-data存储库界面中不起作用

时间:2017-03-11 00:57:22

标签: java spring cassandra spring-data spring-retry

在我将@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()))falsegetTypeConverter().convertIfNecessary(bean, requiredType)会抛出异常。

有人可以帮忙或提供一些线索如何排除故障吗? 谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

不知道Spring Retry,并且没有详细检查,但我怀疑,Spring Data和Spring Retry之间还没有集成。如果是这样,您可以使用两种方法:

  1. 打开Spring Data或Spring Retry上的问题以实现集成。

  2. 为您@Retry引入一个单独的图层,然后将其委托给您的Spring Data存储库。

  3. 当然,这些方法并不是互相排斥的。

答案 1 :(得分:1)

这里提供了一种解决方法。我在Spring-Retry GitHub上提出了一个问题。

Spring-Retry Github Issue