我想基于个人资料加载环境特定属性。但是,我的主启动应用程序位于不同的包中。
- 项目结构
-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 :(得分:1)
问题是,Spring会在Bean' Subscriber'之后注入你的财产。被创造了!
所以把你的log.debug("hostName... in Subscriber .java " + hostName);
放在不同的位置而不是构造函数中!