• 【Spring Boot】掌握Spring Boot:深入解析配置文件的使用与管理


    在这里插入图片描述

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

    💓 博客主页:从零开始的-CodeNinja之路

    ⏩ 收录文章:【Spring Boot】掌握Spring Boot:深入解析配置文件的使用与管理

    🎉欢迎大家点赞👍评论📝收藏⭐文章

    Spring Boot 配置文件

    一. 配置文件作用

    配置文件主要是为了解决硬编码带来的问题,把可能会发生改变的信息,放在⼀个集中的地方,当我们启
    动某个程序时,应用程序从配置文件中读取数据,并加载运行.
    使用配置文件,可以使程序完成用户和应用程序的交互,或者应用程序与其他应用程序的交互

    Spring Boot 配置文件
    SpringBoot支持并定义了配置文件的格式,也在另⼀个层⾯达到了规范其他框架集成到SpringBoot的
    目的.
    很多项目或者框架的配置信息也放在配置文件中,比如:

    • 项目的启动端口
    • 数据库的连接信息(包含用户名和密码的设置)
    • 第三方系统的调用密钥等信息
    • 用于发现和定位问题的普通日志和异常日志等.

    数据库连接信息 为了更方便简单的访问数据库,出现了⼀些持久层框架,其实就是对JDBC进行了更深层次的封装.让用
    ⼾通过简单⼏行代码就可完成数据库的访问.但是不同的应用程序访问的数据库不同,这些持久层框 架就需要⽀持用户可以⾃定义配置数据库的连接信息

    二. 配置文件的格式

    SpringBoot配置文件有以下三种:

    • application.properties
    • application.yml
    • application.yaml
      yml为yaml的简写,实际开发中出现频率最高.yaml和yml的使用方式⼀样
      当应用程序启动时,SpringBoot会⾃动从classpath路径找到并加载application.properties 和 application.yaml 或者 application.yml 文件.

    特别注意:

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

    三. 配置 properties 文件

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

    3.1 properties 基本语法

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

    // 配置项目端口号
    server.port=8080
    
    //配置数据库连接信息
    spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?
    characterEncoding=utf8&useSSL=false
    //配置数据库的用户名
    spring.datasource.username=root
    //配置数据库的密码
    spring.datasource.password=root
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    3.2 读取 properties 文件

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

    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class PropertiesController {
    	@Value("${mykey.key1}")
    	private String key1;
    	
    	@RequestMapping("/key")
    	public String key(){
    		return "读取到值:"+key1;
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    3.3 properties 缺点分析

    properties配置是以key-value的形式配置的,会产生很多的代码冗余,如下图所示:
    在这里插入图片描述
    从上述配置key看出,properties配置文件中会有很多的冗余的信息,比如这些:
    在这里插入图片描述
    所以在使用时,我们大多数会选用yml配置文件,yml配置文件可以很好的解决代码冗余的问题.
    接下来我们来介绍如何去配置yml文件

    四. 配置 yml 文件

    yml是YAML是缩写,它的全称YetAnotherMarkupLanguage翻译成中文就是“另⼀种标记语言.
    我们先来学习yml的语法

    4.1 yml 基本语法

    yml是树形结构的配置文件,它的基础语法是"key:value".
    key和value之间使用英文冒号加空格的方式组成,空格不可省略基础语法如下:
    使用yml连接数据库yml使用示例:

    
    ```cpp
    spring:
    	datasource:
    		url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8&useSSL=false
    		username: root
    		password: root
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    4.2 yml 配置不同数据类型及 null
    // 字符串
    string.value: Hello
    
    // 布尔值,true或false
    boolean.value: true
    boolean.value1: false
    
    // 整数
    int.value: 10
    
    // 浮点数
    float.value: 3.14159
    
    // Null,~代表null
    null.value: ~
    
    // "" 空字符串
    // 直接后⾯什么都不加就可以了, 但这种方式不直观, 更多的表示是使用引号括起来
    empty.value: ''
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    4.3 yml 的配置读取

    yml读取配置的方式和properties相同,使用@Value注解即可,实现代码如下:
    yml配置:

    string:
    hello: Spring Boot
    
    @RestController
    public class ReadYml {
    	@Value("${string.hello}")
    	private String hello;
    	
    	@RequestMapping("/ymlKey")
    	public String key(){
    		return "读取到值:"+hello;
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    4.4 配置 集合

    配置文件也可以配置list集合,如下所示:

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

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

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

    访问集合的实现如下:

    @RestController
    public class ReadYml2 {
    
    	@Autowired
    	private ListConfig listConfig;
    	
    	@RequestMapping("/readList")
    	public String readList(){
    		return listConfig.toString();
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    4.5 配置 Map

    配置文件也可以配置map,如下所示:

    maptypes:
    	map:
    		k1: kk1
    		k2: kk2
    		k3: kk3
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

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

    打印类的实现如下:

    @RestController
    public class ReadYml2 {
    
    	@Autowired
    	private MapConfig mapConfig;
    	
    	@RequestMapping("/readMap")
    	public String readStudent(){
    		return mapConfig.toString();
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    4.6 yml 优缺点

    优点:

    1. 可读性高,写法简单,易于理解
    2. ⽀持更多的数据类型,可以简单表达对象,数组,List,Map等数据形态.
    3. ⽀持更多的编程语言,不⽌是Java中可以使用,在Golang,Python,Ruby,JavaScript中也可以使用
      缺点:
    4. 不适合写复杂的配置文件
    5. 对格式有较强的要求(⼀个空格可能都会引起错误)

    总结

    1. properties是以key=value的形式配置的键值类型的配置文件,yml使用的是树形配置方式.
    2. 读取配置文件内容,使用 @Value 注解,注解内使用" ${} “的格式读取.
    3. yml层级之间使用换行缩进的方式配置,key和value之间使用”:"(英文冒号)加空格的方式设置,并
    且空格不可省略.
    4. properties为早期并且默认的配置文件格式,其配置存在⼀定的冗余数据,使用yml可以很好的解决
    数据冗余的问题,但不适合复杂配置.
    5. yml可以和properties共存,但⼀个项目中建议使用⼀种配置类型文件.

  • 相关阅读:
    PLC设备相关常用英文单词(一)
    游戏引擎中为什么要用四元数表示旋转而不用欧拉角旋转?
    红帽Linux的安装和部署
    Linux查看日志文件写入速度的4种方法
    又是一年开学季,老学长告诉你弯道超车的法则
    网络协议的重要性与应用:理解进程间通信和网络分层结构(上)
    RocketMQ安装使用
    第五章 神经网络
    redis集群模式下key过期时间监听
    【JVM】类加载子系统——自问自答
  • 原文地址:https://blog.csdn.net/smile_sundays/article/details/137992366