如何解决如何从Spring AOP声明性重试方法引发异常?
我正在使用Spring Retry在我的方法中实现一些重试处理。
我在应用程序中有一个数据访问层(DAL),在我的应用程序中有一个服务层。
“我的服务”层调用DAL进行远程连接以检索信息。如果DAL失败,它将重试。但是,如果重试次数失败,我想抛出一个异常。
在我当前的项目中,我与此非常相似:
@Configuration
@EnableRetry
public class Application {
@Bean
public Service service() {
return new Service();
}
}
@Service
class Service {
@Autowired
DataAccessLayer dal;
public void doSomethingWithFoo() {
Foo foo = dal.getFoo()
// do something with Foo
}
}
@Service
class DataAccessLayer {
@Retryable(RemoteAccessException.class)
public Foo getFoo() {
// call remote HTTP service to get Foo
}
@Recover
public Foo recover(RemoteAccessException e) {
// log the error?
// how to rethrow such that DataAccessLayer.getFoo() shows it throws an exception as well?
}
}
我的应用程序有一个服务,该服务调用DataAccessLayer getFoo。如果getFoo
失败多次,DAL将处理重试。如果那之后失败了,我希望我的服务层对此有所帮助。但是我不确定如何让人们知道这一点。我使用的是intelliJ,当我尝试在throw e;
方法中进行@Recover recover
时,我没有收到DataAccessLayer.getFoo
引发任何异常的警告。我不确定是否会。但是我希望IDE警告我,当重试失败时,将引发新异常,以使Service层知道期望它。否则,如果它调用dal.getFoo
,则它不知道要处理任何错误。通常如何处理?我是否应该不使用AOP声明式样式而去祈使呢?
解决方法
您可以更改getFoo()
(和recover()
)以添加throws <some checked exception>
并将RemoteAccessException
包裹在其中(在recover()
中)。
这将迫使服务层捕获该异常。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。