7

我想使用 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 毫秒的延迟。

4

4 回答 4

7

对于那些仍在寻找答案的人,叶戈尔的答案现在已经过时了。他发布的 jcabi-maven-plugin 版本0.8对我不起作用。

经过几个小时的挖掘,我发现表明我们应该使用最后一个版本截至此时,2014 年 7 月0.9.2.

这就是我为什么在运行mvn jcabi:ajc时从链接中收到错误并且编织不起作用的答案。

于 2015-03-05T12:02:29.707 回答
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>
于 2013-09-23T20:35:20.197 回答
0

好吧,不幸的是,我发现这些 jcabi 方面需要一个自定义 pom.xml 任务来编译项目中所需的方面。

所以将 jcabi jar 放到 NetBeans 中并编译上面的代码是不够的。

于 2013-09-19T14:42:31.880 回答
0

替代方案,您可以将这些配置添加到 pom.xml 以在编译时进行编织。

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>aspectj-maven-plugin</artifactId>
  <version>1.4</version>
  <configuration>
      <complianceLevel>1.6</complianceLevel>
      <encoding>${project.build.sourceEncoding}</encoding>
      <showWeaveInfo>true</showWeaveInfo>
      <source>1.7</source>
      <target>1.7</target>
      <verbose>true</verbose>
      <aspectLibraries>
          <aspectLibrary>
              <groupId>com.jcabi</groupId>
              <artifactId>jcabi-aspects</artifactId>
          </aspectLibrary>
      </aspectLibraries>
  </configuration>
  <executions>
      <execution>
          <id>weave-classes</id>
          <phase>process-classes</phase>
          <goals>
              <goal>compile</goal>
          </goals>
      </execution>
  </executions>
</plugin>

参考:http ://aspects.jcabi.com/example-aspectj.html

于 2017-08-03T05:47:49.017 回答