SpringBoot系列:2、配置

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值