1.配置文件的作用
配置文件在整个项目中是非常重要的,比如
数据库的连接信息(用户名密码),servlet是将配置信息写到代码中的,项目启动时还是需要读取配置信息
项目的启动端口,当项目的端口被占用时,可以通过配置文件直接修改端口信息,linux可以使用命令查看被占用的端口的进程,windows比较复杂,有时难以找到,通过配置文件修改项目端口号比较方便
第三方系统调用密钥等信息,第三方系统颁发的密钥存储在配置文件中,密钥直接写在程序中打包后变为class文件不能被修改,并且不安全,代码被下载后,密钥就被获得了.配置文件可以放在云端,进行分离,提升了安全性.有了配置文件也方便维护人员的修改.
用于发现和定位问题的普通日志和异常日志等
2.配置文件的格式
SpringBoot配置文件有两种格式
1.properties(默认)
2.yml(yaml)
这两种配置文件从功能上来说可以存在于同一个项目中,如果配置了相同的属性,那么以properties的生效,properties的优先级是高于yml的,但是properties配置信息加载完后也会加载yml的配置信息
虽然能并存,但是实际开发中通常会采用一种统一的方式,利于维护
3.配置文件说明
properties配置文件说明
基本语法:k=v形式配置
多个配置文件,换行写
分为
1.系统配置项(给Spring使用的),如端口号,server.port=8080/spring.datasource.url…
2.用户自定义配置项(非系统配置项):用户自定义的key
properties中:
这里的中文重新打开后会乱码…或者没乱码但是重启后乱码了(重启前IDEA有缓存,可能不会乱码)
如果写了很多注释,重启后全部乱码,就会很难受
注释乱码原因:
编码格式: 项目启动后就不能修改了
解决方法:点击settings,将选项全都修改为UTF8后应用,新项目就会默认支持中文.
本项目还是不支持,本项目编码格式已经不能修改
将原来的properties文件删除,重新创建一个properties文件 ,就能支持中文
yml能进行编码格式的修改,并且默认是UTF8,支持中文
设置项目端口号
控制台打印端口号
注释掉当前配置信息,使用yml配置,yml配置信息就会生效
t上面也说过,有相同项,以properties的配置信息为准, 它的优先级是高于yml的
删除注释,启动项目,就会发现端口号还是9090
注意:每次修改配置项后,都要重启项目,不启动是不会生效的
读取配置文件
在项目中要主动读取配置文件的内容,使用@Value注解实现
@Value注解使用${}格式读取
结果并不是hellozhangsan
是因为读取配置文件内容有固定的格式,这样写相当于将studentname这个字符串赋值给了name ,没有读取配置项
所以要遵守约定,才能读取到配置文件的内容
读取成功
用了这个格式,如果没有这个配置项,启动时就会报错
因为这个本质还是DI,当项目启动时,容器会进行加载,加载时进行属性的设置,会检测有没有key值是student,没有发现key值,就会报错了
读取配置文件注意:格式 ${key}
也能读取系统配置信息
properties优点
1.是系统默认的配置文件
2.优先级比yml高
3.格式简单
缺点:写法比较冗余(包名必须全都写上,很多相同包名下的配置都要写上包名)
4.yml配置文件说明
yml优点
yml是YAML的缩写(Yet Another Markup Language)另一种标记语言.
可读性高,写法简单,易于理解,语法和JSON相似
支持更多的数据类型,可以简单地表达数组,散列表,标量等数据形态.使用空白符进行缩进和大量依赖外观的特色,适合用来表达或编辑数据结构,各种配置文件等
支持更多的编程语言,不仅是在Java中使用
基本语法:
key: value
kv是冒号加空格构成的,空格不能省略
yml读取配置的⽅式和properties相同,使⽤@Value注解即可
没有空格,port就没有高亮,容器加载时是不会被识别的
还有缩进问题
启动后会直接报错,因为server下找不到aaaa
aaaa前有两个tab,不是server下的配置信息
去掉一个tab后
注意:yml写法简洁,但是非常灵活,容易出错,不适合新手
再看个配置字符串的例子
字符串类型的,获取之后结果如何?
结果:
什么都不加的,和加了单引号的,是什么内容就输出什么内容
加了双引号的,是原意输出,n本来表示换行
还可表示其他数据类型
配置对象
读取对象时不能用@Value注解,要使用@Configuration注解实现
还能配置一个对象,yml读取对象的实现:
这种写法也可以:
student: {id: 1,name: 张三,age: 18}
启动项目:
配置集合
配置文件中也能配置集合
或者
collection: {name: [mysql,sqlserver,db2]}
也是使⽤@ConfigurationProperties来读取的
启动项目
5.设置不同环境的配置文件
Spring Boot不同平台的配置规则:
1.必须有主配置文件,主配置文件名必须是application.yml(.properties)主配置文件存放公共的内容,不同平台的配置文件存放有差异的内容
2.不同平台的配置文件,每个平台拥有一个配置文件,配置文件名称:application-xxx.yml(.properties)
#开发环境配置文件 server: port: 9090#生产环境配置文件 server: port: 9393#测试环境配置文件 server: port: 9898
在主配置文件中设置运行环境
spring.profiles.active=dev
dev是可变的,可以设置为其他的,test/prod
然后启动项目,观察端口号,9090就是开发环境的端口号