2.2 外部化配置文件简介

2016-02-19 17:38:25 10,839 0


SpringBoot的默认情况下会加载classpath下两个默认的配置文件:application.propertiesapplication.yml。通常情况下,我们只要选择其中一种即可。

默认情况下,SpringBoot按照如下优先顺序加载application.properties或者application.yml文件中的配置,并注入Environment对象中。

  1. 用户当前所在目录下的/config子目录

  2. 用户当前所在目录

  3. classpath根路径下的/config目录

  4. 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。等到实例化之后,这个属性就会被设置。

运行程序后,访问页面

QQ截图20160219165742.png


对于上述的application.properties,对应的application.yml为

server:
     contextPath: /springboot
     port: 80
name: tianshouzhi

值得注意的是,不论我们使用的是哪一种方式,我们都可以通过属性的全路径来注入参数。
也就是说,之前案例中的@Value(${name})在两种配置文件的情况下,都是可以正常使用的。