外部化配置
- 常用外部配置源
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