1、配置文件
Spring Boot使用一个全局的配置文件,额皮质文件名是固定的;
- application.properties
- application.yml
配置文件的作用:修改SpringBoot自动配置的默认值;SpringBoot在底层都给我们自动配置好;
YAML(YAML Ain‘t Markup Language)
YAML A Markup Language:是一个标记语言
YAML isn‘t Markup Language:不是一个标记语言;
标记语言:
以前的配置文件;大多使用的是 xxx.xml文件;
YAML: yml是YAML(YAML Ain‘t Markup Language)语言的文件,以数据为中心,比json、xml等更适合做配置文件,http://www.yaml.org/参考语法规范
YAML:配置示例
1 server: 2 port: 8081
XML:
1 <server> 2 <port>8081</port> 3 </server>
配置文件放在src/main/resources目录或者类路径/config下
全局配置文件的可以对一些默认配置值进行修改
2、YAML语法
1.基本语法
k:(空格)v:表示一对键值对(空格必须有);
以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的
server: port: 8081 path: /hello
属性和值也是大小写敏感;
2.值的写法
字面量:普通的值(数字,字符串,布尔)
k:(空格)v:字面直接来写;
字符串默认不用加上单引号或者双引号
"":双引号;不会转义字符里面的特殊字符串;特殊字符会作为本身想表示的意思
name: "zhangsan \n lisi";输出:zhangsan 换行 lisi
‘‘:单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据
name: "zhangsan \n lisi";输出:zhangsan \n lisi
对象(属性和值)(键值对);
k: v:在下一行来写对象的属性和值的关系;注意缩进
对象还是k: v的方式
1 friends: 2 lastName: zhangsan 3 age: 20
行内写法:
1 friends: {lastName: zhangsan,age: 18}
数组(List,Set)
用- 值标书数组中的一个元素
1 pets: 2 - cat 3 - dog 4 - pig
行内写法
pets: [cat,pig,dog]
3.配置文件值注入
配置文件
1 person: 2 lastName: zhangsan 3 age: 18 4 boss: false 5 birth: 2017/12/12 6 maps: {k1: v1,k2: 12} 7 lists: 8 - lisi 9 - zhaoliu 10 dog: 11 name: 小狗 12 age: 2
javaBean:
1 /** 2 * 将配置文件中配置的每一个属性的值,映射到这个组件中 3 * 4 * @ConfigurationProperties: 告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定; 5 * prefix = "person" :配置文件中哪个下面的所有属性进行一一映射 6 * 7 * 只有这个组件是容器中的组件,才能提供的@ConfigurationProperties功能 8 */ 9 @Component 10 @ConfigurationProperties(prefix = "person") 11 public class Person { 12 13 private String lastName; 14 private Integer age; 15 private Boolean boss; 16 private Date birth; 17 18 private Map<String, Object> maps; 19 private List<Object> lists; 20 private Dog dog;
我们可以导入配置文件处理器,以后编写配置就有提示了
1 <!-- 导入配置文件处理器,配置文件进行绑定就会有提示--> 2 <dependency> 3 <groupId>org.springframework.boot</groupId> 4 <artifactId>spring-boot-configuration-processor</artifactId> 5 <optional>true</optional> 6 </dependency>
properties配置文件在idea中默认utf-8可能会乱码
@Value获取值和@ConfigurationProperties比较
@ConfigurationProperties | @Value | |
功能 | 批量注入配置文件中的属性 | 一个个指定 |
松散绑定(松散语法) | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装 | 支持 | 不支持 |
配置文件yml还是properties他们都能获取到值;
如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value;
如果说,我们专门编写了一个javaBen来和配置文件进行映射,我们就直接使用@ConfigurationProperties;
@PropertySource&@ImportResource
@PropertySource: 加载指定的配置文件
1 /** 2 * 将配置文件中配置的每一个属性的值,映射到这个组件中 3 * 4 * @ConfigurationProperties: 告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定; 5 * prefix = "person" :配置文件中哪个下面的所有属性进行一一映射 6 * 7 * 只有这个组件是容器中的组件,才能提供的@ConfigurationProperties功能 8 * @ConfigurationProperties(prefix = "person")默认从全局配置文件中取值 9 */ 10 @PropertySource(value = {"classpath:person.properties"}) 11 @Component 12 @ConfigurationProperties(prefix = "person") 13 //@Validated 14 public class Person { 15 16 /** 17 * <bean class="Person"> 18 * <property name="lastName" value="字面量/${key}从环境变量、配置文件中获取值/#{SpEl}"></property> 19 * </bean> 20 */ 21 22 //lastName必须是邮箱格式 23 //@Email 24 //@Value("${person.last-name}") 25 private String lastName; 26 //@Value("#{11*2}") 27 private Integer age; 28 //@Value("true") 29 private Boolean boss; 30 private Date birth; 31 32 private Map<String, Object> maps; 33 private List<Object> lists; 34 private Dog dog;
@ImportResource: 导入Spring的配置文件,让配置文件里面的内容生效;
Spring Boot里面没有Spring的配置文件,我们自己编写的配置文件,也不能自动识别;
不来编写Spring的配置文件
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 5 6 <bean id="helloService" class="com.young.springboot.service.HelloService"></bean> 7 8 </beans>
想让Spring的配置文件生效,加载进来;@ImportResource标注在一个配置类上
1 @ImportResource(locations = {"classpath:beans.xml"}) 2 导入Spring的配置文件让其生效
SpringBoot推荐给容器中添加组件的方式;推荐使用全注解的方式
1.配置类=====Spring配置文件
2.使用@Bean给容器中添加组件
1 /** 2 * @Configuration: 指明当前类是一个配置类;就是来替代之前的Spring配置文件 3 * 4 * 在配置文件中<bean></bean>标签添加组件 5 */ 6 @Configuration 7 public class MyAppConfig { 8 9 //将方法的返回值添加到容器中;容器中这个组件默认的id就是方法名 10 @Bean 11 public HelloService helloService(){ 12 System.out.println("配置类@Bean给容器中添加组件了..."); 13 return new HelloService(); 14 } 15 16 }
配置文件占位符
1.随机数
1 ${random.value}、${random.int}、${random.long} 2 ${random.int(10)}、${random.int[1024,65536]}
2.占位符获取之前配置的值,如果没有可以是用:指定默认值
1 person.last-name=张三${random.uuid} 2 person.age=${random.int} 3 person.birth=2017/12/15 4 person.boss=false 5 person.maps.k1=v1 6 person.maps.k2=v2 7 person.lists=a,b,c 8 person.dog.name=${person.hello:hello}_dog 9 person.dog.age=15
Profile
1.多Profile文件
我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml
默认使用application.properties的配置;
2.yml支持多文档块方式
1 server: 2 port: 8081 3 spring: 4 profiles: 5 active: prod 6 --- 7 server: 8 port: 8083 9 spring: 10 profiles: dev 11 --- 12 server: 13 port: 8084 14 spring: 15 profiles: prod #指定属于哪个环境
3.激活指定profile
a.在配置文件中指定 spring.profiles.active=dev
b.命令行:
java -jar spring-boot-02-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev;可以直接在测试的时候;配置传入命令行参数
c.虚拟机参数:
-Dspring.profile.active=dev
配置文件加载位置
springboot启动会扫描以下位置的application.proprties或者application.yml文件作为Spring Boot的默认配置文件
- file:../config/
- file:./
- classpath:/config/
- classpath:/
优先级由高到低,高优先级的配置会覆盖低优先级的配置
SpringBoot会从四个位置全部加载主配置文件;互补配置;
我们还可以通过spring.config.location来改变默认的配置文件位置
项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置,指定配置文件和默认加载的这些配置文件共同其作用形成互补配置
原文地址:https://www.cnblogs.com/yang-young-young/p/9266010.html