首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用@Retryable和@Recover的方法不会调用带有@SpringBootTest的@Recover方法

使用@Retryable和@Recover的方法不会调用带有@SpringBootTest的@Recover方法
EN

Stack Overflow用户
提问于 2018-06-09 01:39:49
回答 1查看 914关注 0票数 1

我正在查看使用@Retryable方法的SpringBoot应用程序中的一些代码,以及其他标记为@Recover的方法。当我们运行整个应用程序并进行我们知道会失败的远程调用时,它确实正确地调用了@Recover方法。

但是,当我们使用@SpringBootTest以类似的条件运行测试时,它永远不会调用@Recover方法。我们有很多调试输出。我确实注意到我们正在运行的服务器(而不是测试用例)中有一种情况,我们看到了类似以下的情况:

代码语言:javascript
复制
Exception ExhaustedRetryException: Cannot locate recovery method;

我在测试用例的调试输出中寻找它,但我没有找到。

测试类具有以下注释:

代码语言:javascript
复制
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
@ContextConfiguration(classes = { Application.class })

我们的Application类有以下注释:

代码语言:javascript
复制
@SpringBootApplication
@PropertySource("classpath:application.properties")
@ComponentScan(basePackages = "com")
@EnableAsync
@EnableRetry
@EnableCaching
@EnableAutoConfiguration(exclude = { DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class,
        HazelcastAutoConfiguration.class, CacheAutoConfiguration.class, CassandraAutoConfiguration.class,
        CassandraDataAutoConfiguration.class, CassandraRepositoriesAutoConfiguration.class })

在Spring基础设施中有没有什么特别的方法,我可以一步一步看清楚为什么它找不到,或者甚至找不到recover方法?

更新

所以我意识到,当我在debug中执行测试时,我在堆栈跟踪中看不到stacktrace。这难道不是控制从Retryable方法到Recover方法的流程的原因吗?这似乎指向了我在测试类中遗漏的一些设置,或者可能表明这根本不能在测试类中完成(我希望这不是真的)。

更新

好吧,我想办法解决了这个问题。发生这种情况是因为我忽略了从Spring注入bean,我只是手动创建了一个。这意味着它没有连接到使用RetryTemplate,所以它根本不会尝试寻找@Recover方法。一旦我在test类的实例变量中添加了"@Autowired“,它就解决了这个问题(并遇到了下一个问题,但我理解这个问题)。

EN

回答 1

Stack Overflow用户

发布于 2018-06-09 04:16:34

该异常来自RecoverAnnotationRecoveryHandler,因此重试看起来是可操作的,但由于某些原因,它找不到恢复方法。

代码语言:javascript
复制
Method method = findClosestMatch(cause.getClass());
if (method == null) {
    throw new ExhaustedRetryException("Cannot locate recovery method", cause);
}

因此,它正在寻找一个与异常匹配的方法。

findClosestMatch只是简单地扫描所发现的方法,寻找具有匹配参数的方法。

我建议您使用调试器,并在其中放置一个断点,以找出它找不到匹配的原因。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50765883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档