• SpringBoot入门教程(二) Spring Boot配置第一章


    一、配置文件

      SpringBoot使用一个全局的配置文件,配置文件名是固定的

    • application.properties
    • application.yml

      配置文件的作用:修改Spring Boot自动配置的默认值;Spring Boot在底层都给我们自动配置好;不满意可以修改

      YAML  ( YAML Ain't a Markup Language)

        YAML A  Markup Language :是一种标记语言;

        YAML isn't a Markup Language :不是一种标记语言;

      标记语言:

        以前的配置文件;大多都使用 xxx.xml 文件

        YAML :以数据为中心,比json、xml等更适合做配置文件;

        YAML配置实例

    server:
      port:8081

         XML

    <server>
        <port>8081</port>
    </server>

    二、YAML语法

    1、基本语法

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

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

    2、值的写法

      (1)、字面量,纯量是最基本的,不可再分的值

      k: v:字面直接来写;

      " ":双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思

          name: "zhangsan lisi"  ;输出:zhangsan 换行 lisi

      ' ' :单引号;会转义字符串里面的特殊字符;特殊字符最终只是个普通的字符串数据

          name: 'zhangsan lisi'  ;输出:zhangsan   lisi

      包括:

    • 字符串
    • 布尔值
    • 整数
    • 浮点数
    • Null
    • 时间
    • 日期

      使用一个例子来快速了解纯量的基本使用:

    boolean: 
        - TRUE  #true,True都可以
        - FALSE  #false,False都可以
    float:
        - 3.14
        - 6.8523015e+5  #可以使用科学计数法
    int:
        - 123
        - 0b1010_0111_0100_1010_1110    #二进制表示
    null:
        nodeName: 'node'
        parent: ~  #使用~表示null
    string:
        - 哈哈
        - 'Hello world'  #可以使用双引号或者单引号包裹特殊字符
        - newline
          newline2    #字符串可以拆成多行,每一行会被转化成一个空格
    date:
        - 2018-02-17    #日期必须使用ISO 8601格式,即yyyy-MM-dd
    datetime: 
        -  2018-02-17T15:02:31+08:00    #时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区

      (2)、对象(属性和值)(键值对)    

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

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

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

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

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

    ?  
        - complexkey1
        - complexkey2
    :
        - complexvalue1
        - complexvalue2

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

      (3)、数组(list.、set)

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

    - A
    - B
    - C

      YAML 支持多维数组,可以使用行内表示:

    key: [value1, value2, ...]

      一个相对复杂的例子:

    companies:
        -
            id: 1
            name: company1
            price: 200W
        -
            id: 2
            name: company2
            price: 500W

      意思是 companies 属性是一个数组,每一个数组元素又是由 id、name、price 三个属性构成。

      数组也可以使用流式(flow)的方式表示:

    companies: [{id: 1,name: company1,price: 200W},{id: 2,name: company2,price: 500W}]

    三、配置文件注入

      配置文件

    person:
      lastname: zhangsan
      age: 18
      boss: false
      birth: 2017/12/12
      maps: {"k1":v1,"k2":v2}
      lists:
        - lisi
        - wangwu
      dog:
        name: 小狗
        age: 2

      javabean

    **
     * 将配置文件中配置的每一个属性值,映射到这个组件中
     * @ConfigurationProperties:告诉Spring Boot将本类中的所有属性和配置文件中相关的配置进行绑定;
     *          prefix = "person" :配置文件中哪个下面的属性进行一一映射
     *
     *  @Component :只有这个组件是容器中的组件,才能使用容器提供的@ConfigurationProperties功能
     */
    @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;

      可以导入配置文件处理器,以后编写配置就有提示了

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

    1、@Value获取值和@ConfigurationProperties获取值比较

      ConfigurationProperties @Value
    功能 批量注入配置文件中的属性 一个个指定
    松散绑定(松散语法) 支持 不支持
    SpEL 不支持

    支持

    JSR303数据检验 支持

    不支持

    复杂类型封装 支持

    不支持

      配置文件yml还是properties他们都能获取到值;

      如果说,我们只是在某个业务逻辑中获取一下配置文件中的某项值,使用@Value;

      如果说,我们专门编写了一个JavaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties(@ConfigurationProperties默认在全局文件中获取值);

      

     2、Properties配置文件编码问题

     

    3、配置文件注入值数据检验

      

    /**
     * 将配置文件中配置的每一个属性值,映射到这个组件中
     * @ConfigurationProperties:告诉Spring Boot将本类中的所有属性和配置文件中相关的配置进行绑定;
     *          prefix = "person" :配置文件中哪个下面的属性进行一一映射
     *
     *  @Component :只有这个组件是容器中的组件,才能使用容器提供的@ConfigurationProperties功能
     */
    @Component
    @ConfigurationProperties(prefix = "person")
    @Validated  //验证注解
    public class Person {
        /**
         *  @Value注解的作用跟bean一样
         * <bean class="Person">
         *     <property name="lastname" value="字面量/${key}从环境配置、配置文件中获取值/#{SpEL}"></property>
         * ></bean>
         */
        //LatName必须是邮箱格式
        @Email
    //    @Value("${person.lastname}")
        private String lastname;
    //    @Value("#{11*2}")
        private Integer age;
    //    @Value("true")
        private Boolean boss;
        private Date birth;

    4、@PropertySource   &&  @ImportResource

      @PropertySource:加载指定的配置文件

    /**
     * 将配置文件中配置的每一个属性值,映射到这个组件中
     * @ConfigurationProperties:告诉Spring Boot将本类中的所有属性和配置文件中相关的配置进行绑定;
     *          prefix = "person" :配置文件中哪个下面的属性进行一一映射
     *
     *  @Component :只有这个组件是容器中的组件,才能使用容器提供的@ConfigurationProperties功能
     */
    @PropertySource(value = {"classpath:person.properties"})
    @Component
    @ConfigurationProperties(prefix = "person")
    @Validated
    public class Person {
        /**
         *  @Value注解的作用跟bean一样
         * <bean class="Person">
         *     <property name="lastname" value="字面量/${key}从环境配置、配置文件中获取值/#{SpEL}"></property>
         * ></bean>
         */
        //LatName必须是邮箱格式
    //    @Email
    //    @Value("${person.lastname}")
        private String lastname;
    //    @Value("#{11*2}")
        private Integer age;
    //    @Value("true")
        private Boolean boss;
        private Date birth;

      @ImportResource:导入Spring的配置文件,让配置文件里面的内容生效;

      SpringBoot里面没有Spring的配置文件,我们自己编写的配置文件,也不能自动识别;

      想让Spring的配置文件生效,加载起来;@ImportResoure标注在一个配置类上

    @ImportResource(locations = {"classpath:beans.xml"})
    导入Spring的配置文件让其生效

      现在不来编写Spring配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
    </beans>

      SpringBoot推荐给容器中添加组件的方式:推荐使用全注解的方式

      1、配置类(现在) ===== Spring的配置文件(之前)

      2、使用@Bean给容器中添加组件

    四、配置文件的占位符

    person.lastname=张三${random.value}
    person.age=${random.int}
    person.birth=2017/12/12
    person.boss=false
    person.maps.k1=v1
    person.maps.k2=v2
    person.lists=a,b,c
    person.dog.name=${person.lastname}_dog
    person.dog.age=2

    五、Profile

      Profile是spring对不同环境提供不同配置功能的支持,可以通过激活、指定参数等方式快速切换环境

      1、多profile文件

        我们在主配置文件编写的时候,文件名可以是  application-{profile}.properties/yml;

        默认使用application.properties

      2、yml支持多文档块方式

    server:
      port: 8081
    spring:
      profiles:
        active: dev
    ---
    server:
      port: 8082
    spring:
      profiles: dev
    
    ---
    server:
      port: 8083
    spring:
      profiles: prod

      3、激活指定profile

        (1)在配置文件中指定  spring.profiles.active=dev

      (2)用命令行的方式启动

          --spring.profiles.active=dev

           第一种方式       可以在测试的时候,配置传入命令行参数

       

      第二种方式   java -jar springboot-02-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod

     

     

     

     

      (3)虚拟机参数

          -Dspring.profiles.active=dev

     

  • 相关阅读:
    spring MVC框架(入门篇)-1
    spring的三种注入方式
    mybitis实现增,删,改,查,模糊查询的两种方式:(2)
    [JavaEE] 20141228_Java类文章搜集
    [JavaEE] Apache Maven 入门篇(下)
    [JavaEE] Apache Maven 入门篇(上)
    [ASP.Net] MVC2,3,4,5的不同
    [JavaEE] Mybatis与Ibatis比较
    [ASP.Net] 转 > ASP.NET MVC 大牛之路
    [ASP.Net] 转 > ASP.NET MVC 小牛之路
  • 原文地址:https://www.cnblogs.com/Ge-Zsj/p/12602147.html
Copyright © 2020-2023  润新知