Spring 启动,@Configurable LoadTimeWeaving,Tomcat 8 - IllegalStateException
Spring Boot, @Configurable LoadTimeWeaving, Tomcat 8 - IllegalStateException
在我的 Spring Boot 1.3.3,Tomcat 8(嵌入式开发,独立生产)应用程序中,我将从 Spring 代理事务模式转移到AspectJ 事务。
我添加了以下应用程序配置:
@EnableAsync
@ComponentScan("com.example")
@EntityScan("com.example")
@EnableJpaRepositories("com.example")
@EnableTransactionManagement(mode=AdviceMode.ASPECTJ)
@EnableLoadTimeWeaving(aspectjWeaving=AspectJWeaving.ENABLED)
@Configuration
public class ApplicationConfiguration implements LoadTimeWeavingConfigurer {
@Override
public LoadTimeWeaver getLoadTimeWeaver() {
return new ReflectiveLoadTimeWeaver();
}
}
但是在嵌入式 Tomcat 8 上的应用程序启动期间(不要在独立 Tomcat 上测试它)我得到以下异常:
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.instrument.classloading.LoadTimeWeaver]: Factory method 'loadTimeWeaver' threw exception; nested exception is java.lang.IllegalStateException: ClassLoader [sun.misc.Launcher$AppClassLoader] does NOT provide an 'addTransformer(ClassFileTransformer)' method.
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588)
... 18 common frames omitted
Caused by: java.lang.IllegalStateException: ClassLoader [sun.misc.Launcher$AppClassLoader] does NOT provide an 'addTransformer(ClassFileTransformer)' method.
我的配置中 wrong/absent 是什么以及如何解决这个问题?
我自己过去也见过这种情况,我相信您需要 运行 您的应用程序与 java 代理一起使用嵌入式 tomcat 启用加载时织入。准备好 aspectjweaver 和 spring-instrument jar 并尝试启动您的应用程序:
java -javaagent:path/to/aspectjweaver-1.8.2.jar -javaagent:path/to/spring-instrument.jar -jar path/to/your/app.jar
在我的 Spring Boot 1.3.3,Tomcat 8(嵌入式开发,独立生产)应用程序中,我将从 Spring 代理事务模式转移到AspectJ 事务。
我添加了以下应用程序配置:
@EnableAsync
@ComponentScan("com.example")
@EntityScan("com.example")
@EnableJpaRepositories("com.example")
@EnableTransactionManagement(mode=AdviceMode.ASPECTJ)
@EnableLoadTimeWeaving(aspectjWeaving=AspectJWeaving.ENABLED)
@Configuration
public class ApplicationConfiguration implements LoadTimeWeavingConfigurer {
@Override
public LoadTimeWeaver getLoadTimeWeaver() {
return new ReflectiveLoadTimeWeaver();
}
}
但是在嵌入式 Tomcat 8 上的应用程序启动期间(不要在独立 Tomcat 上测试它)我得到以下异常:
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.instrument.classloading.LoadTimeWeaver]: Factory method 'loadTimeWeaver' threw exception; nested exception is java.lang.IllegalStateException: ClassLoader [sun.misc.Launcher$AppClassLoader] does NOT provide an 'addTransformer(ClassFileTransformer)' method.
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588)
... 18 common frames omitted
Caused by: java.lang.IllegalStateException: ClassLoader [sun.misc.Launcher$AppClassLoader] does NOT provide an 'addTransformer(ClassFileTransformer)' method.
我的配置中 wrong/absent 是什么以及如何解决这个问题?
我自己过去也见过这种情况,我相信您需要 运行 您的应用程序与 java 代理一起使用嵌入式 tomcat 启用加载时织入。准备好 aspectjweaver 和 spring-instrument jar 并尝试启动您的应用程序:
java -javaagent:path/to/aspectjweaver-1.8.2.jar -javaagent:path/to/spring-instrument.jar -jar path/to/your/app.jar