2017-10-24 3 views
0

プロファイルに環境固有のプロパティベースをロードしたい。しかし、私のメインブートアプリは別のパッケージに入っています。スプリングブート - クラスが別のパッケージに存在する場合、環境固有のプロパティをロードする方法

-project構造

-projテスト

-src/main/java 
      -com.x - AppBoot.java (Spring boot main app) 
      -com.x.service - Subscriber.java 
     -src/main/resources 
      -application-dev.properties 
      -application-test.properties 

application-dev.properties 
mq.hostname=spring profile dev 

application-test.properties 
mq.hostname=spring profile test 

AppBoot.java

package com.x 
@SpringBootApplication(scanBasePackages = { "com.x" }) 
public class AppBoot { 

    @Autowired 
    private Subscriber subscriber; 

    @Value("${mq.hostname}") 
    private String hostName; 

    public static void main(String[] args) throws Exception { 
     ConfigurableApplicationContext context = 
    SpringApplication.run(AppBoot.class, args); 
     log.debug("hostName... in Main.java " + hostName); 


    } 
} 

package com.x.service 
@Component 
public class Subscriber { 

    @Value("${mq.hostname}") 
    private String hostName; 
public Subscriber() { 

     log.debug("hostName... in Subscriber .java " + hostName); 
} 
} 

通報 - AppBoot.javaでlog.debug("hostName... in Main.java " + hostName);プロパティ値で印刷なっています。ただし、Subscriber.java内の log.debug("hostName... in Subscriber .java " + hostName)はnullとして返されます。

+0

実行時に、アプリケーションのファイルをロードするための@Profile値を提供できます。春は自動的にプロファイルに基づいてプロパティを挿入します – Yogi

答えて

1

問題は、Bean 'Subscriber'が作成された後にSpringがあなたのプロパティを注入することです。

log.debug("hostName... in Subscriber .java " + hostName);をコンストラクタではなく別の場所に配置してください。

+0

ありがとうございます。コンストラクタの代わりにメソッドを追加し、それが動作しています。乾杯! – Suman

関連する問題