2016-11-12 13 views
1

システム変数(たとえば-Djavax.net.ssl.keyStore)をSpring Cloud Config Serverから設定する方法を探しています。これはまさにこの動作(https://stackoverflow.com/a/30199253/1406669)に相互SSL環境。
静的に設定する方法はさまざまです(https://stackoverflow.com/a/36895827/1406669 || https://gist.github.com/unamanic/a7eb0c17b78fb03617cc955b06285b1d)。
私はそれについて気に入らないことは、静的に(起動時に一度設定され、決してリフレッシュされないように)設定し、キーを静的な方法で定義する必要があることです。このようにして、新しいシステム変数を導入する必要があるときに、アプリケーションを再デプロイする必要があります。これは私が避けようとするものです。
誰かがアイデアを持っていますか?Spring Cloud Config Serverからシステム変数を設定する方法

答えて

0

リフレッシュイベントは、アプリケーションがApplicationListenerを実装することによって聴くことができるApplicationChangeEventを介して機能します。

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); 
     } 
    } 
} 
もhttp://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/env/EnvironmentPostProcessor.html
+1

このメソッドは、EnvironmentChangeEvent(最初の実行では空)で変更されたプロパティへのアクセスも提供します。プロパティが実際に変更されたときにだけ何かを実行する必要がある場合、これはよりクリーンかもしれません。 –

+0

@ElGohrこれで仕事ができる – Unamanic

関連する問題