2016-04-27 48 views
11

documentationで説明されているように)2つのプロファイルを定義するSpringブートアプリケーション用の設定ファイルは、application.ymlです。Springの設定ファイル内でシステムのプロパティを定義できますか?

生産プロファイルが有効になっている場合、http.maxConnectionsシステムプロパティをカスタム値に設定したいと思います。

spring: 
    profiles: 
     active: dev 
--- 
spring: 
    profiles: dev 
--- 
spring: 
    profiles: production 
http: 
    maxConnections: 15 

しかし、実際にはシステムレベルのプロパティは設定されません。アプリケーションレベルのプロパティを作成するだけです。

java -Dhttp.maxConnections=15 myapp.jar 

java -jar -Dspring.profiles.active=production myapp.jar 

で打ち上げを比較したとき、私は私が私がプログラムSystem.setPropertyを呼び出し、「生産」プロファイルに@ConditionalだBeanを作成することができたとしhttp://locahost:8080/envとJMXコンソールの両方を介してこれを確認しました私のapplication.yml定義のプロパティに基づいていますが、設定ファイルだけでより簡単な方法がありますか?

答えて

2

私はここであなたの最善の策だと思います。スプリングブートはLoggingSystemにあり、さまざまなlogging.*プロパティがシステムプロパティにマップされています。

Environmentの準備が整い次第、できるだけ早くシステムプロパティを設定することをお勧めします。これを行うには、ApplicationEnvironmentPreparedEventをリッスンするApplicationListenerを使用します。 ApplicationListenerの実装はspring.factoriesのエントリで登録する必要があります。

3

お試しください。私はプログラム的callsSystem.setPropertyは私application.yml定義のプロパティに基づいて「生産」プロファイルに@Conditionalだが、一人で、設定ファイルを通じてもっと簡単な方法があるBeanを作成することができたとし

@Profile("production") 
@Component 
public class ProductionPropertySetter { 

    @PostConstruct 
    public void setProperty() { 
     System.setProperty("http.maxConnections", 15); 
    } 

} 
+0

問題があり、あなたはそれ以外の場合は、あなただけはい、意味をなすこと、それを修正し、アプリ – Palcente

+0

@Palcenteを再起動することができ、これを変更したい場合は再デプロイする必要があります。 'production'プロファイルで使われる' application-production.yml'にプロパティを入れることができると思います。 – TheKojuEffect

0

Beanを指定するクラスのコンストラクターに環境を挿入できます。これにより、Beanを作成する前にシステムプロパティにアプリケーションプロパティを書き込むことができます。

@Configuration 
public class ApplicationBeans { 

    @Autowired 
    public ApplicationBeans(Environment environment) { 
     // set system properties before the beans are being created. 
     String property = "com.application.property"; 
     System.getProperties().setProperty(property, environment.getProperty(property)); 
    } 

    /** 
    * Bean that depends on the system properties 
    */ 
    @Bean 
    public SomeBean someBean() { 
     return new SomeBean(); 
    } 
} 
関連する問題