我可以在Spring Boot中的@PropertySource文件中激活配置文件吗?

时间:2016-11-28 16:54:21

标签: spring-boot spring-profiles

我想在应用程序中的属性文件中激活配置文件。最终我想动态激活配置文件,但我想从静态

开始

我的申请

@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

我的输出证明my.properties已被读取,但配置文件被忽略

  

未设置有效的配置文件,回退到默认配置文件:默认

     

显示:ABC

也许我应该解释一下我想要实现的目标。我的Spring Boot之前的应用程序行为取决于环境,例如,如果使用$ENV=DEV开发配置。我想迁移到Spring启动并将配置文件放到配置文件中,但我希望保持环境不变。 我想要实现

if $ENV=DEV then profile DEV is selected

我的想法是在my.properties添加spring.profiles.active=$ENV但不起作用

1 个答案:

答案 0 :(得分:1)

不,你不能那样做。读取@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);
}