在SpringBoot中有两种配置,一个是properties,一个是yml,他们的配置内容格式不同,但他们的作用是相同的。
properties和yml的区别:
1、yml相对于properties更简洁
2、yml中的数据是有序的,properties中的数据是无序的
位置问题
在SpringBoot中一共有四个地方可以存放application.properties文件
1、当前项目根目录下的config目录下
2、当前项目的根目录下
3、resources目录下的config目录下
4、resources目录下
按照如上的顺序,四个配置文件的优先级一次降低,如下:
这四个位置是默认的位置,即SpringBoot启动默认会从这四个位置 按照顺序来加载配置,但是,这也不是绝对的,我们也可以在项目启动时自定义配置文件位置。
例如,现在在resources下创建一个aaa目录,目录存放一个application.properties文件,那么正常情况下当我们启动SpringBoot项目时,这个配置文件是不会被自动加载的,我们可以通过spring.config.location属性来手动的指定配置文件的位置,指定完成之后,系统会自动去指定目录下查找application.properties文件
此时项目启动,系统就会自动加载你所自定义配置的配置文件,如果项目已经打成了jar包,在启动命令中加入位置参数即可
java -jar XXX.jar -- spring.config.location=classpath:/aaa/
文件名问题
对于application.properties而言,他不一定非要叫application,但是项目默认是去加载名问application的配置文件,如果不是application也是可以的,必须要明确指定配置文件的文件名。
方式和指定路径一致,只不过此时的key是spring.config.name.
首先我们在resources目录下创建一个app.properties文件,然后再idea中指定配置文件的文件名
配置好文件名之后,系统默认还是从四个位置先后加载,当然也可以指定文件的位置,那就需要指定spring.config.location,文件名和文件路径可以同时指定。
普通的属性注入
1、新建Book对象
2、在application.properties中定义
3、在book对象中增加@Value注解注入value值
注意:Book对象本身也要交给Spring容器去管理,如果Book没有交给Spring容器那么Book中的属性也无法从Spring容器中获取到值。
配置完成后,在controller中注入Book对象,启动项目,就可以看到属性已经注入到对象中了。
乱码请先忽略。
一般来说,我们在application.properties中主要存放系统的配置,这种自定义的配置不建议放在该文件中,可以自定义properties文件来存放自定义配置
book.properties配置
此时项目启动并不会加载该配置文件,如果是在xml中配置,可以如下方式引用properties文件
<context:property-placeholder location="classpath:book.properties"/>
如果是在java配置中,可以通过@PropertySource来引入配置
这时候项目启动,就会自动加载book.properties文件,这只是Spring中属性注入的一个简单的用法。和SpringBoot并没有什么关系
类型安全的属性注入
SpringBoot引入了类型安全的属性注入,如果采用Spring中的配置方式,当配置的属性非常多的时候工作量就非常大了,而且容易出错。使用类型安全注入可以有效的解决这个问题。