• SpringBoot配置文件


    配置文件的作用

    整个项目中重要的数据信息都在配置文件中进行配置:

    • 数据库连接信息(url,用户名,密码)
    • 程序启动端口
    • 用于发现问题和定位问题的项目运行的普通日志和异常日志
    • 第三方系统调用的秘钥

    可以知道我们的配置文件在SpringBoot项目中十分重要,没有配置信息就不能进行数据库连接操作,也缺少了项目排查的日志信息,而且SpringBoot约定大于配置,所以日志信息十分重要!

    配置文件格式

    • .properties
    • .yml
      在这里插入图片描述

    我们的application配置文件也是SpringBoot项目默认的配置文件!
    也是久之前老款的配置文件,而yml配置文件是新款的配置文件,通用性更强!
    同一个项目可以使用这两种格式的配置文件! 但是我们的一般会统一配置格式!还有就是application格式的配置文件优先级更高,当我们一个配置信息在这2个格式的配置文件都进行配置后,application优先!

    properties配置文件

    基本语法

    采用key = val键值对的形式 !
    键和值间通过=连接,
    键值对之间通过换行分割

    # 配置项目端口号
    server.port=8084
    #配置数据库连接信息
    spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8
    spring.datasource.username=root
    spring.datasource.password=root
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    我们properties格式的文件是通过#进行注解信息!

    读取配置文件

    我们在配置文件配置的信息又如何读取呢?
    我们可以通过@Value 注解中的${}输入配置的key值,进行读取操作:
    注意${}需要""包裹:例如: @Value("${server.port}")

    package com.example.demo;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    import javax.annotation.PostConstruct;
    @Component
    public class ReadYML {
        @Value("${server.port}")
        private String port;
        @PostConstruct
        public void postConstruct(){
            System.out.println("Read Properties,port:"+port);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    @PostConstruct注解:这是java提供的注解
    修饰非静态的的void方法,被修饰的方法会在服务器加载Servlet时运行并且只允许一次! 在PostConstruct构造函数之后执行,再init方法之前!
    通常我们会是在Spring框架中使用到@PostConstruct注解
    该注解的方法在整个Bean初始化中的执行顺序:
    Constructor(构造方法) -> @Autowired(依赖注入) -> @PostConstruct(注释的方法)

    在这里插入图片描述

    properties不足之处

    虽然properties是SpringBoot默认的配置格式,并且优先级高!
    但是该格式的配置文件,因为是由=进行建值连接会有很多冗余信息!
    在这里插入图片描述
    还有该配置文件只能用于java项目代码,通用性低

    YML配置文件

    yml全称 YAML (YAML Ain’t a Markup Language)YAML不是一种标记语言,通常以.yml为后缀的文件,是一种直观的能够被电脑识别的数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,一种专门用来写配置文件的语言。. 可用于如: Java,C/C++, Ruby, Python, Perl, C#, PHP等。.
    和其他高级语言类似,可以简单表达数组,列表,等数据形态! 通过空白符号缩进和大量依赖外观特点特别适合用于表达或编辑数据结构,各种配置文件!
    最大优势就是跨语言!

    基本语法

    yml是树形结构的配置文件,基础语法是key: value键和值之前通过:英文冒号和 空格进行连接!冒号后面的空格不能省略!!
    键值对之前通过换行分割!

    #设置项目端口
    server:
      port: 8090
    # 配置数据库连接信息
    spring:
      datasource:
        url: jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8
        username: root
        password: 123456
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    key : value中间的空格不能省略!
    在这里插入图片描述
    如果省略了中间空格IDEA下key值没有语法高亮!!!

    读取配置文件

    package com.example.demo;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    import javax.annotation.PostConstruct;
    @Component
    public class ReadYML {
        @Value("${server.port}")
        private String port;
        @PostConstruct
        public void postConstruct(){
            System.out.println("Read YML,port:"+port);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    yml格式的配置文件读取方式和properties配置文件读取方式是相同的!
    通过@Value("${}")注解读取!
    在这里插入图片描述

    yml配置使用

    • 可以配置不同类型的数据 及null
    # 字符串
    string.value: Hello
    #布尔值 true/false
    boolean.value: true
    # 整数
    int.value: 10
    int.vaule1: 0b1010_0111_1010_1110 # 二进制
    # 浮点数
    float.value: 3.1415
    float.value1: 3.14159e-5 # 科学计数法
    # NUll ~ 代表 null
    null.value: ~
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这里插入图片描述

    字符串默认不用加上单引号或者双引号,如果加英文的单双引号可以表示特殊的含义。

    # 字符串默认不需要引号!
    string:
      str1: Hello \n Spring Boot.
      str2: 'Hello \n Spring Boot.'
      str3: "Hello \n Spring Boot."
    
    • 1
    • 2
    • 3
    • 4
    • 5

    我们进行读取操作!
    在这里插入图片描述

    • 字符串默认不用加上单引号或者双引号
    • 字符串加上单引号后,会转义特殊字符,使该特殊字符变成普通字符!
    • 双引号不会转义特殊字符的含义:就是说换行符会进行换行操作! 而默认不加引号或者加上单引号都会使换行符失去意义!

    yml配置对象

    #方式一:
    student:
      name: 刘备
      age: 18
    #方式二:
    student1: {name: 刘备, age: 18}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    配置的对象不能用@Value注解进行读取
    要通过@ConfigurationProperties(prefix="keyname")注解进行读取!

    package com.example.demo;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
    //通过这个注解将配置文件中的student对象信息初始化给实例Student注册到spring中!
    //读取对象配置需要重写setter和getter方法才能读取到,否则无用!
    @ConfigurationProperties(prefix = "student")
    @Component
    public class Student {
        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 "Student{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    @Component
    public class ReadYML {
        @Autowired //注入对象
        private Student student;
        @PostConstruct
        public void postConstruct(){
            System.out.println(student);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述
    注意:

    只有实现了getter和setter方法读取对象配置才能生效否则没用

    配置集合

    # 配置集合List
    dbtypes:
      name:
        - mysql
        - sqlserver
        - db2
    
    #行内写法
    dbtypes1: {name: [mysql,sqlserve,db2]}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    集合的读取方式和对象一样也是通过@ConfigurationProperties(prefix="")注解进行读取配置操作!

    package com.example.demo;
    import lombok.Data;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
    
    import java.util.List;
    @ConfigurationProperties(prefix = "dbtypes")
    @Component
    @Data //重写geter和setter方法
    public class ListConfig {
       private List<String> name;//这里名字要和配置文件key对应否则失败!
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

    properties配置和yml配置比较

    • .properties是以key=value键值对的形式配置文件, .yml还是树形结构的形式进行配置文件key value之前,通过: 加上空格设置空格不能省略!
    • properties为早期并且默认的配置格式,优先级比yml高,但是配置存在一定的冗余
    • yml通用性好,支持多语言配置文件如;java,python,golang等,如果是云服务开发,一份配置文件可以用于不同语言的代码!
    • yml虽然和properties共存,但是一般建议一个项目中使用统一格式的配置文件
  • 相关阅读:
    Spring:AOP通知获取数据(13)
    D-Word
    代码随想录训练营第37天|LeetCode 738.单调递增的数字、714. 买卖股票的最佳时机含手续费、 968.监控二叉树
    腾讯云~Redis 伪分布式集群搭建2022版本+密码(linux环境)
    Challenges and Applications of Large Language Models
    Flutter快学快用06 有无状态组件:如何巧妙地应用 Flutter 有无状态组件
    卷积神经网络基础
    5 分钟学会ECharts如何使用
    ERP系统中有采购管理模块,为什么企业要选择供应商管理SRM系统?
    第64步 深度学习图像识别:多分类建模误判病例分析(Pytorch)
  • 原文地址:https://blog.csdn.net/weixin_52345071/article/details/126693851