1. 配置文件
springBoot使用一个全局的配置文件, 配置文件名是固定的:
*application.properties
*application.yml
配置文件的作用:修改SpringBoot自动配置的默认值;SpringBoot在底层给我们自动配置
Yaml
Yaml不是一个标记语言
Yaml是一个标记语言
标记语言
以前的配置文件;大多数都是xxx.xml文件
YAML:是以数据为中心,比如json,xml等更适合做配置文件
yaml基本语法
基本语法
k: 空格 v:表示键值对(空格必须有)
以空格的缩进来控制层级的关系;只要是左对齐的一列数据
server prot8081 path /hello
属性和值也是大小敏感, 空格注意, 语法很严格
值的写法
字面量: 普通的值(数字.布尔.字符串)
对象, Map(属性和值), (键值对)
k: v:在下一行对象的属性和值的关系;注意缩进
对象还是k:v的方式
friends lastName zhangsan age20
行内写法
friends lastName zhangsanage20
数组(List. Set)
用- 值代表数组中的一个元素
pets cat dog pig
行内写法
pet cat dog pig
当然了, 支持复合结构
配置文件注入(注解模式)
@Component
@ConfigurationProperties(perfix = "pet")
只有这个组件是容器中的组件, 才能使用容器中的功能
或者在字段上面加@Value从配置文件, 环境变量中获取
那么,@Value和@ConfigurationPropertites获取值的区别
@ConfigurationProperties @Value 功能 批量注入配置文件中的属性 一个一个指定 松散绑定(松散绑定) 可以 不可以 spel 不支持 支持 JSR303数据校验 支持 不支持 复杂类型封装 支持 不支持 数据校验: 字段上加@Email
如果,只是在某个业务逻辑中需要获取一下配置文件中的某项值, 使用@value
如果说, 专门写一个JavaBean来和配置文件进行映射, 就直接使用@ConfigurationProperies
@ProperteySource(value = {"classpath:xxxx.properties"}) 可以通过制定加载某个路径下的
配置文件注入(xml模式)
@ImportResource: 导入Spring的配置文件,用来导入xml文件,例如:@ImportResource(locations= {"classpath:xxxx.xml"})
Spring推荐采用全注解模式开发
写个配置类
/** @Configuration 指名当前是配置类, 取代Spring 的beal.xml 类的配置文件 */ public class MyAppConfig{ // 将方法的返回值添加到容器中,容器中这个组件的默认id 就是方法名 public HelloService helloService(){ return new HelloService(); } }
配置文件的占位符${xxx}
在application.properties中写
person.id=周周周 person.dog.name=${person.id}的狗狗
随机数
${random.value}. ${random.int}
占位符获取之前的配置的值没有用 : 来指定默认值
person.dog=${person.name:baba}
profile
1. 多profile文件
我们在主配置文件编写的收文件名可以是application-{profile}.properties/yml
默认使用application.properties,但是可以在默认配置文件里写以下参数:
spring.profiles.active=dev
那么激活使用的则是application-dev.properties
2.使用yml文档
3.激活指定profile
1.配置文件中 spring.profiles.active=dev
2.命令行:测试时候直接配置参数 --spring.profiles.active=dev(program arguments)
3.jvm:-Dspring.profiles.active=dev
配置文件加载位置
spring boot启动会扫描以下位置的application.properties或者application.yml文件作为SpringBoot的默认配置文件
file:./config/
file:./
classpath:/config/
classpath:/
以上是按照优先级别从高到底的顺序,所有位置的文件都会被加载,搞优先级别的内容会覆盖低优先级别配置的内容(不同配置信息互补)
当然我们也可以通过配置spring.config.location来改变默认配置的位置;
这个是当项目打包后, 用命令行参数的形式,启动项目的时候配置,也是和默认位置一起作用,形成互补
能修改哪些配置呢?
在springboot官网上Common application properties的目录下有写
1) springboot启动会加载大量的自动配置类
2) 我们看我们需要的功能有没有SpringBoot默认写好的自动配置类
3)我们在看这个自动配置类中到底配置了哪些组件,(如果有, 就不需要再来配置)
4) 给容器中自动配置类, 添加组价的时候,会从properties类中获取某些属性,我们就可以在配置文件中指定这些属性的值
5)如何判断,有哪些类生效?把application.properties中配置 debug=true 开启springBoot的debug模式,这样我们就可以很方便的知道哪些配置类生效(启动时候在控制台中,看postive matches)