2016-04-14 12 views
0

以下のスレッドを見て、そこに記載されている事項に従っています。まだ私のプロパティの上書きが起きていないSpring Boot外部化プロパティが機能しない

1)Spring Boot - Externalized properties
2)Profile Specific Property Enablement
3)Spring Boot External Config

私はTomcatの8.0.33と春ブーツスターターウェブ上で午前と私のsetenv.shにこれを得た

export JAVA_OPTS="$JAVA_OPTS -Dlog.level=INFO -Dspring.config.location=file:/opt/jboss/apache-tomcat-8.0.33/overrides/ -Dspring.profiles.active=dev" 

と上書きでは)私は2つのファイル

1を得たフォルダapplication.properties 2)application-dev.properties

application.propertiesは私が適切でlog.levelは、このコマンドが動作していることを意味私のコードに供給されていることが分かり、それ

spring.profiles.active=dev 

で単一のエントリーがあります。なぜ私のオーバーライドが期待通りに起こっていないのかがわかりません。

私のワークスペースにはPropertyPlaceholderConfigurerコードがありません。私は必要があればわからない1

助けてください!

答えて

3

このメソッドをプロパティの外部化に使用しません。まず、あなたの方法の提案をしてみて、私が使っているものをあなたに見せてあげます。

あなたのメソッドの提案は、file:/ asの代わりにfile:///を使用することです。私は、コロンの後に3つのスラッシュを渡さないとプロパティを認識しませんでした。

あなたのサンプルプロジェクトavailable here with instructionsを作成しました。

ここで私が使用する方法です。

プロファイルごとに構成ファイルを定義し、application.propertiesファイルをsrc/main/resourcesに保存します。

次に、各設定ファイルで@Profileアノテーションと@PropertySourceアノテーションを使用します。例えば

@Configuration 
@Profile("dev") 
@PropertySource("file:///${user.home}/.devopsbuddy/application-dev.properties") 
public class DevelopmentConfig { 

@Bean 
public EmailService emailService() { 
    return new MockEmailService(); 
} 

@Bean 
public ServletRegistrationBean h2ConsoleServletRegistration() { 
    ServletRegistrationBean bean = new ServletRegistrationBean(new WebServlet()); 
    bean.addUrlMappings("/console/*"); 
    return bean; 
} 
} 

そして、次のように私も、私はApplicationConfigを呼び出すすべてのプロファイルのための有効な設定ファイルを持っている

@Configuration 
@Profile("prod") 
@PropertySource("file:///${user.home}/.devopsbuddy/application-prod.properties") 
public class ProductionConfig { 

@Bean 
public EmailService emailService() { 
    return new SmtpEmailService(); 
} 
} 

@Configuration 
@EnableJpaRepositories(basePackages = "com.devopsbuddy.backend.persistence.repositories") 
@EntityScan(basePackages = "com.devopsbuddy.backend.persistence.domain.backend") 
@EnableTransactionManagement 
@PropertySource("file:///${user.home}/.devopsbuddy/application-common.properties") 
public class ApplicationConfig { 
} 

私のsrc/main/resources/application.propertiesファイルは次のようになります:

spring.profiles.active=dev 
[email protected] 
token.expiration.length.minutes=120 

もちろん、私はspring.profile.activeプロパティをシステムプロパティとして渡すことで外部化できますが、私の場合は今のところうまくいきます。

"dev"プロファイルを渡すと、SpringはDevelopmentConfigクラスに定義されているすべてのプロパティとBeanに加えてApplicationConfigのすべてのプロパティとBeanをロードします。 "prod"を渡すと、代わりにProductionConfigとApplicationConfigのプロパティがロードされます。

私は、セキュリティ、電子メール、データJPA、Amazon Web Services、Stripeなどを使ってSpring Boot Webサイトを作成する方法を学んでいます。あなたが望むなら、あなたの興味を登録することができますhereとコースが登録のために開いているときに通知されます。

+0

///は動作していません – Shiv

+0

こんにちは、私は上記を示すサンプルプロジェクトへのリンクで私の答えを更新しました。参考までに、ここでサンプルプロジェクトを見つけることができます。 http://devopsfolks.com/stackoverflow-material/#36635163 –

+0

ありがとうございます。私は確認して戻って – Shiv

関連する問題