如何使用Spring和Tomcat设置加载时编织而不在命令行上使用-javaagent

如何使用Spring和Tomcat设置加载时编织而不在命令行上使用-javaagent,第1张

概述我使用的是Spring 3.2.9,Tomcat 6.0.44我正在尝试配置我的应用程序的Spring检测提供程序(例如spring-instrumentation.jar)进行加载编织,当它部署在Tomcat上时.我有要求不要使用:“-javaagent:/path/path/spring-instrument.jar”在命令行上进行配置.我已经读过,我

我使用的是Spring 3.2.9,Tomcat 6.0.44

我正在尝试配置我的应用程序的Spring检测提供程序(例如spring-instrumentation.jar)进行加载时编织,当它部署在Tomcat上时.

我有要求不要使用:
“-javaagent:/path/path/spring-instrument.jar”在命令行上进行配置.

我已经读过,我可以通过修改< Context>来配置Spring工具.我的应用程序的Tomcat配置的元素(在Tomcat的server.xml或我的web应用程序的context.xml中).添加适当的< Context> server.xml的元素导致我的应用程序被正确配置为与Spring的检测提供程序一起运行.将它添加到context.xml(见下文)不会导致工作设置.

我有一个meta-inf / aop.xml文件,如下所示:

    

我还指定我想通过将其添加到我的Spring上下文配置来使用加载时编织:

 

我将这个jar添加到我的应用程序的类路径中:
d簧仪器tomcat.jar

我做了什么:

启动Tomcat时,如果我使用-javaagent参数在命令行上识别spring-instrument.jar的位置,如下所示:

-javaagent:/path/path2/spring-instrument-3.2.9.RELEASE.jar

一切正常.

接下来,我从命令行中删除了“-javaagent:/path/path2/spring-instrument-3.2.9.RELEASE.jar”.
在Tomcat的server.xml文件(位于$CATALINE_HOME / conf中)中,我添加了一个< Context>元素到< Host>元素,像这样:

使用此配置,一切都正常.但是我要求不修改Tomcat的server.xml,因为我无法控制server.xml(DevOps会这样做,并且不愿修改它).

接下来我删除了< Context> Tomcat的server.xml中的元素.
根据Spring docs,我可以在我的webapp中添加一个/meta-inf/context.xml,然后放入< Context>以前在Tomcat的server.xml中进入context.xml的元素,如下所示:

        

但是,当我重新启动Tomcat时,我在日志中收到一条错误消息:

    SEVERE: Exception sending context initialized event to Listener instance of class org.springframework.web.context.ContextLoaderListener    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.context.weaving.AspectJWeavingEnabler#0': Initialization of bean Failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'loadTimeweaver': Initialization of bean Failed; nested exception is java.lang.IllegalStateException: ClassLoader [org.apache.catalina.loader.WebappClassLoader] does NOT provIDe an 'addtransformer(Classfiletransformer)' method. Specify a custom LoadTimeweaver or start your Java virtual machine with Spring's agent: -javaagent:org.springframework.instrument.jar

在挖掘之后,我读了一些建议我修改< context:load-time-weaver />我的Spring配置中的元素,如下所示:

        

并将包含InstrumentationLoadTimeweaver.class的jar添加到我的类路径中.

但是,当我这样做时,我在日志中收到此错误消息:

        SEVERE: Exception sending context initialized event to Listener instance of class org.springframework.web.context.ContextLoaderListener        java.lang.IllegalStateException: Must start with Java agent to use InstrumentationLoadTimeweaver. See Spring documentation.    etc....

任何人都可以解释如何使用Spring和Tomcat设置加载时编织而不使用命令行上的-javaagent,并且不修改server.xml?最佳答案这是我设法使用的代码,以删除您提到的异常.
基本上,您必须实现LoadTimeWeavingConfigurer并覆盖方法getLoadTimeweaver().

@Configuration@ComponentScan(basePackages = "org.myproject")@EnableAspectJAutoproxy@EnableSpringConfigured@EnableLoadTimeWeaving(aspectjWeaving = EnableLoadTimeWeaving.AspectJWeaving.autoDETECT)public class Config implements LoadTimeWeavingConfigurer {    @OverrIDe    public LoadTimeweaver getLoadTimeweaver() {        return new ReflectiveLoadTimeweaver();    }    @Bean    public InstrumentationLoadTimeweaver loadTimeweaver()  throws Throwable {        InstrumentationLoadTimeweaver loadTimeweaver = new InstrumentationLoadTimeweaver();        return loadTimeweaver;    }}
总结

以上是内存溢出为你收集整理的如何使用Spring和Tomcat设置加载时编织而不在命令行上使用-javaagent全部内容,希望文章能够帮你解决如何使用Spring和Tomcat设置加载时编织而不在命令行上使用-javaagent所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1248454.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)