Установка системных свойств перед инициализацией bean-компонента в spring-boot - PullRequest
0 голосов
/ 30 апреля 2019

Я добавляю некоторые системные свойства внутри украшенной @PostConstruct метод боба, как показано ниже:

@Profile("dev")
@Component
public class DeveloppementPropertySetter {

    @PostConstruct
    public void setProperty() {
        System.setProperty("ip", "X.X.X.X");
        System.setProperty("port", "1234");
    }
}

И когда я пытаюсь получить эти свойства из другого компонента (в другом классе):

@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
  String ip = System.getProperty("ip");
  String port = System.getProperty("port");
  (... using port and ip to customize the builder ...)
}

Я получил NullPointerException и Spring не может создать экземпляр компонента restTemplate. Как я могу убедиться, что bean-компонент DeveloppementPropertySetter инициализируется до restTemplate? Я не хочу использовать аннотацию @DependsOn.

1 Ответ

0 голосов
/ 30 апреля 2019

@DependsOn кажется решением вашей проблемы.

Если вы добавите @DependsOn к шаблону rest, тогда Spring гарантирует, что bean-компонент DeveloppementPropertySetter будет полностью инициализирован перед попыткой создать шаблон restTemplate.

«Я не хочу использовать @DependsOn» ни в коем случае не является допустимым утверждением.

Перед созданием RestTemplate bean-компонент DeveloppementPropertySetter должен быть полностью инициализирован, все же DeveloppementPropertySetter не внедряется в bean-компонент RestTemplate. Похоже, именно в этой ситуации была создана аннотация @DependsOn.

...