springboot配置文件说明

springboot全局配置文件的使用 文件名称是固定的
application.properties: server.port=8888
application.yml
server:
    port:  8888

在我们生成springboot项目时文件都已经配置好了;如果想要修改配置的话就可以在以上文件中进行修改

以前的配置文件大多数使用的是xxxx.xml文件;
YAML文件是以数据为中心的
YAML语法
基本语法
K:(空格)v: 表示一对键值对(空格必须有);
以空格的缩进来控制层级关系;只要是左对齐的一列数据都是同一层级的

server:
		port: 8888
		path: /hello

属性和值也是大小写敏感;

值的写法
字面量:普通的值(数字、字符串、布尔)
k✌️字面直接来写;
字符串默认不用加上单引号或者双引号;
“”:双引号;不会转义字符串里的特殊字符;特殊字符会作为本身想表示的意思
‘’:单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据;
对象、Map(属性和值)(键值对);
k:v:在下一行来写对象的属性和值的关系;注意缩进;
对象还是k:v的方式

  friends:
  			lastName: zhangsan
  			age: 20

行内写法:
friends: {lastName: zhangsan,age: 18}
数组(List、Set)
用-表示数组中的一个元素

  pets:
     - cat
     - dog
     - pig

行内写法:
pets: [cat,dog,pig]

配置文件值注入
配置文件

server:
  port: 8888

person:
    lastName: zhansgan
    age: 19
    boss: false
    brith: 2018/09/09
    maps: {k1: v1,k2: 12}
    list:
      - list
      - zhou
    dog:
      name: 小狗
      age: 2

javaBean

package com.example.springhelloquick.bean;


import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 降配置文件中的每一个属性值映射到 这个组件中
 * @ConfigurationProperties: 告诉springBoot将本类中的所有属性和配置文件中相关的配置进行绑定
 * prefix = "person" 配置文件中哪个下面的所有属性进行一一映射
 * 只有这个组件是容器中的组件,才能为容器提供的@ConfigurationProperties功能
 *
 * @date 2019/4/25 - 20:22
 */
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
    private String lastName;
    private Integer age;
    private Boolean boss;
    private Date brith;

    private Map<String,Object> maps;
    private List<Object> list;
    private Dog dog;

使用@Component将该类注解为spring的管理类,也就是将一个java类注入到spring容器中,这样注入到spring中的其他类就可以使用该类了。详见附录。
使用@ConfigurationProperties(prefix=“person”)将application.yml中的属性注入到Config类中。其中prefix指定了application.yml中属性的前缀,也就是只有这部分指定的属性才会被注入。Config类的成员变量名与各个指定的application.properties属性名一一对应。

我们导入配置文件处理器 编写配置就有提示了
pom.xml文件中添加


org.springframework.boot
spring-boot-configuration-processor
true

数据测试

import com.example.springhelloquick.bean.Person;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class SpringhelloquickApplicationTests {
    	@Autowired
    	Person person;

	@Test
	public void contextLoads() {
		System.out.println(person);
	}

}

最终输出结果
Person{lastName=‘zhansgan’, age=19, boss=false, brith=Sun Sep 09 00:00:00 GMT+08:00 2018, maps={k1=v1, k2=12}, list=[list, zhou], dog=Dog{name=‘小狗’, age=2}}
application.properties
server.port=8888
#ideaʹ默认编码是utf-8 需要在idea的Setting的file encodings中设置配置文件自动转换编码格式才能统一

person.last-name=张三
person.age=12
person.boss=false
person.brith=2019/09/09
person.maps.k1=v1
person.maps.k2=13
person.list=a,c,s,
person.dog.name=dog
person.dog.age=1

@Value和@ConfigurationProperties获取值比较

@ConfigurationProperties @Value
批量注入配置文件中的属性 一个个指定
支持松散语法绑定 不支持松散语法绑定
不支持SpELl 支持SpEL
支持JSR303数据校验 不支持
复杂类型数据的封装 不支持

配置文件不管是yml还是properties都能获取到值
如果我们只是在某个业务逻辑中需要获取一下配置文件中的某项值, 我们就是使用@value
如果专门编写一个Javabean来映射配置文件中的值我就使用@ConfigurationProperties
配置文件注入值数据校验
@Validated数据校验使用注解

@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {
    /**
     * <bean class="Person">
     *      <property name="lastName" value="字面量/${key}从环境变量、配置文件中				获取值/#{key}"></property>
     *  </bean>
     * **/
    //@Value("${person.last-name}")
    @Email
    private String lastName;
    //@Value("#{11*2}")
    private Integer age;
    //@Value("true")
    private Boolean boss;
    private Date brith;

    private Map<String,Object> maps;
    private List<Object> list;
    private Dog dog;

========================未完 待续。。。。。

猜你喜欢

转载自blog.csdn.net/lanselianyu/article/details/89482733