【问题标题】:How to read spring boot tomcat properties another user defined bean before initialization?如何在初始化之前读取另一个用户定义的bean的spring boot tomcat属性?
【发布时间】:2020-11-22 03:43:55
【问题描述】:

我想从用户定义的 spring bean 中读取 spring boot ssl keystore 密码值并设置为 SSL 属性 server.ssl.key-password。

@Component
public class KeyStorePasswordBean {
    public String password() {
        //implementation
    }    
}

我尝试使用 EnvironmentPostProcessor 但抛出 NullPointer 异常,因为 KeyStorePasswordBean bean 将在 EnvironmentPostProcessor 之后初始化

public class PropertyEnvironmentPostProcessor implements EnvironmentPostProcessor {
    @Autowired
    KeyStorePasswordBean keyStorePasswordBean;

    @Override
    public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
        String keystorePassword = keyStorePasswordBean.password(); //NullPointerException
        System.out.println("password: " + keystorePassword);
    }
} 

如何在 Spring Boot 中处理这个问题? 在tomcat服务器初始化启动前思考如何将KeyStorePasswordBean bean加载到spring上下文中。

我使用的是 Spring Boot 2.25 版和 Spring 5.2.4 版

【问题讨论】:

    标签: java spring spring-boot spring-mvc spring-security


    【解决方案1】:

    您可以通过以下方式读取以下属性:

    ConfigurableEnvironment environment
    

    这样:

    environment.getProperty("NAME_OF_YOUR_PROPERTIES")
    

    然后您可以创建自定义属性源并将其添加到环境中(使用“server.ssl.key-password”属性)

    Map<String, Object> properties = new HashMap<>();
    properties.put("server.ssl.key-password", property); // property = environment.getProperty("NAME_OF_YOUR_PROPERTIES")
    environment.getPropertySources().addLast(new MapPropertySource("muCustomPropertySource", properties));
    

    另外,请阅读以下文章 - https://www.baeldung.com/spring-boot-environmentpostprocessor

    【讨论】:

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