2016-11-12 52 views
1

我在尋找一種方法來Spring Cloud Config Server設定的系統變量(如-Djavax.net.ssl.keyStore),因爲我面對的正是這種行爲(https://stackoverflow.com/a/30199253/1406669)在一個共同的ssl環境。
有多種方法可以靜態設置它(https://stackoverflow.com/a/36895827/1406669 || https://gist.github.com/unamanic/a7eb0c17b78fb03617cc955b06285b1d)。
我不喜歡它的事情是靜態設置它(一旦在啓動時設置並且從未刷新)以及需要以靜態方式定義鍵。以這種方式,當需要引入新的系統變量時,我將不得不重新部署應用程序。這是我試圖避免的事情。
有人有想法嗎?如何從春季雲配置服務器設置系統變量

回答

0

刷新事件通過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); 
     } 
    } 
} 
+1

也可以與http://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/env/EnvironmentPostProcessor.html –

+0

@ElGohr的工作是真實的,但是這種方法還可以訪問在EnvironmentChangeEvent中更改的屬性(第一次運行時爲空)。如果你只是在某個屬性發生變化時才需要執行某些操作,這可能會更清晰。 – Unamanic

相關問題