1.配置文件的作用
配置文件在整个项目中非常重要,例如
Servlet将配置信息写入数据库的连接信息(用户名密码),项目启动时仍需读取配置信息
项目启动端口,当项目端口被占用时,端口信息可以通过配置文件直接修改。linux可以使用命令查看被占用端口的过程。windows比较复杂,有时很难找到。通过配置文件修改项目端口号更方便
第三方系统调用密钥等信息。第三方系统发布的密钥存储在配置文件中。密钥直接写在程序中,打包成class文件,不能修改,不安全。代码下载后,获得密钥。配置文件可以放在云中分离,提高了安全性。配置文件也方便维护人员修改.
普通日志和异常日志用于发现和定位问题
2.配置文件格式Springboot配置文件有两种格式
1.properties(默认)
2.yml(yaml)
这两个配置文件在功能上可以存在于同一个项目中。如果配置了相同的属性,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
因为读取配置文件的内容有一个固定的格式,所以写作相当于给name赋值studentname字符串 ,未读取配置项
因此,只有遵守协议,才能阅读配置文件的内容
读取成功
使用此格式,如果没有此配置项,启动时会报错
因为这个本质还是DI,项目启动的时候容器会加载,加载的时候会设置属性,检测key值是否是student。如果没有发现key值,就会报错。
注意阅读配置文件:格式 ${key}
还可以读取系统配置信息
properties优势
1.系统默认配置文件
2.优先级比yml高
3.格式简单
缺点:写作冗余(包名必须全部写好,包名下的很多配置都要写好)
4.yml配置文件说明yml优势yml是yaml的缩写(YetAnother Markup Language)另一种标记语言.
可读性高,写作简单易懂,语法与JSON相似
支持更多的数据类型,可以简单地表达数组、散列表、标量和其他数据形式。空白符被用来缩进,并大量依赖于外观,适用于表达或编辑数据结构、各种配置文件等
不仅仅是Java,支持更多的编程语言
基本语法:
key: value
kv由冒号加空格组成,空格不能省略
yml读取配置⽅类型与properties相同⽤@Value注释即可
没有空间,port没有亮度,容器加载时也不会被识别
还有缩进的问题
启动后会直接报错,因为server下找不到aaaaaa
aaaaa之前有两个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是开发环境的端口号