Попробуйте объявить bean-объект InstrumentationLoadTimeWeaver вместо явного использования -javaagent: /path/to/org.springframework.instrument- {version} .jar.Согласно документации
Чтобы использовать ее, вы должны запустить виртуальную машину с агентом Spring, указав следующие параметры JVM:
-javaagent: /path/to/org.springframework.instrument- {version} .jar
Обратите внимание, что для этого требуется изменить скрипт запуска виртуальной машины, что может помешать вам использовать его в средах сервера приложений (в зависимости от вашей операционной политики).Кроме того, агент JDK будет управлять всей виртуальной машиной, что может оказаться дорогостоящим.
Я надеюсь, что проделать путь ниже будет лучше, я думаю.
@Bean
public InstrumentationLoadTimeWeaver loadTimeWeaver() throws Throwable {
InstrumentationLoadTimeWeaver loadTimeWeaver = new InstrumentationLoadTimeWeaver();
return loadTimeWeaver;
}
То же самое можно сделать в xml configuration.
Найдена новая библиотека , которая просто решает проблему динамической настройки Spring InstrumentationLoadTimeWeaver, чтобы включить поддержку аспектов без необходимости запуска JVM с явным агентом java
<dependency>
<groupId>de.invesdwin</groupId>
<artifactId>invesdwin-instrument</artifactId>
<version>1.0.2</version>
</dependency>
Конфигурация весенней загрузки
@SpringBootApplication
/**
* Make @Configurable work via @EnableLoadTimeWeaving.
* If it does not work, alternatively you can try:
* @ImportResource(locations = "classpath:/META-INF/ctx.spring.weaving.xml")
*/
@EnableLoadTimeWeaving
public class MySpringBootApplication {
public static void main(final String[] args) {
DynamicInstrumentationLoader.waitForInitialized(); //dynamically attach java agent to jvm if not already present
DynamicInstrumentationLoader.initLoadTimeWeavingContext(); //weave all classes before they are loaded as beans
SpringApplication.run(MySpringBootApplication.class, args); //start application, load some classes
}
}