Spring Boot从命令行覆盖YML配置文件

时间:2015-03-06 21:55:45

标签: spring spring-boot

我不想使用命令行覆盖现有的YML文件配置文件,所以我这样做了。

  1. 创建了一个文件夹并添加到了类路径
  2. 在该新文件夹中复制了另一个application.yml
  3. 执行此命令mvn spring-boot:run -Dspring.profiles.active=unit-test
  4. 但它仍然在接受"默认"来自源代码application.yml的活动配置文件。我也尝试过创建一个application.properties而不是application.yml但它仍然没有被选中?

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    @EnableAutoConfiguration
    @ComponentScan
    public class SuchApplication implements CommandLineRunner {
    
        @Autowired
        private DogeService dogeService;
    
        @Override
        public void run(String... args) {
            System.out.println("AutoConfiguration should have wired up our stuff");
            System.out.println("Let's see if we are doge-worthy...");
            if (dogeService.requiresDogeness()) {
                System.out.println(dogeService.leDoge());
            } else {
                System.out.println("No Doge for us :(");
            }
        }
    
        public static void main(String[] args) throws Exception {
            SpringApplication.run(SuchApplication.class, args);
        }
    }
    

    我的资源文件夹

    下有以下YML文件
    spring:
      profiles.active: default
    ---
    spring:
      profiles: default
    
    doge:
      wow: 10
      such: so
      very: true
    
    ---
    spring:
       profiles: unit-test
    doge:
      wow: 4
      such: so
      very: true
    

1 个答案:

答案 0 :(得分:0)

我在Spring Boot中遇到了类似的问题,并在我的配置类中用这个注释解决了它...

@PropertySource("classpath:application.yml")

但是从官方的Spring文档中,这个注释看起来没必要,这就是为什么我没有添加第一次尝试。