为了账号安全,请及时绑定邮箱和手机立即绑定

HystrixCommandAspect在纯Java应用程序中导致NoSuchMethodError

HystrixCommandAspect在纯Java应用程序中导致NoSuchMethodError

一只甜甜圈 2021-04-07 13:10:06
我正在尝试在我的Java应用程序中使用Hystrix,它是Non spring java应用程序。在POM中使用以下Maven依赖项来启用Hystrix命令:  <dependency>      <groupId>com.netflix.hystrix</groupId>      <artifactId>hystrix-javanica</artifactId>      <version>1.5.8</version>    </dependency>    <dependency>      <groupId>com.netflix.hystrix</groupId>      <artifactId>hystrix-core</artifactId>      <version>1.5.12</version>    </dependency>    <dependency>      <groupId>com.netflix.rxjava</groupId>      <artifactId>rxjava-core</artifactId>      <version>0.20.7</version>    </dependency>使用以下依赖项来启用AspectJ:<dependency>  <groupId>org.aspectj</groupId>  <artifactId>aspectjrt</artifactId>  <version>1.8.7</version></dependency><dependency>  <groupId>org.aspectj</groupId>  <artifactId>aspectjweaver</artifactId>  <version>1.8.7</version></dependency>使用以下配置在META-INF中创建aop.xml:<aspectj>  <aspects>    <aspect name="com.netflix.hystrix.contrib.javanica.aop.aspectj.HystrixCommandAspect" />  </aspects>  <weaver options="-verbose">    <include within="*" />  </weaver></aspectj>我的服务类别中使用过的Hystrix命令:import org.apache.felix.scr.annotations.Component;import org.apache.felix.scr.annotations.Service;@Component@Servicepublic class TestHystrix     @HystrixCommand(commandKey = "testHystrix", threadPoolKey = "testHystrix", commandProperties = {            @HystrixProperty(name = "hystrix.command.testHystrix.execution.isolation.thread.timeoutInMilliseconds", value = "30") }, threadPoolProperties = {                    @HystrixProperty(name = "hystrix.threadpool.testHystrix.maximumSize", value = "3") })public void  testHystrix() {添加了以下JVM参数:-DWeavingMode=compile但是在Junit测试和应用程序运行时,都会导致以下错误:java.lang.NoSuchMethodError: com.netflix.hystrix.contrib.javanica.aop.aspectj.HystrixCommandAspect.aspectOf()Lcom/netflix/hystrix/contrib/javanica/aop/aspectj/HystrixCommandAspect;请帮忙。
查看完整描述

2 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

提出问题之前,您应该先查阅任何想要使用的工具的手册。我只是在这里引用表格:

纵横编织

Javanica支持两种编织方式:编译和运行时。(...)

  • CTW。要使用CTW模式,您需要使用特定的jar版本:hystrix-javanica-ctw-X.Y.Z。该jar包含使用AJC编译器编译的各个方面。如果您尝试将常规hystrix-javanica-X.Y.Z与CTW一起使用,则可以NoSuchMethodError aspectOf()在运行时使用iajc构建。另外,您需要使用java属性启动应用程序-DWeavingMode=compile。(...)

因此,也许您想切换您的库。

顺便说一句,如果您使用编译时编织(CTW),则不需要,aop.xml因为AspectJ仅将其用于加载时编织(LTW)。


查看完整回答
反对 回复 2021-04-21
  • 2 回答
  • 0 关注
  • 231 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信