如何从 Spring 云配置服务器设置系统变量
How to set system variable from Spring Cloud Config Server
我正在寻找一种在相互 ssl 环境中设置来自 Spring Cloud Config Server, because I'm facing exactly this behaviour ( 的系统变量(例如 -Djavax.net.ssl.keyStore)的方法。
有多种方法可以静态设置它 ( || https://gist.github.com/unamanic/a7eb0c17b78fb03617cc955b06285b1d)。
我不喜欢它的一点是静态设置(一旦在启动时设置并且从不刷新)并且需要以静态方式定义键。这样,当需要引入新的系统变量时,我将不得不重新部署应用程序。这是我尽量避免的事情。
有人有想法吗?
刷新事件通过 ApplicationChangeEvent 起作用,您的应用也可以通过实施 ApplicationListener 来侦听该事件。
@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);
}
}
}
我正在寻找一种在相互 ssl 环境中设置来自 Spring Cloud Config Server, because I'm facing exactly this behaviour ( 的系统变量(例如 -Djavax.net.ssl.keyStore)的方法。
有多种方法可以静态设置它 (
我不喜欢它的一点是静态设置(一旦在启动时设置并且从不刷新)并且需要以静态方式定义键。这样,当需要引入新的系统变量时,我将不得不重新部署应用程序。这是我尽量避免的事情。
有人有想法吗?
刷新事件通过 ApplicationChangeEvent 起作用,您的应用也可以通过实施 ApplicationListener 来侦听该事件。
@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);
}
}
}