java - 如何从 Spring Cloud Config Server 设置系统变量

标签 java spring ssl config

我正在寻找一种方法来设置来自 Spring Cloud Config Server 的系统变量(例如 -Djavax.net.ssl.keyStore) ,因为我在相互 ssl 环境中正面临这种行为 ( https://stackoverflow.com/a/30199253/1406669 )。
有多种方法可以静态设置它 ( https://stackoverflow.com/a/36895827/1406669 || https://gist.github.com/unamanic/a7eb0c17b78fb03617cc955b06285b1d )。
我不喜欢它的一点是静态设置它(一旦在启动时设置并且永远不会刷新)并且需要以静态方式定义键。这样,当需要引入新的系统变量时,我将不得不重新部署应用程序。这是我尽量避免的事情。
有人有想法吗?

最佳答案

刷新事件通过 ApplicationChangeEvent 起作用,您的应用也可以通过实现 ApplicationListener 来监听该事件。

https://github.com/spring-cloud/spring-cloud-commons/blob/master/docs/src/main/asciidoc/spring-cloud-commons.adoc#environment-changes

@Component
public class DynamicSystemProperties implements ApplicationListener<EnvironmentChangeEvent>{

    private final Environment env;

    @Autowired
    public DynamicSystemProperties(Environment env) {
        this.env = env;

    }

    @Override
    public void onApplicationEvent(EnvironmentChangeEvent environmentChangeEvent) {

        if(env.containsProperty("system.javax.net.ssl.keyStore")) {
            String keystore = env.getProperty("system.javax.net.ssl.keyStore");
            System.out.println("system.javax.net.ssl.keyStore - " + keystore);

            System.getProperties().setProperty("javax.net.ssl.keyStore", keystore);
        }
    }
}

关于java - 如何从 Spring Cloud Config Server 设置系统变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40560014/

相关文章:

Spring MVC 将 jsp 作为文本/纯内容类型返回

java - 为什么在对 Controller 进行单元测试时出现 NoSuchBeanDefinitionException

python - 如何获取 MIPSDK 的 ImageServer 的授权 token

C++ 将 TCP 套接字转换为 BIO (OpenSSL)

java - Eclipse:为 .class 文件启用 "Open With"上下文菜单选项

java - Sqlite-JDBC建表语法错误

java - Jersey ClientBuilder.newClient() : source not found

Java使用spring bean设置静态字段

java - 我可以在 Spring boot 应用程序中使用 Spring 集成模块吗?

c# - TLS 实现 Silverlight