Spring引导 - 如何在不同的包中存在类时加载特定于环境的属性

时间:2017-10-24 08:59:35

标签: spring spring-boot

我想基于个人资料加载环境特定属性。但是,我的主启动应用程序位于不同的包中。

- 项目结构

-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;

1 个答案:

答案 0 :(得分:1)

问题是,Spring会在Bean' Subscriber'之后注入你的财产。被创造了!

所以把你的log.debug("hostName... in Subscriber .java " + hostName);放在不同的位置而不是构造函数中!