我想通过使用JCabi手动调用方法重试。面向方面的编程应该让这很容易,但我无法弄明白。
import com.jcabi.aspects.RetryOnFailure;
public class Example
{
public int j;
@RetryOnFailure(attempts = 4, delay = 100, verbose = true)
public void retryFun() throws Exception
{
j++;
if(j<3)
throw new Exception();
else
return;
}
public static void main(String[] args) throws Exception
{
Example example = new Example();
System.out.println(example.j);
example.retryFun();
System.out.println(example.j);
}
}
jcabi提供的唯一示例是下面的一个示例,它没有显示如何抛出异常以强制重试调用:
使用@RetryOnFailure注释注释您的方法,如果是 方法中的异常将重复执行几次:
public class Resource { @RetryOnFailure(attempts = 2, delay = 10, verbose = false) public String load(URL url) { return url.openConnection().getContent(); } }
在发生异常时,该方法将重试两次,持续10毫秒 尝试之间的延迟。
答案 0 :(得分:7)
对于那些仍在寻找答案的人来说,叶戈尔的答案现在已经过时了。他发布的jcabi-maven-plugin版本0.8
并不适合我。
经过几个小时的挖掘后,我发现this表示我们应该使用最新版本截至2014年7月,为0.9.2
。
这是我回答为什么在运行 mvn jcabi:ajc 时我从链接中收到错误以及编织无效的原因。
答案 1 :(得分:2)
实际上,仅仅使用jcabi注释是不够的。您应该“编织”您的源代码或二进制文件。我建议编织二进制文件,如下所述:http://aspects.jcabi.com/example-weaving.html。将此插件添加到pom.xml
,您就完成了:
<plugin>
<groupId>com.jcabi</groupId>
<artifactId>jcabi-maven-plugin</artifactId>
<version>0.8</version>
<executions>
<execution>
<goals>
<goal>ajc</goal>
</goals>
</execution>
</executions>
</plugin>
答案 2 :(得分:0)
不幸的是,我发现这些jcabi方面需要一个自定义的pom.xml任务来编译项目中所需的方面。
因此,将jcabi jar放入NetBeans并编译上述代码是不够的。
答案 3 :(得分:0)
替代方案,您可以将这些配置添加到pom.xml以在编译时进行编织。
raise HTTP_EXCEPTIONS.get(status_code, TransportError)(status_code, error_message, additional_info)
RequestError: TransportError(400, {u'line': 1, u'root_cause': [{u'reason': u'no [query] registered for [filtered]', u'type': u'parsing_exception', u'line': 1, u'col': 24}], u'type': u'parsing_exception', u'reason': u'no [query] registered for [filtered]', u'col': 24})