【问题标题】:Setting system properties before bean initialization in spring-boot在spring-boot中bean初始化之前设置系统属性
【发布时间】:2019-04-30 14:38:28
【问题描述】:

我在 @PostConstruct 装饰中添加了一些系统属性 如下所示的 bean 方法:

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

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

当我尝试从另一个 bean(在另一个类中)获取这些属性时:

@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。如何确保 bean DeveloppementPropertySetter 在 before restTemplate 之前被初始化?我不想使用@DependsOn 注释。

【问题讨论】:

    标签: spring-boot system-properties


    【解决方案1】:

    @DependsOn 似乎是您问题的答案。

    如果将@DependsOn 添加到restTemplate, 那么 Spring 将保证 DeveloppementPropertySetter bean 在尝试创建 restTemplate 之前完全初始化。

    “我不想使用@DependsOn”绝不是一个有效的陈述。

    必须在创建 RestTemplate 之前完全初始化 DeveloppementPropertySetter bean, 但是 DeveloppementPropertySetter 没有注入 RestTemplate bean。 这种情况似乎正是创建 @DependsOn 注释的原因。

    【讨论】:

      猜你喜欢
      • 2012-12-20
      • 1970-01-01
      • 1970-01-01
      • 2020-03-02
      • 1970-01-01
      • 2021-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多