一、yaml语法
- 基本语法
K: V
,:
后必须跟一个空格;
通过空格缩进来控制层级server: port: 8081 path: /hello
- 字面量写法
字符串默认不用加上单引号或者双引号;
""
:双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
name: "zhangsan \n lisi" 输出;zhangsan 换行 lisi
''
:单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据
name: 'zhangsan \n lisi' 输出;zhangsan \n lisi
- 对象、Map写法
friends: lastname: zhangsan age: 39 --------------- #行内写法 friends: { lastname: zhangsan, age: 39}
- 数组、List、Set写法
pets: - cat - dog - pig ---------------- # 行内写法 pets: [cat, dog, pig]
二、配置文件值注入
- 现在pom文件里导入依赖,在配置文件显示提示
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
- 编写JavaBean
@Component @ConfigurationProperties(prefix = "person") public class Person { private String lastName; private Integer age; private Boolean boss; private Date birth; private Map<String,Object> maps; private List<Object> lists; private Dog dog; //Getter、Setter方法 }
- yaml配置文件赋值
person: lastName: hello age: 18 boss: false birth: 2017/12/12 maps: { k1: v1,k2: 12} lists: - lisi - zhaoliu dog: name: 小狗 age: 12
@ConfigurationProperties(prefix = "person")
的作用是将配置文件中配置的属性和这个组件中的属性进行映射,因此必须加上@Component
将该组件注入到容器中- properties配置文件中文乱码
三、@PropertySource、@ImportResource
@PropertySource
:加载指定的配置文件
@PropertySource(value = {"classpath:person.properties"})
@ImportResource
:SpringBoot中没有Spring配置文件,需要导入
@ImportResource(locations = {"classpath:beans.xml"})
- SpringBoot推荐的给容器中添加组件的方式:全注解
用配置类来代替配置文件@Configuration public class MyAppConfig { //将方法的返回值添加到容器中;容器中这个组件默认的id就是方法名 @Bean public HelloService helloService(){ return new HelloService(); } }
四、配置文件占位符
- 随机数
- 获取之前的值
user.name = zhangsan user.info = ${user.name}_18
- 如果没有可以指定
person.dog.name=${person.hello:hello}_dog
五、Profile
- 可以写多个主配置文件:
application-{profile}.properties/yml
,默认使用application.properties
的配置,也可以在application.properties
中指定server.port=8080 spring.profiles.active=dev
2. yaml支持多文档块
server:
port: 8081
spring:
profiles:
active: prod
---
server:
port: 8083
spring:
profiles: dev
---
server:
port: 8084
spring:
profiles: prod #指定属于哪个环境
六、配置文件加载位置
springboot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件
–file:./config/
–file:./
–classpath:/config/
–classpath:/
优先级由高到低,高优先级的配置会覆盖低优先级的配置;
SpringBoot会从这四个位置全部加载主配置文件;互补配置;
七、自动配置
- SpringBoot启动会加载大量的自动配置类
- 看我们需要的功能有没有SpringBoot默认写好的自动配置类
- 看这个自动配置类中到底配置了哪些组件(只要我们要用的组件有,我们就不需要再来配置了)
- 给容器中自动配置类添加组件的时候,会从properties类中获取某些属性。我们就可以在配置文件中指定这些属性的值
八、@Conditional派生注解
作用:必须是@Conditional指定的条件成立,才给容器中添加组件,配置配里面的所有内容才生效
@Conditional扩展注解 | 作用(判断是否满足当前指定条件) |
---|---|
@ConditionalOnJava | 系统的java版本是否符合要求 |
@ConditionalOnBean | 容器中存在指定Bean; |
@ConditionalOnMissingBean | 容器中不存在指定Bean; |
@ConditionalOnExpression | 满足SpEL表达式指定 |
@ConditionalOnClass | 系统中有指定的类 |
@ConditionalOnMissingClass | 系统中没有指定的类 |
@ConditionalOnSingleCandidate | 容器中只有一个指定的Bean,或者这个Bean是首选Bean |
@ConditionalOnProperty | 系统中指定的属性是否有指定的值 |
@ConditionalOnResource | 类路径下是否存在指定资源文件 |
@ConditionalOnWebApplication | 当前是web环境 |
@ConditionalOnNotWebApplication | 当前不是web环境 |
@ConditionalOnJndi | JNDI存在指定项 |
九、自动配置报告
- 自动配置类必须在一定的条件下才能生效
- 在properties配置文件中配置
debug=true
来让控制台打印自动配置报告