在spring-boot中的bean初始化之前设置系统属性

时间:2019-04-30 14:38:29

标签: spring-boot system-properties

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

1 个答案:

答案 0 :(得分:0)

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

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

“我不想使用@DependsOn”绝不是有效的声明。

在创建RestTemplate之前,必须对DeveloppementPropertySetter Bean进行完全初始化, 尚未将DeveloppementPropertySetter注入RestTemplate bean中。 这种情况似乎正是创建@DependsOn批注的原因。