我們有一個(gè)生產(chǎn) Java 1.6 / Tomcat 7 / Spring 4 應(yīng)用程序。我們正在將其移至 Openjdk 11。這意味著 Spring 5,我認(rèn)為它可能還包括 Tomcat 9,因?yàn)槲覀冋诟缕渌袃?nèi)容。問(wèn)題是不言自明的聲音:錯(cuò)誤 org.springframework.web.context.ContextLoader - 上下文初始化失敗 org.springframework.beans.factory.UnsatisfiedDependencyException:創(chuàng)建名稱(chēng)為“rootContextConfig”的 bean 時(shí)出錯(cuò):通過(guò)字段“entityManagerFactory”表示不滿(mǎn)足的依賴(lài)關(guān)系;嵌套異常是 org.springframework.beans.factory.BeanCreationException:創(chuàng)建 com.xxxxx.config.RootContextConfig 中定義的名稱(chēng)為“entityManagerFactory”的 bean 時(shí)出錯(cuò):調(diào)用 init 方法失??;嵌套異常是 java.lang.IllegalStateException:必須從 Java 代理開(kāi)始才能使用 InstrumentationLoadTimeWeaver。請(qǐng)參閱 Spring 文檔。一切都很好。唯一的問(wèn)題是我們已經(jīng)有了 Spring Insturment Java 代理-javaagent:${CATALINA_HOME}/lib/spring-instrument-5.1.5.RELEASE.jar就像我上面說(shuō)的,這是我們只是更新版本的所有工作代碼。我確信 LTW 正在加載,因?yàn)槲覀兛梢钥吹?InstrumentationLoadTimeWeaver 類(lèi)產(chǎn)生的錯(cuò)誤。@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); }}我只是不知道如何使用空檢測(cè)來(lái)實(shí)例化它。顯然我錯(cuò)過(guò)了一些東西??赡苁且恍┬《薮赖氖虑?。但現(xiàn)在我沒(méi)有想法。
1 回答

撒科打諢
TA貢獻(xiàn)1934條經(jīng)驗(yàn) 獲得超2個(gè)贊
似乎問(wèn)題出在類(lèi)加載上
添加 '-verbose:class' 選項(xiàng)以查看是否
InstrumentationLoadTimeWeaver
已加載嘗試將此選項(xiàng)添加到您的Tomcat上下文配置中
<Context> ... <Loader delegate="true"/> ... </Context>
Tomcat 7.0.27 中的一些更改可能會(huì)觸發(fā)此問(wèn)題
使 Catalina.getParentClassLoader 的實(shí)現(xiàn)與代碼庫(kù)中的類(lèi)似方法保持一致,如果沒(méi)有設(shè)置父類(lèi)加載器,則讓它返回系統(tǒng)類(lèi)加載器。(市場(chǎng))
添加回答
舉報(bào)
0/150
提交
取消