- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我关注了这个question得到ExhaustedRetryException
后上@Retryable
功能。 @Retryable
函数正在重试。
这是代表 @Retryable
功能:
@Component
public class OrderRequestDelegate {
private static final Logger LOGGER = LoggerFactory.getLogger(OrderRequestDelegate.class);
private final OrderRequestDao orderRequestDao;
private final SqsQueueDao sqsQueueDao;
@Autowired
public OrderRequestDelegate(OrderRequestDao orderRequestDao, SqsQueueDao sqsQueueDao) {
this.orderRequestDao = orderRequestDao;
this.sqsQueueDao = sqsQueueDao;
}
@Retryable(include=NoResultException.class, backoff = @Backoff(delay = 100, maxDelay = 101), maxAttempts = 5)
public OrderRequest processItem(String storeId, String message) {
Long id = 999L;
OrderRequest result = orderRequestDao.findOne(id);
if (result == null) {
LOGGER.info("Tried in retryable");
throw new NoResultException();
}
return result;
}
@Recover
public void recover(NoResultException e, Long id) {
LOGGER.info("recover triggered");
}
@Recover
public void recover(Exception e, Long id) throws Exception {
LOGGER.info("retry failure");
}
}
这是带有函数调用者的类:
@RestController
@RequestMapping("/orderRequests")
@Api(description = "orders API")
public class OrderRequestController {
private static final Logger LOGGER = LoggerFactory.getLogger(OrderRequestController.class);
private final OrderRequestDelegate orderRequestDelegate;
@Autowired
public OrderRequestController(OrderRequestDelegate orderRequestDelegate) {
this.orderRequestDelegate = orderRequestDelegate;
}
//...
@ApiOperation(value="test function")
@RequestMapping(method = RequestMethod.GET)
public String get() {
orderRequestDelegate.processItem("100", "abc");
return String.format("Worked");
}
}
以及包含 @EnableRetry
的 Application 类注释:
@SpringBootApplication
@EnableRetry
public class FulfillmentApplication extends SpringBootServletInitializer {
private static final Logger LOGGER = LoggerFactory.getLogger(FulfillmentApplication.class);
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(FulfillmentApplication.class);
}
public static void main(String[] args) {
LOGGER.debug("Starting Spring application main...");
SpringApplication.run(FulfillmentApplication.class, args);
}
}
这是我运行 @Retryable
时的堆栈跟踪功能:
2017-01-27 12:58:21.918 INFO 93294 --- [nio-8080-exec-1] c.c.f.delegate.OrderRequestDelegate : Tried in retryable
2017-01-27 12:58:22.022 INFO 93294 --- [nio-8080-exec-1] c.c.f.delegate.OrderRequestDelegate : Tried in retryable
2017-01-27 12:58:22.129 INFO 93294 --- [nio-8080-exec-1] c.c.f.delegate.OrderRequestDelegate : Tried in retryable
2017-01-27 12:58:22.231 INFO 93294 --- [nio-8080-exec-1] c.c.f.delegate.OrderRequestDelegate : Tried in retryable
2017-01-27 12:58:22.336 INFO 93294 --- [nio-8080-exec-1] c.c.f.delegate.OrderRequestDelegate : Tried in retryable
2017-01-27 12:58:22.352 ERROR 93294 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.retry.ExhaustedRetryException: Cannot locate recovery method; nested exception is javax.persistence.NoResultException] with root cause
javax.persistence.NoResultException: null
at com.cfa.fulfillmentApi.delegate.OrderRequestDelegate.processItem(OrderRequestDelegate.java:44) ~[classes/:na]
at com.cfa.fulfillmentApi.delegate.OrderRequestDelegate$$FastClassBySpringCGLIB$$f297a63a.invoke(<generated>) ~[classes/:na]
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) ~[spring-core-4.3.5.RELEASE.jar:4.3.5.RELEASE]
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:721) ~[spring-aop-4.3.5.RELEASE.jar:4.3.5.RELEASE]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) ~[spring-aop-4.3.5.RELEASE.jar:4.3.5.RELEASE]
at org.springframework.retry.interceptor.RetryOperationsInterceptor$1.doWithRetry(RetryOperationsInterceptor.java:74) ~[spring-retry-1.1.2.RELEASE.jar:na]
at org.springframework.retry.support.RetryTemplate.doExecute(RetryTemplate.java:263) ~[spring-retry-1.1.2.RELEASE.jar:na]
at org.springframework.retry.support.RetryTemplate.execute(RetryTemplate.java:168) ~[spring-retry-1.1.2.RELEASE.jar:na]
at org.springframework.retry.interceptor.RetryOperationsInterceptor.invoke(RetryOperationsInterceptor.java:98) ~[spring-retry-1.1.2.RELEASE.jar:na]
at org.springframework.retry.annotation.AnnotationAwareRetryOperationsInterceptor.invoke(AnnotationAwareRetryOperationsInterceptor.java:118) ~[spring-retry-1.1.2.RELEASE.jar:na]
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.3.5.RELEASE.jar:4.3.5.RELEASE]
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:656) ~[spring-aop-4.3.5.RELEASE.jar:4.3.5.RELEASE]
at com.cfa.fulfillmentApi.delegate.OrderRequestDelegate$$EnhancerBySpringCGLIB$$44ec8aa9.processItem(<generated>) ~[classes/:na]
at com.cfa.fulfillmentApi.controller.OrderRequestController.get(OrderRequestController.java:45) ~[classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_112]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_112]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_112]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_112]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:220) ~[spring-web-4.3.5.RELEASE.jar:4.3.5.RELEASE]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:134) ~[spring-web-4.3.5.RELEASE.jar:4.3.5.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:116) ~[spring-webmvc-4.3.5.RELEASE.jar:4.3.5.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) ~[spring-webmvc-4.3.5.RELEASE.jar:4.3.5.RELEASE]
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) ~[spring-webmvc-4.3.5.RELEASE.jar:4.3.5.RELEASE]
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) ~[spring-webmvc-4.3.5.RELEASE.jar:4.3.5.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963) ~[spring-webmvc-4.3.5.RELEASE.jar:4.3.5.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897) ~[spring-webmvc-4.3.5.RELEASE.jar:4.3.5.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) ~[spring-webmvc-4.3.5.RELEASE.jar:4.3.5.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) ~[spring-webmvc-4.3.5.RELEASE.jar:4.3.5.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:622) ~[tomcat-embed-core-8.5.6.jar:8.5.6]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) ~[spring-webmvc-4.3.5.RELEASE.jar:4.3.5.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) ~[tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230) ~[tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) ~[tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) ~[tomcat-embed-websocket-8.5.6.jar:8.5.6]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) ~[tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) ~[tomcat-embed-core-8.5.6.jar:8.5.6]
at org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilterInternal(ApplicationContextHeaderFilter.java:55) ~[spring-boot-1.4.3.RELEASE.jar:1.4.3.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.5.RELEASE.jar:4.3.5.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) ~[tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) ~[tomcat-embed-core-8.5.6.jar:8.5.6]
at org.springframework.boot.actuate.trace.WebRequestTraceFilter.doFilterInternal(WebRequestTraceFilter.java:105) ~[spring-boot-actuator-1.4.3.RELEASE.jar:1.4.3.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.5.RELEASE.jar:4.3.5.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) ~[tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) ~[tomcat-embed-core-8.5.6.jar:8.5.6]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) ~[spring-web-4.3.5.RELEASE.jar:4.3.5.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.5.RELEASE.jar:4.3.5.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) ~[tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) ~[tomcat-embed-core-8.5.6.jar:8.5.6]
at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:89) ~[spring-web-4.3.5.RELEASE.jar:4.3.5.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.5.RELEASE.jar:4.3.5.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) ~[tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) ~[tomcat-embed-core-8.5.6.jar:8.5.6]
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) ~[spring-web-4.3.5.RELEASE.jar:4.3.5.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.5.RELEASE.jar:4.3.5.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) ~[tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) ~[tomcat-embed-core-8.5.6.jar:8.5.6]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197) ~[spring-web-4.3.5.RELEASE.jar:4.3.5.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.5.RELEASE.jar:4.3.5.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) ~[tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) ~[tomcat-embed-core-8.5.6.jar:8.5.6]
at org.springframework.boot.actuate.autoconfigure.MetricsFilter.doFilterInternal(MetricsFilter.java:106) ~[spring-boot-actuator-1.4.3.RELEASE.jar:1.4.3.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.3.5.RELEASE.jar:4.3.5.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) ~[tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) ~[tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198) ~[tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:108) [tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) [tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) [tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) [tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) [tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349) [tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:784) [tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:802) [tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1410) [tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-8.5.6.jar:8.5.6]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_112]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_112]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.5.6.jar:8.5.6]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_112]
最佳答案
看来您和我一样错过了基本部分。
用@Recover
注释的方法应该采用相同类型的参数(以及可选的Throwable
或其子类类型参数)。除此之外,返回类型也应该相同。
这是在重试用尽后触发您的恢复方法的样子。
@Component
public static class Foo {
@Retryable(include=NoResultException.class, backoff = `@Backoff(delay = 100, maxDelay = 101), maxAttempts = 5)`
public void out(String foo) {
System.out.println(foo);
if (foo.equals("foo")) {
throw new NoResultException();
}
else {
throw new IllegalStateException();
}
}
@Recover
public void connectionException(NoResultException e, String foo) {
System.out.println("Retry failure");
}
@Recover
public void connectionException(Exception e, String foo) throws Exception {
System.out.println("Retry failure");
throw e;
}
}
关于spring - @Recover方法不会被@Retryable触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41897396/
〇、Go 中的异常处理简介 Golang 没有结构化异常,使用 panic 抛出错误,recover 捕获错误。 panic、recover 参数类型为 interface{},因此可抛出任何类型
我已经在 3 个 mongo 服务器上设置了副本集并导入了 5 GB 数据。现在辅助服务器的状态显示“RECOVERING”。您能否让我知道“RECOVERING”的含义以及如何解决此问题。 状态如下
我所在的团队正在尝试使用证书将 Java J2SE 应用程序连接到安全的企业 Web 服务站点。团队成员之前都没有为此类连接创建证书和编码的经验。 我们准备并提交了 CSR,并从网络服务站点收到了 .
我想运行我的 android 应用程序时遇到问题,这是错误消息: Error generating final archive: java.security.UnrecoverableKeyExcep
我已经在 StackOverflow 上搜索了一段时间,但我只是想确定... 不久前我擦了笔记本电脑,并备份了我的所有文件。我备份了我的 android.jks 文件,它又恢复了原位。当我尝试生成一个
例子: var num int64 num = 1234 str := string(num) 我怎样才能恢复原来的号码? 最佳答案 conversion string(num)生成带有 rune n
我有两个 MySQL 服务器,它们在同一组复制上运行。设置已通过以下步骤完成: 第一台服务器是有大量数据的生产服务器。 我将它设置为只读并转储数据,然后在后备 MySQL 服务器上恢复它 恢复后,我执
我有一个适用于 JavaScript 自动加载器的概念验证,但它目前存在一个重大缺陷:它需要重新执行整个代码,而不是简单地从失败的行重试。 这是原型(prototype): var app
考虑使用 Play Framework 2.3.8 编写的以下 2 个 Controller : Java8 lambdas: public static Promise testLambda() {
我对使用 golang 进行编码还很陌生,并且正在为错误的 url 请求而在 panic/recover 过程中苦苦挣扎。下面是一个查询 URL 列表并输出响应的脚本。偶尔会输入错误的 url 或服务
我正在 Golang 中测试 panic/recover。这个简单的程序按预期工作: package main import "fmt" func printRecover() { r :=
我正在使用一个从 panic 中recover()的库,它使用的代码简化为以下内容: func main() { defer rec() panic("X") } func rec()
在某些情况下,调用 append() 会触发内存不足 panic ,而且 append() 本身似乎不会返回 nil。 我怎样才能避免这种 panic 情况并向我的用户显示“资源暂时不可用”? 最好的
我已经完成了这个项目,当我尝试生成一个签名的 apk 时,我收到了这个错误: Failed to read key *** from store ***: Cannot recover key (**
我写了两个函数来说明我的困惑: import scala.util.Try def TryRecover: Unit = { Try { throw new Exception() }
今天我在玩 Xcode 快照功能,我想知道如果所有代码都丢失了,我是否可以从快照重新创建一个完整的项目。 在我看来,在快照管理器中我只能看到当前项目的快照,而不是所有项目的快照。因此,如果我的项目文件
我在互联网上读到类似的问题,但没有一个答案可以帮助我。我有一个函数,对于每一行数据(数据大约有 2'000'000 行)执行一些操作,然后根据它所做的操作使用不同的参数调用相同的函数。问题是,过了一会
我正在尝试为 CS50 编写一个 C 语言程序,从 .raw 文件中恢复 JPG(一次读取 512 个字节并查看它是否以 JPG 内容开头),但它始终出现段错误。我如何知道问题的根源是什么?多谢你们!
这是一个接受文件名作为输入的程序,应该恢复所有 JPEG 在那个文件上。它显示 512 字节 一次,检查新 jpeg 的开始。 该程序在我运行时编译,尽管它给出了段错误。请帮我解决这个问题。 #inc
我需要知道对应于用户 ip 的国家,它用于与这个 jquery api 一起工作: $.get("http://ipinfo.io", function() {}, "jsonp").always(f
我是一名优秀的程序员,十分优秀!