Как ввести файл перехватчика Jar в пружину? - PullRequest
0 голосов
/ 22 января 2020

Я бы хотел перехватить RestTemplate, добавив перехватчик в Spring. Однако я хотел бы реализовать это как отдельный файл JAR, и когда я внедряю этот jar в любой весенний проект, он должен работать.

Когда я реализую перехват непосредственно в проекте, он работает. Однако, если я создаю файл jar из него и добавляю проект, он не работает.

Любая помощь будет оценена.

  public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
    ClientHttpResponse response = execution.execute(request, body);
    return response;
  }

  @Bean
  public RestTemplate restTemplate() {
    List<ClientHttpRequestInterceptor> clientHttpRequestInterceptors = new ArrayList();
    clientHttpRequestInterceptors.add(this.loggingInterceptor);
    this.RestTemplate.setInterceptors(clientHttpRequestInterceptors);
    return this.RestTemplate;
  }

1 Ответ

1 голос
/ 22 января 2020

Во время выполнения Spring boot на самом деле не волнует, исходит ли определение компонента из Jar или определено «непосредственно в проекте» (я предполагаю, что вы имеете в виду в артефакте, который содержит класс загрузочного приложения Spring с методом «main».

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

Таким образом, вы можете поместить конфигурацию в пакет, который будет подпакетом приложения весенней загрузки. Например:

package com.foo.bar;

@SpringBootApplication
public class MyApplication {
   public void main();
}

Затем вы можете поместить конфигурацию шаблона отдыха в com.foo.bar.abc но не в com.foo.xyz

Если вы хотите использовать другую упаковку, вы должны использовать пружинные фабрики в качестве более гибкой альтернативы. Подробнее о пружинных фабриках Здесь

Всего:

  1. Создать META-INF/spring.factories файл в ресурсах вашего банка

  2. В т В этом файле создайте отображение org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.abc.MyConfig

  3. Создайте com.ab c .MyConfig в вашем банке:

package com.abc;
public class MyConfig {

   @Bean
   public RestTemplate restTemplate() {
      // customize with interceptors
   }
}

Если вы видите, что он конфликтует с другой конфигурацией, которую вы можете использовать @AutoConfigureAfter аннотация.

...