展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭

外部化配置

  • 常用外部配置源
Java属性文件、YAML文件、环境变量、命令行参数;
  • 启动类中获取环境变量
@SpringBootApplication
public class Boot09FeaturesProfileApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext run = SpringApplication.run(Boot09FeaturesProfileApplication.class, args);

        ConfigurableEnvironment environment = run.getEnvironment();

        Map<String, Object> systemEnvironment = environment.getSystemEnvironment();

        Map<String, Object> systemProperties = environment.getSystemProperties();

        System.out.println(systemEnvironment);
        System.out.println(systemProperties);
    }

}
  • 控制层中获取环境变量
@RestController
public class HelloController {

    // 获取yml文件中的变量,如果没有则使用默认值
    @Value("${person.name:李四}")
    private String name;

    @Autowired
    private Person person;

    // 获取maven环境变量
    @Value("${MAVEN_HOME}")
    private String msg;

    // 获取系统变量
    @Value("${os.name}")
    private String osName;

    @GetMapping("/")
    public String hello(){
        return person.getClass().toString();
    }

    @GetMapping("/person")
    public Person person(){
        return person;
    }

    @GetMapping("/msg")
    public String getMsg(){
        return msg+"==>"+osName;
    }
}
  • 配置文件查找位置

  • classpath 根路径

  • classpath 根路径下config目录中的yml文件优先级高于class path根路径的yml文件

  • jar包当前目录,当前目录下的配置文件优先级高于jar包中的配置

  • jar包当前目录的config目录,此时config目录下的配置文件优先级高于01目录下的配置文件

  • /config子目录的直接子目录,此时v1目录下的配置文件优先级高于config目录下的配置文件

  • 后面的可以覆盖前面的同名配置项

  • 配置文件加载顺序:

1.  当前jar包内部的application.properties和application.yml
2.  当前jar包内部的application-{profile}.properties 和 application-{profile}.yml
3.  引用的外部jar包的application.properties和application.yml
4.  引用的外部jar包的application-{profile}.properties 和 application-{profile}.yml
posted @ 2022-08-01 09:44  DogLeftover  阅读(12)  评论(0编辑  收藏  举报