语法结构 :key=value
server.port=8080语法结构 :
key: valueyml是YAML(YAML Ain’t Markup Language)语言的文件,以数据为中 心,比json、xml等更适合做配置文件。以前的配置文件,大多数都是使用xml来配置;比如一个简单的端口配置,我们来对比下yml和xml;
传统xml配置:
<server> <port>8081<port> </server>yaml配置:(更加简洁,更能凸显出数据)
server: prot: 8080以缩进来控制层级关系,只要是左边对齐的一列数据都是同一个层级的。
属性和值的大小写十分敏感。
缩进时不允许使用Tab键,只允许使用空格,缩进的空格数目不重要。
冒号后面要跟空格来分开键值。
(1) 对象(或Map键值对)
#对象、Map格式 k: v1: v2:对象的属性和值得关系,注意缩进;
student: name: lisi age: 3写成一行:
student: {name: lisi,age: 3}(2)数组(或 List、set )
用 - 值表示数组中的一个元素,比如:
pets: - cat - dog - pig写成一行:
pets: [cat,dog,pig](3)字面量 数字、字符串、布尔、日期
字符串
默认不使用引号可以使用单引号或者双引号,单引号会转义特殊字符“ ” 双引号,不会转义字符串里面的特殊字符 ; 比如 :name: “kuang \n shen” 输出 :kuang 换行 shen'' 单引号,会转义特殊字符 比如 :name: ‘kuang \n shen’ 输出 :kuang \n shen(4)文档分隔 多个文档用- - - 隔开
application.yml:
person: name: lisi age: 3 happy: false birth: 2000/01/01 maps: {k1: v1,k2: v2} lists: - code - girl - music dog: name: 旺财 age: 1配置文件值注入有两种方式@Value和@ConfigurationProperties。
@ConfigurationProperties:将配置文件中配置的每一个属性的值,映射到这个组件中;告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定参数prefix = “person” : 将配置文件中的person下面的所有属性一一对应.
需要导入:
<!-- 导入配置文件处理器,配置文件进行绑定就会有提示,需要重启 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>1)松散绑定: 如果配置文件中person的一个属性为firstName,那么松散绑定也就意味着在使用@ConfigurationProperties注入属性时,以下方式都是等价的:
person.firstName: person.first-name: person.first_name: PERSON_FIRST_NAME:2)SpEL: @Value支持spring的表达式语言:
@Value("#{11*2}") private Integer age;3)JSR303校验 使用@ConfigurationProperties时支持JSR303数据校验,使用@Validated注解
@Component @Validated @ConfigurationProperties(prefix = "person") public class Person { @Email //name必须是邮箱格式 private String name; }4)复杂类型封装
@Component public class Person { @Value("${person.maps}") private Map<String,Object> maps; }对于上面这样,使用@Value注入复杂类型的值,就会报错。
注意:
如果我们专门编写了一个JavaBean来和配置文件进行一一映射,就直接使用@configurationProperties如果只是在应用中需要使用配置文件中的某项值,就直接使用@Value就好了。导入Spring配置文件,并让内容生效。
@SpringBootApplication @ImportResource(locations={"classpath:beans.xml"}) public class HellospringbootApplication { public static void main(String[] args) { SpringApplication.run(HellospringbootApplication.class, args); } }配置文件还可以编写占位符${} 生成随机数,
person: name: lisi${random.uuid} # 随机uuid age: ${random.int} # 随机int happy: false birth: 2000/01/01 maps: {k1: v1,k2: v2} hello: hello lists: - code - girl - music dog: name: ${person.hello:other}_旺财 age: 1name: ${person.hello:other}_旺财:如果person.hello存在则输出:hello对应的值,若不存在则输出othor。这里冒号指定的就是默认值。
Profile是Spring对不同环境提供不同配置功能的支持,可以通过激活、指定参数来快速切换环境。
格式:application-{profile}.properties/yml:
例如:
application-dev.properties //开发环境application-test.properties //测试环境application-prod.properties //生产环境默认使用application.properties中的配置,如果要激活某个环境就需要在默认配置文件application-{profile}.properties/yml 中配置spring.profiles.active=dev
1)在启动时,指定配置文件。
2)-jar的方式运行时指定配置文件
java -jar springBoot.jar --spring.profiles.active=prod1、配置文件的默认加载位置
SpringBoot启动会扫描以下位置的application.properties或者 application.yml文件作为Spring boot的默认配置文件。
file:./config/file:./classpath:/config/classpath:/以上是按照优先级从高到低的顺序,高优先级配置内容会覆盖低优先级配置内容,且各配置文件的内容也会互补(会加载上面位置中所有的配置文件)。 注意:
1、2属于工程包下的配置文件,打jar包时并不会将它们打包进来,jar包文件中只会包含类路径下的配置文件3、4.2、外部配置文件的加载
(1)项目打包好之后,我们也可以通过命令行参数的方式使用spring.config.location来改变默认配置。
java -jar springboot.jar --spring.config.location=C:/application.properties(2)命令行参数:多个参数时,中间可以用空格分开。
java -jar springboot.jar --server.port=8095(3)也可以在jar包外部写配置文件:
jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件jar包外部的application.properties或application.yml(不带spring.profile)配置文件jar包内部的application.properties或application.yml(不带spring.profile)配置文件