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

必须启动 InstrumentationLoadTimeWeaver / openjdk 11

必须启动 InstrumentationLoadTimeWeaver / openjdk 11

跃然一笑 2022-06-30 17:51:58
我们有一个生产 Java 1.6 / Tomcat 7 / Spring 4 应用程序。我们正在将其移至 Openjdk 11。这意味着 Spring 5,我认为它可能还包括 Tomcat 9,因为我们正在更新其他所有内容。问题是不言自明的声音:错误 org.springframework.web.context.ContextLoader - 上下文初始化失败 org.springframework.beans.factory.UnsatisfiedDependencyException:创建名称为“rootContextConfig”的 bean 时出错:通过字段“entityManagerFactory”表示不满足的依赖关系;嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建 com.xxxxx.config.RootContextConfig 中定义的名称为“entityManagerFactory”的 bean 时出错:调用 init 方法失败;嵌套异常是 java.lang.IllegalStateException:必须从 Java 代理开始才能使用 InstrumentationLoadTimeWeaver。请参阅 Spring 文档。一切都很好。唯一的问题是我们已经有了 Spring Insturment Java 代理-javaagent:${CATALINA_HOME}/lib/spring-instrument-5.1.5.RELEASE.jar就像我上面说的,这是我们只是更新版本的所有工作代码。我确信 LTW 正在加载,因为我们可以看到 InstrumentationLoadTimeWeaver 类产生的错误。@Overridepublic void addTransformer(ClassFileTransformer transformer) {    Assert.notNull(transformer, "Transformer must not be null");    FilteringClassFileTransformer actualTransformer =            new FilteringClassFileTransformer(transformer, this.classLoader);    synchronized (this.transformers) {        Assert.state(this.instrumentation != null,                "Must start with Java agent to use InstrumentationLoadTimeWeaver. See Spring documentation.");        this.instrumentation.addTransformer(actualTransformer);        this.transformers.add(actualTransformer);    }}我只是不知道如何使用空检测来实例化它。显然我错过了一些东西。可能是一些小而愚蠢的事情。但现在我没有想法。
查看完整描述

1 回答

?
撒科打诨

TA贡献1934条经验 获得超2个赞

似乎问题出在类加载上

  1. 添加 '-verbose:class' 选项以查看是否InstrumentationLoadTimeWeaver已加载

  2. 尝试将此选项添加到您的Tomcat上下文配置中 <Context> ... <Loader delegate="true"/> ... </Context>

Tomcat 7.0.27 中的一些更改可能会触发此问题

使 Catalina.getParentClassLoader 的实现与代码库中的类似方法保持一致,如果没有设置父类加载器,则让它返回系统类加载器。(市场)


查看完整回答
反对 回复 2022-06-30
  • 1 回答
  • 0 关注
  • 179 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号