我想从应用程序中的属性文件中激活一个配置文件。最终,我想动态激活配置文件,但我想从静态
开始我的应用程序
@SpringBootApplication @PropertySource("classpath:/my.properties")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Component public static class MyBean {
@Autowired public void display(@Value("${abc}") String abc) {
System.out.println("Post:"+ abc);
}
my.properties:
spring.profiles.active=STAT
abc=ABC
我的输出是读取我的作品的证明,但忽略了配置文件
没有活动配置文件集,落到默认配置文件:默认配置文件
显示:ABC
也许我应该解释我想实现的目标。我的弹簧前启动应用程序行为取决于环境,例如,如果使用$ENV=DEV
开发配置。我想迁移到Spring Boot并将配置放在配置文件中,但我想保持环境不变。我想实现
if $ENV=DEV then profile DEV is selected
我的想法是用spring.profiles.active=$ENV
添加my.properties
,但它不起作用
不,你不能那样做。@PropertySource
读取得太晚,无法对应用程序引导。
SpringApplication
只是更完整的东西的快捷方式。您可以在该应用程序启动之前阅读所需的任何属性,并在应用程序启动之前启用个人资料,例如:
public static void main(String[] args) {
String env = System.getenv().get("ENV");
// Some sanity checks on `env`
new SpringApplicationBuilder(Application.class).profiles(env).run(args);
}