SpringBoot快速入门-SpringBoot自动装配如何使用

上一篇文章已经说过SpringBoot中默认已经添加了非常多的功能和对应的默认配置,可以方便开发者开箱即用,不需要我们自己去完成各项功能的引入和配置工作。
比如你要基于一个Web项目进行开发,只需要在SpringBoot项目中引入一个引入一个spring-boot-starter-web包就可以了,因为这个spring-boot-starter-web包中已经封装了一个web项目需要的基本配置,引入即可使用。
同时可以支持用户对默认配置参数进行修改,或自定义配置参数。那么,如果自定义配置和默认配置冲突了,或重复了,那么SpringBoot该如何选择呢?
SpringBoot配置优先级由高到低如下:

(1)命令行参数;
(2)java:comp/env的JNDI属性;
(3)JAVA系统的环境属性;
(4)操作系统的环境变量;
(5)JAR包外部的application-XXX.properties或application-XXX.yml配置文件(XXX也就是dev、test、prod等不同环境配置);
(6)JAR包内部的application-XXX.properties或application-XXX.yml配置文件(XXX也就是dev、test、prod等不同环境配置);
(7)JAR包外部的application.properties或application.yml配置文件;
(8)JAR包内部的application.properties或application.yml配置文件;
(9)@Configuration注解类上的@PropertySource指定的配置文件;
(10)通过SpringApplication.setDefaultProperties 指定的默认属性。

其中,如果同时配置了application.properties和application.yml文件,且都配置了相同的配置项,那么最后生效的配置是哪一个呢?例如:

application.yml配置文件

server:
  port: 8081

application.properties配置文件

server.port=8080

启动应用,从日志可以发现,最终生效的是property文件的配置。
日志:
……略
main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
……略