2.2 外部化配置文件简介
SpringBoot的默认情况下会加载classpath下两个默认的配置文件:application.properties
和application.yml
。通常情况下,我们只要选择其中一种即可。
默认情况下,SpringBoot按照如下优先顺序加载application.properties或者application.yml文件中的配置,并注入Environment对象中。
用户当前所在目录下的/config子目录
用户当前所在目录
classpath根路径下的/config目录
classpath根路径
也就是说1的优先级最高,4的优先级最低。如果出现配置项重复,优先级高的会覆盖优先级低的配置项。
Springboot提供大量的默认配置,一部分是Spring自身的默认配置,另一部分是与springboot整合的第三方框架的默认配置。我们可以在两种类型的配置文件中覆盖其默认配置,也可以自定义我们自己的配置项。
举例来说,在quick start案例中,我们在浏览器访问localhost:8080,浏览器显示内容
这里有很明显的springboot对于内嵌web容器的两个默认配置项:
1、默认的监听端口:8080,
2、应用的contextPath为"/"。
如我们想要覆盖默认的配置,可以按照如下方式进行:
例如application.properties文件:
#Tomcat configuration server.port=80 server.contextPath=/springboot #Custom configuration name=tianshouzhi
前面四个配置我们使用配置项覆盖Spring默认的配置项,最后一个使我们自己新添加的配置项。
对于这个文件中的配置项,我们再程序中可以直接使用@Value注解进行引用。例如我们修改一个Quick Start案例中的Application.java:
@RestController @EnableAutoConfiguration public class Application { @Value("${name}") private String name; @RequestMapping("/") public String hello() { return "Hello ,"+name; } public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
要注意的是,@Value注解是在Bean实例化之后再进行注入的,也就是说,当我们在构造方法中使用这个属性的值时,起还是为null。等到实例化之后,这个属性就会被设置。
运行程序后,访问页面
对于上述的application.properties,对应的application.yml为
server: contextPath: /springboot port: 80 name: tianshouzhi
值得注意的是,不论我们使用的是哪一种方式,我们都可以通过属性的全路径来注入参数。
也就是说,之前案例中的@Value(${name})在两种配置文件的情况下,都是可以正常使用的。