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

在这里插入图片描述

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

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

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

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

目录

  • Spring Boot 配置文件
    • 一. 配置文件作用
    • 二. 配置文件的格式
    • 三. 配置 properties 文件
        • 3.1 properties 基本语法
        • 3.2 读取 properties 文件
        • 3.3 properties 缺点分析
    • 四. 配置 yml 文件
        • 4.1 yml 基本语法
        • 4.2 yml 配置不同数据类型及 null
        • 4.3 yml 的配置读取
        • 4.4 配置 集合
        • 4.5 配置 Map
        • 4.6 yml 优缺点
    • 总结

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
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;}
}
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=falseusername: rootpassword: root
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: ''
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;}
}
4.4 配置 集合

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

dbtypes:name:- mysql- sqlserver- db2

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

	@Component@ConfigurationProperties("dbtypes")@Datapublic class ListConfig {private List<String> name;}

访问集合的实现如下:

@RestController
public class ReadYml2 {@Autowiredprivate ListConfig listConfig;@RequestMapping("/readList")public String readList(){return listConfig.toString();}
}
4.5 配置 Map

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

maptypes:map:k1: kk1k2: kk2k3: kk3

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

@Component
@ConfigurationProperties("maptypes")
@Datapublic class MapConfig {private HashMap<String,String> map;
}

打印类的实现如下:

@RestController
public class ReadYml2 {@Autowiredprivate MapConfig mapConfig;@RequestMapping("/readMap")public String readStudent(){return mapConfig.toString();}
}
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共存,但⼀个项目中建议使用⼀种配置类型文件.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/636947.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java关键字和API

1 this和super关键字 1.this和super的意义 this&#xff1a;当前对象 在构造器和非静态代码块中&#xff0c;表示正在new的对象 在实例方法中&#xff0c;表示调用当前方法的对象 super&#xff1a;引用父类声明的成员 无论是this和super都是和对象有关的。 2.this和sup…

【微服务】spring读取配置文件多种方式深入详解

目录 一、前言 二、java配置文件介绍 2.1 java配置文件产生原因 2.2 项目使用配置文件好处 2.3 springboot项目配置文件的必要性 2.4 微服务架构下配置文件使用场景 三、java读取配置文件常用方法 3.1 使用Properties类读取配置文件 3.1.1 使用getResourceAsStream读取…

C++数组

概述&#xff1a; 所谓数组&#xff0c;就是一个集合&#xff0c;里面存放了相同类型的数据元素。 特点1&#xff1a;数组中的每个数据元素都是相同的类型 特点2&#xff1a;数组是由连续的内存位置组成的 一维数组 一维数组定义的三种方式&#xff1a; 1.数据类型 数组名[数…

前端开发与html学习笔记

一、前端开发概述 前端开发&#xff1a;也叫做web前端开发&#xff0c;它指的是基于web的互联网产品的页面(也可叫界面)开发及功能开发互联网产品&#xff1a;指网站为满足用户需求而创建的用于运营的功能及服务&#xff0c;百度搜索、淘宝、QQ、微博、网易邮箱等都是互联网产…

软件测试如何自我提升

当一个软件测试工程师刚刚进入行业一到三年的时间&#xff0c;他们通常需要掌握一些基本技能和知识&#xff0c;并且需要学习一些新的技术和工具&#xff0c;以便更好地完成自己的测试工作。以下是一些建议&#xff0c;帮助测试工程师在这个阶段提升自己的技能。 掌握基本的测…

边缘计算智能分析网关V4地面垃圾AI检测算法介绍及场景应用

在传统的卫生监管场景中&#xff0c;无法及时发现地面遗留的垃圾&#xff0c;通过人工巡逻的方式需要大量的人力、物力和时间&#xff0c;而且效率不高&#xff0c;并存在一定的滞后性&#xff0c;而采用地面垃圾AI检测算法则可以大大提高监管效率。 TSINGSEE青犀AI智能分析网…

SpringBoot集成Sharding-jdbc水平分表分库

SpringBoot集成Sharding-jdbc水平分表分库 1.水平分表分库2.参数配置2.application.properties 3.代码测试3.1 数据插入 1.水平分表分库 概念在之前写章中&#xff1a;Sharding-JDBC笔记1 2.参数配置 2.application.properties # Server port server.port8080# MyBatis con…

ctfshow web入门 web180--web185

web180 import requests import recom re.compile("admin") def repisTrue(char):url f"http://自己环境的网址/api/?id1%27and%27{char}%27%27{char}&page1&limit10"res requests.get(url)w com.search(res.text)if w is not None:return T…

4.2冰达机器人:视觉实例-机器人视觉循线、视觉实例-调整循线颜色

4.2.10a视觉实例-机器人视觉循线 本节内容演示一个机器人视觉的视觉循线实例 准备工作&#xff1a;布置一块区域作为循线场所&#xff0c;如下图所示。用蓝色胶带在地面贴一条路线&#xff08;机器人极限转弯半径0.5m&#xff0c;不要贴得过于曲折&#xff09;&#xff0c;将…

leetcode8- 二叉树展开为链表

给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链表应该同样使用 TreeNode &#xff0c;其中 right 子指针指向链表中下一个结点&#xff0c;而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同。 示例 1&#xf…

【ETAS CP AUTOSAR工具链】基本概念与开发流程

基于CP AUTOSAR进行控制器软件开发已渐渐成为业界的主流。CP领域中除了VECTOR&#xff0c;ETAS&#xff0c;EB&#xff0c;Mentor等外资公司&#xff0c;还有诸如普华&#xff0c;东软&#xff0c;恒润&#xff0c;华为等国产基础软件公司。 ETAS是在2015年推出的AUTOSAR量产版…

react09 hooks(useState)

react-09 hooks&#xff08;useState&#xff09; hooks组件&#xff08;函数组件动态化&#xff09; 其本质就是函数组件&#xff0c;引用一些hooks方法&#xff0c;用来在函数组件中进行例如状态管理&#xff0c;模拟类组件的生命周期等&#xff0c;只能运用到函数组件中 ho…