美文网首页
SpringBoot系列:2、配置

SpringBoot系列:2、配置

作者: 程序员小H | 来源:发表于2019-10-17 20:51 被阅读0次

1、配置文件

1.1 配置文件

SpringBoot使用一个全局的配置文件

  • application.properties
  • application.yml
    配置文件的作用:修改SpringBoot自动配置的默认配置

1.2 YAML

  • 标记语言
  • 以数据为中心,比json、xml等更适合做配置文件
1.2.1 基本语法
  • k:(空格)v:表示一对键值对(空格必须有)
  • 以空格的缩进来控制层级关系,只要是左对齐的一列数据,都是同一个层级的
  • 属性和值大小写敏感
server:
  port: 8081
1.2.2 值的写法
  • 字面量:普通的值(数字、字符串、布尔)

    • 字符串不用加上单引号或者双引号
    • “”:双引号,不回转义字符串里面的特殊字符,特殊字符会作为本身想要表示的意思
    name: "aa \n bb"
    输出:aa 换行 bb
    
    • ‘’:单引号,会转义特殊字符,特殊字符最终只是一个普通的字符串数据
    name: 'aa \n bb'
    输出:aa \n bb
    
  • 对象、Map(属性和值)(键值对)

    • k: v 在下一行来写对象的属性和值的关系,注意缩进,对象还是k: v的方式
    person: 
                firstName: zhang
                lastName: san
                age: 24
    行内写法
    person: {firstName: zhang, astName: san, age: 24}
    
  • 数组(List、Set)

    • 用-值表示数组中的一个元素
    animals: 
            - cat
            - dog
            - pig
    行内写法
    animals: [cat, dog, pig]
    

2、读取配置文件

2.1 第一种@ConfigurationProperties 方式

application.yml文件内容

person:
  lastName: xiaoH
  age: 29
  boss: false
  birth: 2019-10-16
  maps: {k1: v1, k2: v2}
  lists:
    - zhangsan
    - lisi
    - wangwu
  dog:
    name: 旺财
    age: 2

Dog.java

public class Dog {

    private String name;
    private Integer age;
      
        // 省略getter和setter方法
}

Person.java

@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方法
}

注意:使用@ConfigurationProperties(prefix = "person")注解,会提示


file

这个不是报错,只是idea提示,在pom文件中引入下面这个jar即可。

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
</dependency>

单元测试类SpringbootConfigApplicationTests.java

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootConfigApplicationTests {

    @Autowired
    Person person;

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

}

运行单元测试类输出:


file

2.2 第三种@Value方式

配置文件不变,
Person.java

@Component
//@ConfigurationProperties(prefix = "person")
public class Person {

    @Value("${person.lastName}")
    private String lastName;

    @Value("#{14*2}")
    private Integer age;

    @Value("true")
    private Boolean boss;
    private Date birth;

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

    // 省略掉getter、setter、toString方法
}

运行单元测试类输出:


file

注意:使用@Value注解需要保证所包含的键名在配置文件中是一定要存在的,否则会报错。比如注释掉配置文件中的lastName属性,然后在执行单元测试,报错如下:


file

解决方式:

@Value("${person.lastName:null}")
    private String lastName;
file

2.3 @ConfigurationProperties与@Value的区别

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

2.4 数据校验

@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {

//    @Value("${person.lastName:null}")
    @Email
    private String lastName;

//    @Value("#{14*2}")
    private Integer age;

//    @Value("true")
    private Boolean boss;
    private Date birth;

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

2.5 @PropertySource

加载指定的配置文件
新建一个person.properties

person.last-name=xiaoH666
person.age=29
person.boss=false
person.birth=2019/11/11
person.maps.k1=v1
person.maps.k2=v2
person.lists=a,s,d
person.dog.name=wangcai
person.dog.age=2

Person.java

@PropertySource(value = "classpath:person.properties")
@Component
@ConfigurationProperties(prefix = "person")
//@Validated
public class Person {

//    @Value("${person.lastName:null}")
//    @Email
    private String lastName;

//    @Value("#{14*2}")
    private Integer age;

//    @Value("true")
    private Boolean boss;
    private Date birth;

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

    // /省略掉getter、setter、toString方法
}

执行单元测试,输出结果


file

3、源码

GitHub:https://github.com/chenjiecg/SpringBoot.git

本文由博客一文多发平台 OpenWrite 发布!

相关文章

网友评论

      本文标题:SpringBoot系列:2、配置

      本文链接:https://www.haomeiwen.com/subject/ebtbmctx.html