SpringBoot学习:yaml配置

1、前言

在之前的ssm框架的学习中,我们一般使用xml以及properties进行配置,可以很方便的配置资源。在SpringBoot的学习中,我们还将会学习到另外一种配置方式,那就是使用yaml进行配置。

2、几种配置方式的区别

xml配置

xml的配置方式使用相当广泛。在原生的JavaWeb阶段,我们用来配置web.xml,在ssm框架的学习中,我们用来配置mybatis-config.xml,Mapper.xml,applicationContext.xml,在Maven,Tomcat…我们随处可以看到xml配置的身影。

xml配置主要是应用语义化的标签,就像下面那样:

<server>
	<port>8080port>
server>

properties配置

properties的配置形式为:

   key=value

之前经常使用properties配置数据库的连接信息,如下:

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatisdatabase?useSSL=true&useUnicode=true&characterEncoding=utf8
username=root
password=0925

yaml配置

yaml配置端口号

server:
  port: 8080

properties不适合配置对象的初始化信息,而yaml在这方面做的比较优秀。

3、 yaml概述

在SpringBoot中,我们可以使用yamlproperties进行配置,而yaml又是SpringBoot推荐的一种配置方式,下面我们来简单了解一下yaml

3.1、yaml简介

YAML 是 “YAML Ain’t a Markup Language”(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言)。

YAML 的语法和其他高级语言类似,并且可以简单表达清单、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件、倾印调试内容、文件大纲(例如:许多电子邮件标题格式和YAML非常接近)。

3.2、yaml基本语法

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进不允许使用tab,只允许空格
  • 缩进的空格数不重要,只要相同层级的元素左对齐即可
  • '#'表示注释

3.3、yaml配置示例

配置普通的值【数字,布尔值,字符串,日期等】

name: zhangsan
age: 18
happy: true

配置数组

以 - 开头的行表示构成一个数组:

nums:
  - 1
  - 2
  - 3

也可以写作:

nums: [1,2,3]

补充,由于Java的List底层实现机制是数组,所以List也可以用这种方式进行配置。

list:
  - cat
  - dog

配置对象与Map

对象键值对使用冒号结构表示 key: value,冒号后面要加一个空格。

也可以使用 key: {key1: value1, key2: value2, ...}

还可以使用缩进表示层级关系;

key: 
    child-key: value
    child-key2: value2

较为复杂的对象格式,可以使用问号加一个空格代表一个复杂的 key,配合一个冒号加一个空格代表一个 value:

?  
    - complexkey1
    - complexkey2
:
    - complexvalue1
    - complexvalue2

意思即对象的属性是一个数组 [complexkey1,complexkey2],对应的值也是一个数组 [complexvalue1,complexvalue2]

4、yaml配置注入

下面我们来写个小案例,在SpringBoot中实现由yaml注入配置。

新建两个类

@Component
@Data
@NoArgsConstructor
@AllArgsConstructor
@ConfigurationProperties(prefix = "person")
//声明由yaml进行配置 prefixde值要与yaml中的一致
public class Person {
    
    private String name;
    private int age;
    private Date birth;
    private Map<String, Object> map;
    private List<Object> list;
    private Dog dog;
}
@Component
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Dog {
    private String name;
    private int age;
}

编写yaml

在SpringBoot中,配置文件名统一为application,再加上后缀。

person:
  name: zhangsan
  age: 19
  map: {like: java, lan: java}
  list:
    - cat
    - dog
  birth: 2002/09/25
  dog:
    name: 旺财
    age: 18

使用SpringBoot的测试类进行测试

@SpringBootTest
class HelloWorldApplicationTests {

    @Autowired
    private Person person;

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

}

运行结果:
在这里插入图片描述

可以看到我们的值注入成功了。

注意:

  • 使用@ConfigurationProperties(prefix = "person")注解来引入配置
  • LomBok可以很方便的帮我们生成get、set、toString、无参有参构造方法。
  • 如果person的值为null,有可能是因为·person·没有进行自动装配,因为SpringBoot毕竟是基于Spring的,我们使用了@Component注解表明当前类是一个bean,经过@Autowired自动装配才能实现类中属性的初始化。

5、总结

希望大家在SpringBoot的学习中,能够多使用yaml这种推荐的配置方式。

你可能感兴趣的:(Java,java,springboot,yaml配置)