标签: jcabi

JCabi方面@RetryOnFailure如何抛出异常

我想通过使用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);
    }
}
Run Code Online (Sandbox Code Playgroud)

jcabi提供的唯一示例是下面的示例,它不显示如何抛出异常以强制重试调用:

使用@RetryOnFailure注释注释您的方法,如果方法中有异常,它的执行将重复几次:

public class Resource {
  @RetryOnFailure(attempts = 2, delay = 10, verbose = false)
  public String load(URL url) {
    return url.openConnection().getContent();
  }
}
Run Code Online (Sandbox Code Playgroud)

在发生异常时,该方法将重试两次,尝试之间延迟10毫秒.

java aop jcabi

7
推荐指数
2
解决办法
2395
查看次数

使用@Loggable jcabi注释进行日志记录会修剪日志

我正在注释我的函数@Loggable jcabi注释.它记录的语句不完整,它修剪了行,只打印..为截断的数据.我希望打印整行.可以使用此注释完成此操作.

@Loggable(Loggable.DEBUG)
public String load(URL url) {
  return url.openConnection().getContent();
}
Run Code Online (Sandbox Code Playgroud)

生成以下日志

[DEBUG] #load('http://www.google.com'): returned "<html ..." in 23ms
Run Code Online (Sandbox Code Playgroud)

Log4j.properties

# Root logger option
log4j.rootLogger=INFO, file, CONSOLE

# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=swami-plugin.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=1
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n


log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=com.jcabi.log.MulticolorLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[%color{%-5p}] %c: %m%n
Run Code Online (Sandbox Code Playgroud)

java log4j jcabi

5
推荐指数
1
解决办法
3013
查看次数

jcabi.aspects.Cacheable 不缓存方法调用

我正在尝试按照http://www.yegor256.com/2014/08/03/cacheable-java-annotation.html上的指南缓存方法接口中包含的慢速网络调用的结果

我正在使用 netflix feign 客户端进行网络调用并用于com.jcabi.aspetcts.Cacheable缓存此方法的结果。

@Headers("Accept: application/json")
public interface ApiSolutionClient {

  @Cacheable(lifetime = 30, unit = TimeUnit.MINUTES) 
  @RequestLine("GET /v1/solutions?param1={param1}&param2={param2})
  List<Solutions> getSolutions(@Param("param1") Param1 param1, @Param("param2") Param2 param2);
}
Run Code Online (Sandbox Code Playgroud)

如果我在 30 分钟内重复调用此方法,则不会从缓存中获取数据,而是再次重复网络调用(我也在观察服务器日志)。

如何让它缓存结果而不是再次执行方法体?

java caching jcabi netflix-feign

5
推荐指数
0
解决办法
324
查看次数

aspect.jcabi:@Loggable 不会向输出添加日志

我厌倦了添加手动日志来调试我编写的每个方法。

我开始了解jcabi 的@Loggable注释,但没有成功实施,非常感谢您的帮助。

下面是我尝试过的代码。

import com.jcabi.aspects.Loggable;
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class Jcabi {

    @Loggable
    private static String checkJcabi(String stringToPrint) {
        log.info("Print Successfull");
        return stringToPrint;
    }

    public static void main(String[] args) {
        checkJcabi("Hello World!");
    }

}
Run Code Online (Sandbox Code Playgroud)

IDE 控制台打印:

[main] INFO com.amazon.optimus.cpamutil.utils.Jcabi - Print Successfull
Run Code Online (Sandbox Code Playgroud)

这是log.info()我在方法中添加的日志,并且没有@Loggable像这篇文章中提到的这样(下面)的注释日志

[INFO] com.example.Foo #power(2, 10): 1024 in 12?s
[INFO] com.example.Foo #power(3, 3): 27 in 4?s
Run Code Online (Sandbox Code Playgroud)

以下是我使用的依赖包:

JCabiAspects = 1.0;
方面J = 6.0;
Slf4j = 1.7;
Slf4j_Simple = 1.7; …

java debugging logging jcabi

5
推荐指数
1
解决办法
1102
查看次数

java api获取企业github的文件内容

我努力寻找一个简单的代码行,它使用oauth令牌从企业github读取文件内容,但是找不到这样的例子.

我试过https://github.com/jcabi/jcabi-github,但它不支持企业github?(也许我错了)

现在我正在尝试自我:

GitHubClient client = new GitHubClient("enterprise url");

GitHubRequest request = new GitHubRequest();

request.setUri("/readme");

GitHubResponse response = client.get(request);
Run Code Online (Sandbox Code Playgroud)

那又怎样?我只看到了一个getBody,也许我需要用一些json库来解析它?它必须更简单..我期待的东西像:repo.get(url).getContent()

github github-api jcabi

3
推荐指数
1
解决办法
3897
查看次数

加载 Maven 的 settings.xml 以供 Jcabi-Aether 使用

我正在尝试使用 Maven 和 Jcabi-Aether 获取/解决一些工件。我想我已经准备好了大部分代码,但是我很难弄清楚如何加载用户,settings.xml以便我可以将 Maven 存储库加载到remotes变量中以供 Aether 使用:

import com.jcabi.aether.Aether;
import java.io.File;
import java.util.Arrays;
import org.apache.maven.project.MavenProject;
import org.sonatype.aether.artifact.Artifact;
import org.sonatype.aether.repository.RemoteRepository;
import org.sonatype.aether.util.artifact.DefaultArtifact;

public class Main {
  public static void main(String[] args) {
    File local = new File("/tmp/local-repository");
    Collection<RemoteRepository> remotes = Arrays.asList(
      new RemoteRepository(
        "maven-central",
        "default",
        "http://repo1.maven.org/maven2/"
      )
    );
    Collection<Artifact> deps = new Aether(remotes, local).resolve(
      new DefaultArtifact("junit", "junit-dep", "", "jar", "4.10"),
      "runtime"
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

是否可以加载settings.xml和获取存储库信息?

java maven aether jcabi

3
推荐指数
1
解决办法
802
查看次数

如何在使用com.jcabi.aspects的@Cacheable注释时从缓存中刷新特定数据?

我在我的项目中使用缓存机制的@Cacheable注释,com.jcabi.aspects我有一个场景,我需要从缓存中刷新特定数据,而不是刷新整个缓存.这怎么可能?

例如,

import com.jcabi.aspects.Cacheable;
public class Employees {
     @Cacheable(lifetime = 1, unit = TimeUnit.HOURS)
     static int size(Organization org) {
         // calculate their amount in MySQL
     }
     @Cacheable.FlushBefore
     static void add(Employee employee, Organization org) {
         // add a new one to MySQL
     }
}
Run Code Online (Sandbox Code Playgroud)

如果我有一个由两个组织Org1和Org2使用的Employees类,现在如果将新员工添加到Org1,那么只有Org1的数据应该从缓存中刷新,而Org2的数据应该保留在缓存中.

参考com.jcabi.aspects.Cacheable @Cacheable:http://www.yegor256.com/2014/08/03/cacheable-java-annotation.html

java caching jcabi

3
推荐指数
1
解决办法
420
查看次数

标签 统计

jcabi ×7

java ×6

caching ×2

aether ×1

aop ×1

debugging ×1

github ×1

github-api ×1

log4j ×1

logging ×1

maven ×1

netflix-feign ×1