第二章,springboot 配置,yaml 语法[通俗易懂]

第二章,springboot 配置,yaml 语法[通俗易懂]第二章,springboot 配置,yaml 语法

大家好,又见面了,我是你们的朋友全栈君。

一,springboot配置文件:

第二章,springboot 配置,yaml 语法[通俗易懂]

首先看上图,我们在使用spring initializer快速创建一个项目的后,会自动生成上面的资源文件夹,••••••••

1,static

    (1) 配置文件,

        springboot使用一个全局的配置文件,配置文件名是固定的,有两种格式:

        · application.properties

       · application.yml

   (2)配置文件的作用:修改springboot默认的配置,因为我们可能不满意springboot自动给我们设置的一些东西。

   这里需要说一个名词:yml是YAML(先理解成是一个标记语言)语言的语言文件,以数据为中心,比json、xml更适合做配置文件,也就是要用yml替代以前用的xml文件了。

这里我们做实验,修改项目启动的服务器端口:

第二章,springboot 配置,yaml 语法[通俗易懂]

和:

第二章,springboot 配置,yaml 语法[通俗易懂]

看到上面的区别了吧,yml文件有会自动分层,非常简洁,而如果是xml,大量的数据都浪费在了标签上。所以说yml是以“数据为中心”。

最后重新启动就可以,看到端口号会有改变了。
 

 


二,yaml 语法       

(1)k: (空格)v  :表示一个键值对,空格必须有

以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的。

server:
  port: 8081
  path: /hello

另:大小写敏感

(2)值得写法

字面量:普通的值(数字,字符串,布尔)

          字符串不用加上单引号或双引号

         “”:双引号,不会转义字符串里面的特殊字符,特殊字符会作为本身想表达的意思

           如:       name:“zhangsan\nlisi”   就会输出:zhangsan 换号 lisi

        ”:单引号,会转义特殊字符,特殊字符就是普通的字符串数据

            如:       name:’zhangsan\nlisi’   就会输出:zhangsan\nlisi

 

对象,Map(数学和值)(键值对)

   k:v

   如:friends对象

    friends:

            name: xiaoming

             age: 20

     也可以写成行内写法:如friends: (name: xiaoming,age: 20)    (注意空格)

数组(list、set)

     用值表示数组中元素的一个

    如  pets集合: 

        pets:

               - cat

               - dog

              - cat

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


三:yaml 语法测试

(1)创建两个实体类 (idea ,alt+insert 快捷键生成get,set方法):

第二章,springboot 配置,yaml 语法[通俗易懂]

dog.java:

package com.example.springboot.bean;

public class Dog {

    private String name;

    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Dog{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

person.java

package com.example.springboot.bean;

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

public class Person {

    private String name;
    private Integer age;

    private Date date;

    private Dog dog;

    private Map<String,Object> maps;

    private List<Object> lists;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    public Dog getDog() {
        return dog;
    }

    public void setDog(Dog dog) {
        this.dog = dog;
    }

    public Map<String, Object> getMaps() {
        return maps;
    }

    public void setMaps(Map<String, Object> maps) {
        this.maps = maps;
    }

    public List<Object> getLists() {
        return lists;
    }

    public void setLists(List<Object> lists) {
        this.lists = lists;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", date=" + date +
                ", dog=" + dog +
                ", maps=" + maps +
                ", lists=" + lists +
                '}';
    }
}

(2)然后在application.yml配置文件中加入以下内容:

server:
  port: 8081
  path: /hello

person:
    name: zhangsan
    age: 20
    date: 2019/02/29
    maps: {k1: v1,k2: v2}
    lists:
      - lisi
      - zhaoliu
    dog:
      name: xiaogou
      age: 2

第二章,springboot 配置,yaml 语法[通俗易懂]

(3)然后创建测试类

第二章,springboot 配置,yaml 语法[通俗易懂]

在这个目录下,有自动创建好的测试类,我做如下修改:

package com.example.springboot;

import com.example.springboot.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;
/**
 * springboot的单元测试
  *可以在测试期间很方便的类似编码一样进行注入
 *
 *
 */
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBoot01HelloworldQuickApplicationTests {

    @Autowired  //注入放入容器中的person类
    Person person;
    @Test
    public void contextLoads() {
        System.out.println(person);  //sout 快速打出输出语句
    }

}

上面需要把Person类注入到springboot容器中,因此要在Person.java做如下修改:

package com.example.springboot.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  将配置文件中配置的每个属性的值,映射到配置文件中
 * prefix = "person"  前缀,配置文件中哪个下面的所有属性进行一一映射
 *
 * 这个组件必须在容器中才能使用容器提供的ConfigurationProperties功能,所以最后再加上@Component
 */
@Component
@ConfigurationProperties(prefix = "person")
public class Person {

    private String name;
    private Integer age;

    private Date date;

    private Dog dog;

    private Map<String,Object> maps;

    private List<Object> lists;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    public Dog getDog() {
        return dog;
    }

    public void setDog(Dog dog) {
        this.dog = dog;
    }

    public Map<String, Object> getMaps() {
        return maps;
    }

    public void setMaps(Map<String, Object> maps) {
        this.maps = maps;
    }

    public List<Object> getLists() {
        return lists;
    }

    public void setLists(List<Object> lists) {
        this.lists = lists;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", date=" + date +
                ", dog=" + dog +
                ", maps=" + maps +
                ", lists=" + lists +
                '}';
    }
}

这里@ConfigurationProperties会有警告提示,需要我们在pom文件的属性中增加jar包依赖:

  <!-- 导入配置文件处理器,配置文件进行导入就会有提示-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

(4)然后就可以运行测试类了:

点击下图位置:

第二章,springboot 配置,yaml 语法[通俗易懂]

最后控制台就会打印出我们在yml文件中设置的属性值了:

第二章,springboot 配置,yaml 语法[通俗易懂]


四,在properties中配置

注释掉在yml中的配置。

第二章,springboot 配置,yaml 语法[通俗易懂]

然后在application.properties 中加入以下内容(ctrl+R 替换快捷键):

server.port=8089

person.name=zhangsan
person.age= 20
person.date= 2019/02/29
person.maps.k1= 13
person.maps.k2=  34
person.lists=lisi,zhaoliu,v

person.dog.name= 小狗
person.dog.age= 2

运行测试类,在控制台中显示如下:

第二章,springboot 配置,yaml 语法[通俗易懂]

也能打印出来我们的值,但是发现汉字乱码了。

这里设置下idea的系统编码:

第二章,springboot 配置,yaml 语法[通俗易懂]

server.port=8089

#需要在idea中setting设置编码为utf-8
person.name=zhangsan
person.age= 20
person.date= 2019/02/29
person.maps.k1= 13
person.maps.k2=  34
person.lists=lisi,zhaoliu,v

person.dog.name= 小狗
person.dog.age= 2

然后运行,就不会乱码了:

第二章,springboot 配置,yaml 语法[通俗易懂]

 


五,不使用 @ConfigurationProperties注解,也可以调用properties中的值

Person.java类如下:

package com.example.springboot.bean;

import org.springframework.beans.factory.annotation.Value;
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  将配置文件中配置的每个属性的值,映射到配置文件中
 * prefix = "person"  前缀,配置文件中哪个下面的所有属性进行一一映射
 *
 * 这个组件必须在容器中才能使用容器提供的ConfigurationProperties功能,所以再加上@Component
 */
@Component
//@ConfigurationProperties(prefix = "person")
public class Person {

    @Value("${person.name}")
    private String name;
    @Value("#{11*2}")
    private Integer age;

    private Date date;
    private Dog dog;

    private Map<String,Object> maps;

    private List<Object> lists;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    public Dog getDog() {
        return dog;
    }

    public void setDog(Dog dog) {
        this.dog = dog;
    }

    public Map<String, Object> getMaps() {
        return maps;
    }

    public void setMaps(Map<String, Object> maps) {
        this.maps = maps;
    }

    public List<Object> getLists() {
        return lists;
    }

    public void setLists(List<Object> lists) {
        this.lists = lists;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", date=" + date +
                ", dog=" + dog +
                ", maps=" + maps +
                ", lists=" + lists +
                '}';
    }
}

运行,有以下结果:

第二章,springboot 配置,yaml 语法[通俗易懂]

此外,相对于@Value方式,@ConfigurationProperties,还能够加校验:

package com.example.springboot.bean;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;

import javax.validation.constraints.Email;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @ConfigurationProperties  将配置文件中配置的每个属性的值,映射到配置文件中
 * prefix = "person"  前缀,配置文件中哪个下面的所有属性进行一一映射
 *
 * 这个组件必须在容器中才能使用容器提供的ConfigurationProperties功能,所以再加上@Component
 */
@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {

//    @Value("${person.name}")
    @Email
    private String name;
//    @Value("#{11*2}")
    private Integer age;

    private Date date;
    private Dog dog;

    private Map<String,Object> maps;

    private List<Object> lists;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    public Dog getDog() {
        return dog;
    }

    public void setDog(Dog dog) {
        this.dog = dog;
    }

    public Map<String, Object> getMaps() {
        return maps;
    }

    public void setMaps(Map<String, Object> maps) {
        this.maps = maps;
    }

    public List<Object> getLists() {
        return lists;
    }

    public void setLists(List<Object> lists) {
        this.lists = lists;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", date=" + date +
                ", dog=" + dog +
                ", maps=" + maps +
                ", lists=" + lists +
                '}';
    }
}

再者,@Value不支持复杂类型的注解,即如果在Dog对象上加如下:

@Value(${person.dog})
private Dog dog;

运行测试类时就会报错。

 


 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/106000.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • MySQL数据库:常见经典SQL语句

    MySQL数据库:常见经典SQL语句

  • 贴片电阻查询_贴片电阻的封装是什么

    贴片电阻查询_贴片电阻的封装是什么随着新技术的不断发展,目前电阻的种类有很多种,常见的有:薄膜和厚膜电阻(贴片电阻)、金属膜电阻、碳膜电阻、绕线电阻等。其中,贴片电阻器又可分为低阻值贴片电阻器,贴片电阻器阵列,贴片网络电阻器等。贴片电阻器的封装和尺寸的关系(长,宽,高)0201封装电阻对应的尺寸大小为(0.6,0.3,0.23),0402封装电阻对应的尺寸大小为(1.0,0.5,0.3),0603封装电阻对应的尺寸大小为(1.6,0.8,0.4),0805封装电阻对应的尺寸大小为(2.0,1.25,0.5),1206封装电阻对应的尺寸.

  • 使用AnalyticDB MySQL创建数据库及表过程

    使用AnalyticDB MySQL创建数据库及表过程简介目标是让云上数据仓库用户及开发者通过简单的步骤体验基于AnalyticDBMySQL版和DMS构建云原生数据仓库的主要流程,场景将通过实例的开通、结构与数据的初始化、报表的开发、报表可视化等环节,用3个具体的应用场景来体验AnalyticDBMySQL版在新零售场景下的交互查询和ETL计算速度,以及通过DMS进行数据仓库数据报表开发的流程。提供的数据集是一个零售场景的模拟数据,包括客户信息、订单记录、货物信息、国家地域信息等内容,数据总量10GB,最大数据表记录数为5999万条。产品简介云原

  • modbus协议讲解及实现_通俗易懂近义词

    modbus协议讲解及实现_通俗易懂近义词什么是协议在了解什么是Modbus之前,我们先来看下什么是协议协议是一个汉语词汇,读音为xiéyì,意思是共同计议,协商;经过谈判、协商而制定的共同承认、共同遵守的文件。简单地说,在我们的单片机之间互相通信,以及单片机和上位机通信中,规定了不同的内容规范,这个规范是通信的双方都需要遵守的,这样就可以实现两者的通信。而这个协议规范可以有很多种,来适应不同的设备以及通信要求等,我们常见的就有IICSPIUART串口通信协议等等。而Modbus也是一个串行通信协议。什么是RS-485RS-2

  • java绘图板

    java绘图板

  • 博客背景图片一览_博客主页

    博客背景图片一览_博客主页绝地求生:部落冲突:星球大战:前线

    2022年10月12日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号