AspectJ с Spring AOP и Load Time Weaving (LTW) в приложении, работающем в контейнере Docker.JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Гость
 AspectJ с Spring AOP и Load Time Weaving (LTW) в приложении, работающем в контейнере Docker.

Сообщение Гость »

У меня есть Java-приложение Spring Boot, работающее в контейнере Docker.
Я хочу использовать AOP, чтобы использовать пользовательскую аннотацию для перехвата методов и расчета времени их выполнения. Типичный вариант использования.
В частности, мне нужно иметь возможность профилировать ЛЮБОЙ метод, к которому я прикрепляю эту аннотацию. Это означает, что частные методы и методы, вызываемые из одного и того же класса.
Что я узнал
Я уже узнал, что в приложении Spring мне понадобятся некоторые дополнительные конфигурации, чтобы это работало, поскольку АОП Spring будет перехватывать только общедоступные методы в одном компоненте, вызываемые из другого компонента. Мне нужно будет настроить AspectJ AOP Within Spring и, видимо, также нужно будет настроить Load Time Weaving.
Вопрос в целом заключается в том, как мне это сделать. Ниже приведено все, что я знаю и уже сделал. Что работает, что нет, в чем я не уверен и все такое.
Вот что я уже сделал
ПРИМЕЧАНИЕ: я изменил некоторые ссылки и элементы исходного кода, чтобы сохранить общий вид. Поэтому, оценивая, что не так, имейте в виду, что некоторые проблемы компиляции могут быть связаны только с тем, что
  • Я создал аннотацию

    Код: Выделить всё

    @Target({
    ElementType.METHOD
    })
    @Retention(RetentionPolicy.RUNTIME)
    public @interface Profile {
    String value();
    }
    
  • Я создал аспект

    Код: Выделить всё

    @Component
    @Aspect
    public class ProfilerAspect {
    
    @Around("@annotation(Profile)")
    public void profile(ProceedingJoinPoint joinPoint) throws Throwable {
    // Do stuff
    joinPoint.proceed();
    }
    }
    
    Правильна ли эта настройка? Я видел другие структуры аспектов, использующие отдельный метод с @Pointcut("..."), а затем другой метод с @Around("ранее упомянутый метод()"). Я знаю, что моя установка работает с Spring AOP для общедоступных методов, вызываемых из другого bean-компонента.
[*]Я создал aop .xml в META-INF [*]Я включил переплетение времени загрузки через конфигурацию Java

Код: Выделить всё

@SpringBootApplication
@EnableLoadTimeWeaving
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
[*]Я также пробовал включить переплетение времени загрузки через конфигурацию XML в моем файле Controllers.xml, например
  • Я также пробовал указать InstrumentationLoadTimeWeaver

    когда я это делаю, приложение запускается, но аннотация работает только для общедоступных методов, вызываемых из другого компонента
  • Есть ли мне следовало использовать другое пользовательское время загрузки Weaver?



Вот и все. Если не считать всяких тыканий и подтыканий, это, по сути, вся установка, которая у меня есть и которая не работает. В конце дня всегда происходит ошибка при запуске.

Код: Выделить всё

  Caused by: java.lang.IllegalStateException: ClassLoader [org.springframework.boot.loader.LaunchedURLClassLoader] does NOT provide an 'addTransformer(ClassFileTransformer)' method. Specify a custom LoadTimeWeaver or start your Java virtual machine with Spring's agent: -javaagent:spring-instrument-{version}.jar
Я читал во многих местах, что мне нужно запускать приложение, передавая аргумент --javaagent

Код: Выделить всё

-javaagent:path/to/spring-instrument.jar
Мои вопросы
  • Нужно ли мне это делать?

    Есть ли ЛЮБОЙ способ сделать это в коде, чтобы мне не приходилось изменять сценарии сборки (полностью управляемые другой командой)
[*]Я где-то читал, что мне может потребоваться добавить более одного агента, это правда?

[*]Как поместить jar в Docker-контейнер

[*]Как узнать путь из сборки сценарий



Источник: https://stackoverflow.com/questions/781 ... a-docker-c
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как устранить ошибку «Невозможно найти указанный аспект «AspectLogger»» в настройке AspectJ LTW?
    Anonymous » » в форуме JAVA
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • Time.time() или time.perf_counter() — что быстрее?
    Гость » » в форуме Python
    0 Ответы
    130 Просмотры
    Последнее сообщение Гость
  • Невозможно запустить команды Redis с хоста Windows на сервере Redis, работающем в контейнере Docker на моем WSL2.
    Anonymous » » в форуме C#
    0 Ответы
    70 Просмотры
    Последнее сообщение Anonymous
  • Byte Buddy и OSGi Weaving Hook
    Anonymous » » в форуме JAVA
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous
  • Python в контейнере Docker отказался от подключения к Postgres в сетевом контейнере Docker
    Anonymous » » в форуме Python
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»