1.配置文件
SpringBoot使用一个全局的配置文件,配置文件名是固定的;
- application.properties
- application.yml
配置文件的作用:修改SpringBoot的自动配置的默认值;SpringBoot在底层都给我们自动配置好;
YAML 是一个标记语言;不是一个标记语言;
标记语言:以前的配置文件;大多使用的是xxx.xml文件;
YAML 以数据为中心
YAML: server: port: 8081 XML: <server> <port>8081</port> </server>
2.YAML语法
1、基本语法
k: v;表示一堆键值对(空格必须有);
以空格的缩进来控制层级关系;只要是左对齐的一列数据都是同一层级的;
server: port: 8081 path: /hello
属性和值也是大小写敏感;
2、值的写法
字面量:普通的值(数字、字符串、布尔)
k: v:字面直接来写;
字符串默认不用加上单引号或者双引号
"":双引号;不会转移字符串里面的特殊字符;特殊字符会作为本身想表示的意思
name:“zhangsan
lisi”:输出:zhangsan 换行lisi
'':单引号;会转义特殊字符,特殊字符最终只是一个 普通的字符串数据
name:'zhangsan
lisi':输出;zhangsan
lisi
对象、Map(属性和值)(键值对):
k: v:在下一行来写对象的值的关系;注意缩进
对象 还是k: 的方式
friends: lastName:zhangsan age:20
行内写法:
friends:{lastName:zhangsan,age:18}
数组(List、Set):
用 - 值表示数组的一个元素
pets: - cate - dog - pig
行内写法
pets:[cat,dog,pig]
3、配置文件值注入
配置文件
Person: lastName: zhangsan age: 18 boss: false birth: 2017/12/12 maps: {k1: v1,k2: 12} lists: - lisi - zhaoliu dog: name: 小狗 age: 12
javaBean:
/** * 将配置文件中的每一个属性的值,映射到这个组件中 * @ConfigurationProperties:给SpringBoot说将本类中的所有属性和配置文件中的配置进行绑定; * prefix="person":配置文件中哪个下面的所有属性进行一一映射 * 只有这个组件是容器中的组件,才能是容器提供的功能; */ @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;
我们可以导入配置文件处理器,以后编写配置就有提示了
<!--导入配置文件处理器,配置文件进行绑定就会提示-->
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
4、特殊字符处理
5.@Value获取值和@ConfigurationProperties获取值比较
配置文件yml还是properties他们都能获取到值;
如果说我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value
如果说,我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProerties
6.配置文件注入值数据校验
@Component @ConfigurationProperties(prefix = "person") @Validated public class Person { /** * <bean class="Person"> * <property name="lastName" value="字面量/${key}从环境变量、配置文件中获取值/#{SPEL}"></property> * </bean> */ //lastName必须是邮箱格式 // @Email // @Value("${person.last-name}") private String lastName; // @Value("#{11*2}") private Integer age; // @Value("true") private Boolean boss; private Date birth; private Map<String,Object> maps; private List<Object> lists; private dog dog;
7、@PropertySource&@ImportResource
@ProertySource:加载指定的配置文件;
/** * 将配置文件中的每一个属性的值,映射到这个组件中 * @ConfigurationProperties:给SpringBoot说将本类中的所有属性和配置文件中的配置进行绑定; * prefix="person":配置文件中哪个下面的所有属性进行一一映射 * 只有这个组件是容器中的组件,才能是容器提供的功能; * @ConfigonProperties(prefix = "person")默认从全局配置文件中获取值 */ @PropertySource(value={"classpath:person.properties"}) @Component //@ConfigurationProperties(prefix = "person") //@Validated public class Person { /** * <bean class="Person"> * <property name="lastName" value="字面量/${key}从环境变量、配置文件中获取值/#{SPEL}"></property> * </bean> */ //lastName必须是邮箱格式 // @Email // @Value("${person.last-name}") private String lastName; // @Value("#{11*2}") private Integer age; // @Value("true") private Boolean boss; private Date birth; // @Value("${person.maps}") private Map<String,Object> maps; private List<Object> lists; private dog dog;
@ImportResource:导入Spring的配置文件,让配置文件里面的内容生效;
SpringBoot里面没有Spring的配置文件,我们自己编写的配置文件,也不能自动识别;
想让Spring的配置文件生效,加载进来;@ImportResource标注在一个配置类上
@ImportResource(locations = {"classpath:beans.xml"})导入Spring的配置文件,让其生效
不来编写Spring的配置文件
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="helloService" class="com.portalkjt.springboot.Service.HelloService"> </bean> </beans>
SpringBoot推荐给容器中添加组件的方式;推荐使用全注解的方式
1、配置类-----Spring配置文件
2、使用@Bean给容器中添加组件
1 /** 2 * @Configuration指定当前类是一个配置类,就是替代之前的Spring配置文件 3 * 在配置文件中用<bean></bean>标签来添加组件 4 */ 5 @Configuration 6 public class MyAppConfig { 7 //将方法的返回值添加到容器中:容器的这个组件默认的id就是方法名 8 @Bean 9 public HelloService helloService02(){ 10 System.out.println("配置类@Bean给容器中添加组件了"); 11 return new HelloService(); 12 } 13 }
8、配置文件占位符
1、随机数
2、占位符获取之前配置的值,如果没有可以使用:指定默认的值
person.lastName=张三${random.uuid} person.age=${random.int} person.birth=2017/12/15 person.boss=false person.maps.k1=v1 person.maps.k2=14 person.lists=a,b,c person.dog.name=${person.hello:hello}_dog person.dog.age=15