• 【Spring】SpringBoot配置文件


    配置文件作用

    计算机上有数以千计的配置⽂件, 我们使⽤的绝⼤多数软件, ⽐如浏览器, 微信, Idea, 甚⾄电脑, ⼿机, 都离不开配置⽂件. 我们可能永远不会直接与其中的⼤部分⽂件打交道,但它们确实以不同的形式散落在我们的计算机上, ⽐如C:\Users, C:\Windows⽂件夹, 以及各种 *.config, *.xml ⽂件

    配置⽂件主要是为了解决硬编码带来的问题, 把可能会发⽣改变的信息, 放在⼀个集中的地⽅, 当我们启动某个程序时, 应⽤程序从配置⽂件中读取数据, 并加载运⾏

    硬编码是将数据直接嵌⼊到程序或其他可执⾏对象的源代码中, 也就是我们常说的"代码写死".
    ⽐如⼿机字体⼤⼩
    如果采⽤硬编码的⽅式, 就直接在程序中指定字体⼤⼩, 所有的⽤⼾使⽤的都是同⼀个字体⼤⼩但是不同的⽤⼾有不同的偏好, 我们可以把⼿机字体的⼤⼩放在配置⽂件中, 当程序启动时, 读取配置, 以⽤⼾设置的字体⼤⼩来显⽰

    SpringBoot配置文件

    SpringBoot⽀持并定义了配置⽂件的格式, 也在另⼀个层⾯达到了规范其他框架集成到SpringBoot的⽬的.

    很多项⽬或者框架的配置信息也放在配置⽂件中, ⽐如:
    • 项⽬的启动端⼝
    • 数据库的连接信息(包含⽤⼾名和密码的设置)
    • 第三⽅系统的调⽤密钥等信息
    • ⽤于发现和定位问题的普通⽇志和异常⽇志等.

    配置文件快速入手

    我们在前⾯讲了Tocmat 默认端⼝号是8080, 所以我们程序访问时的端⼝号也是8080
    但是如果8080端⼝号已经被其他进程使⽤了呢? 我们可以通过配置⽂件来修改服务的端⼝号
    SpringBoot 在创建项⽬时, 就已经帮我们创建了配置⽂件
    在这里插入图片描述
    修改application.properties文件
    在这里插入图片描述
    在这里插入图片描述
    重新启动服务 显示Tomcat启动端口号为9090

    配置文件的格式

    SpringBoot配置文件有以下三种

    • application.properties
    • application.yml
    • application.yaml

    yml为yaml的简写 实际开发中出现的频率最高

    特殊说明

    1. 理论上讲 .properties 和 .yml 可以并存在于⼀个项⽬中,当 .properties 和 .yml并存时,两个配置都会加载. 如果配置⽂件内容有冲突, 则以 .properties 为主, 也就是.properties 优先级更⾼.
    2. 虽然理论上来讲 .properties 可以和 .yml 共存,但实际的业务当中,我们通常会采取⼀种统⼀的配置⽂件格式,这样可以更好的维护(降低故障率)

    properties配置文件说明

    properties配置文件是最早期的配置文件格式,也是创建SpringBoot项目默认的配置文件

    基本语法

    properties 是以键值的形式配置的,key 和 value 之间是以"="连接的,如

    在这里插入图片描述

    读取配置文件

    如果在项目中,想要主动的读取配置文件中的内容,可以使用@Value注解来实现
    @Value注解使用${}的格式读取

    @RestController
    public class PropertiesController {
        @Value("${mykey.key1}")
        private String key1;
    
        @RequestMapping("/key")
        public String key(){
            return "接收到key" + key1;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

    properties缺点分析

    properties 配置是以 key-value 的形式配置的

    在这里插入图片描述
    从上述配置key看出,properties配置文件中会有很多的冗余的信息

    要想解决这个问题,就可以使用yml配置文件的格式化了

    yml配置文件说明

    yml 是 YAML 是缩写,它的全称 Yet Another Markup Language 翻译成中⽂就是“另⼀种标记语⾔.我们先来学习yml的语法

    yml基本语法

    yml 是树形结构的配置⽂件,它的基础语法是"key: value".
    key 和 value 之间使⽤英⽂冒号加空格的⽅式组成,空格不可省略
    基础语法如下:

    在这里插入图片描述

    yml使用进阶

    #字符串
    string.value: hello
    
    #布尔值
    boolean.value: true
    
    #整数
    int.value: 10
    
    #浮点数
    float.value: 3.1415926
    
    #null ~表示null
    null.value: ~
    
    # ""空字符串 直接后面什么都不加就可以了,但是这种方式不直观,更多的表示使用引号括起来
    empty.value: ""
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    yml配置读取

    yml 读取配置的⽅式和 properties 相同,使⽤ @Value 注解即可

    注意事项

    value值加单双引号

    字符串默认不⽤加上单引号或者双引号,如果加英⽂的单双引号可以表⽰特殊的含义。尝试在 application.yml 中配置如下信息
    在这里插入图片描述
    运行结果
    在这里插入图片描述
    从上述结果可以看出

    • 字符串默认不需要加上单引号或者双引号
    • 单引号会转义特殊字符.使其失去特殊功能,始终是一个普通字符
    • 双引号不会转义字符串里面的特殊字符,特殊字符会表示本身的含义

    配置对象

    我们还可以在yml中配置对象

    student:
      id: 1
      name: zhangsan
      age: 10
    
    #或者使用行内写法
    student: {id: 2, name: lisi, age: 20}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    此时就不能用@Value 来读取配置中的对象了, 此时要使用另一个注解@ConfigurationProperties 来读取

    具体实现

    @ConfigurationProperties(prefix = "student")
    @Component
    @Data
    public class Student {
        private int id;
        private String name;
        private int age;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述
    在这里插入图片描述

    配置集合

    配置⽂件也可以配置 list 集合,如下所⽰:

    dbtypes:
      name:
        - mysql
        - sqlserver
        - db2
    
    • 1
    • 2
    • 3
    • 4
    • 5

    集合的读取和对象⼀样,也是使⽤ @ConfigurationProperties 来读取的,具体实现如下:

    @Data
    @ConfigurationProperties(prefix = "dbtypes")
    @Component
    public class ListConfig {
        private List<String> name;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述
    在这里插入图片描述

    配置Map

    配置⽂件也可以配置 map,如下所⽰:

    maptypes:
      map:
        k1: v1
        k2: v2
        k3: v3
        
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    Map的读取和对象⼀样,也是使⽤ @ConfigurationProperties 来读取的,具体实现如下

    @Data
    @Component
    @ConfigurationProperties(prefix = "maptypes")
    public class MapConfig {
        private HashMap<String,String> map ;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述
    在这里插入图片描述

    yml优缺点

    优点

    1. 可读性⾼,写法简单, 易于理解

    2. ⽀持更多的数据类型, 可以简单表达对象, 数组, List,Map等数据形态

    3. ⽀持更多的编程语⾔, 不⽌是Java中可以使⽤, 在Golang, Python, Ruby, JavaScript中也可以使⽤
      缺点

    4. 不适合写复杂的配置⽂件

    5. 对格式有较强的要求

  • 相关阅读:
    火车票识别易语言代码
    律师网站开发实战案例
    ArcGIS标注的各种用法和示例
    mysql多表联查--牛客刷题分享
    最佳实践 | 顶尖咨询公司常用的解决问题工具
    【servelt原理_9_servlet应用___】
    【OpenCV入门】第九部分——模板匹配
    剑指offer 23. 反转链表
    How to understand Statistics vs Machine Learning
    07 - 雷达发射机的主要质量指标
  • 原文地址:https://blog.csdn.net/m0_72670269/article/details/134338247