一、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
;
}
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 {
@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环境@ConditionalOnJndiJNDI存在指定项
九、自动配置报告
自动配置类必须在一定的条件下才能生效在properties配置文件中配置debug=true来让控制台打印自动配置报告