【Spring Boot】Spring Boot配置文件详情

news2025/1/11 6:09:03

前言

 Spring Boot是一个开源的Java框架,用于快速构建应用程序和微服务。它基于Spring Framework,通过自动化配置和约定优于配置的方式,使开发人员可以更快地启动和运行应用程序。Spring Boot提供了许多开箱即用的功能和插件,包括嵌入式Web服务器、安全性、数据访问、缓存、测试和监控等,极大地简化了开发人员的工作。同时,Spring Boot还提供了可扩展性和可定制性,让开发人员可以根据特定的需求完全自定义应用程序。本文就 SpringBoot 项目中配置文件的作用以及两种不同形式的配置文件的使用分别进行阐述。
表情包01


文章目录

  • 前言
  • 1 配置文件
  • 2 为什么需要配置文件?
  • 3 properties 格式的配置文件
  • 4 yml 格式的配置文件
    • 4.1 yml 基本语法
    • 4.2 yml 配置不同类型及null
    • 4.3 使用 yml 配置对象
    • 4.4 使用 yml 配置集合
  • 写在最后


1 配置文件

配置文件是一种存储应用程序配置信息的文件,它包含了应用程序所需要的各种参数、选项和设置。
配置

2 为什么需要配置文件?

Spring Boot 配置文件是一个特殊的文件,用来配置 Spring Boot 应用程序的行为。在 Spring Boot 应用程序中,可以使用多种配置文件格式,包括 properties、YAML、XML 等。配置文件通常包含应用程序的参数、数据库连接等信息,可以让应用程序在不同的环境中运行,例如开发、测试、生产等环境。

项目中重要的信息都是在配置文件中去设置的,例如:

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

配置文件的作用在于:

  1. 灵活性:通过配置文件,用户可以根据自己的需求来修改应用程序的参数,而不必修改应用程序的代码。

  2. 维护性:将应用程序的参数存储在配置文件中,可以使得维护者更容易理解应用程序的功能和行为。

  3. 共享性:配置文件可以共享给多个用户或多个应用程序使用,从而降低了编写重复代码的工作量。

  4. 安全性:一些敏感信息如数据库连接字符串、密码等可以单独存储在配置文件中,可以防止这些信息被恶意利用或修改。

Spring Boot常见的配置文件有两种:.properties or .yml, 理论上来说,允许两种格式的配置文件可以同时存在。但是,在实际项目开发中,为了可以更好的维护并降低故障发生的概率,我们通常只使用其中一种格式的配置文件。需要特别注意的是,properties 格式的配置的优先级大于 yml 格式的配置文件。
配置文件01

3 properties 格式的配置文件

properties 的语法是用键值对的形式组织的,key 与 value 之间使用 “=” 连接,并不需要多余的空格或者缩进,示例代码如下:

# 端口配置
server.port=8888

# 数据库连接配置
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/databaseName?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root

# 自定义配置项
myTestConfigName=Huang

如何读取配置文件?
若想要主动读取配置文件的信息,可以使用@Value 注解,该注解使用${} 格式读取,以下代码演示如何读取上述代码中的自定义配置项 myConfigName=Huang

    @Value("${myTestConfigName}")  // 获取自定义配置项
    private String myTestConfigName;

    @PostConstruct
    public void postConstruct() {
        System.out.println("myTestConfigName: " + myTestConfigName);
    }

读取配置文件01

对于初学者来说,properties格式的配置文件由于不需要各种缩进和空格的格式控制,因此,可以避免很多错误。但是,properties格式对中文支持并不好,会出现乱码的情况。其次,由于其是key=value形式存储的,会导致代码有很多冗余信息:
冗余信息
要想解决上述问题,可以使用 yml 格式的配置文件解决~

4 yml 格式的配置文件

YAML(全称 Yet Another Markup Language, 另一种标记语言)是一种层级的、非常易读的标记语言。经常用于不同编程语言之间的数据传输。

  • yml 是⼀个可读性⾼,写法简单、易于理解,它的语法和 JSON 语⾔类似。
  • yml ⽀持更多的数据类型,它可以简单表达清单(数组)、散列表,标量等数据形态。它使⽤空⽩符号缩进和⼤量依赖外观的特⾊,特别适合⽤来表达或编辑数据结构、各种配置⽂件等。
  • yml ⽀持更多的编程语⾔,它不⽌是 Java 中可以使⽤在 Golang、PHP、Python、Ruby、JavaScript、Perl 中。

4.1 yml 基本语法

yml 是树形结构的配置⽂件,它的基础语法是“key: value”,注意 key 和 value 之间使⽤英⽂冒号加空格的⽅式组成的,其中的空格不可省略。

使用 yml 格式配置端口号和数据库连接信息的代码如下:

# 优先级 properties > yml 格式, 但是 yml 格式能够解决中文乱码问题, 并且能够适配多种编程语言
server:
  port: 8080

# 数据库连接配置
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/databaseName?characterEncoding=utf8
    username: root
    password: root

相较 properties,代码冗余度降低~

4.2 yml 配置不同类型及null

# 字符串
string.value: Hello

# 布尔值,truefalse
boolean.value1: true
boolean.value2: false

# 整数
int.value1: 77
int.value2: 0b1010_0111_0100_1010_1110 # ⼆进制

# 浮点数
float.value1: 3.14159
float.value2: 314159e-5 # 科学计数法

# Null~代表null
null.value: ~

需要特别注意的是,字符串类型是否带有引号,读取出来是有区别的~

# 字符串
string:
  myString1: 你好, \n世界
  myString2: '你好, \n世界'
  myString3: "你好, \n世界"

读取配置信息的代码如下:

    @Value("${string.myString1}")
    private String myString01;

    @Value("${string.myString2}")
    private String myString02;

    @Value("${string.myString3}")
    private String myString03;

    @PostConstruct
    public void postConstruct() {
        System.out.println("string.myString1: " + myString01 + "\n" + 
                "string.myString2: " + myString02 + "\n" +
                "string.myString3: " + myString03 + "\n");
    }

读取配置信息
可见,只有带有双引号的字符串,转义字符才能被正常解析。对于无引号和单引号的情况,转义字符会原封不动的打印出来~

4.3 使用 yml 配置对象

在 yml 配置对象示例如下:

# 自定义对象
student:
  id: 1
  name: "黄小黄"
  age: 20

也可以采用行内的写法,作用与上述代码一致:

student: {id: 1,name: "黄小黄",age: 20}

如果想要主动读取配置对象的信息,则不能使用 @Value 注解,可以采用 @ConfigurationProperties 来读取,具体实现如下:

@Component
@ConfigurationProperties("student")
@Data
public class Student {
    private int id;
    private String name;
    private int age;
}

在以上代码中,getter、setter以及toString方法均通过lombok实现。需要注意的是@ConfigurationProperties注解中的内容,需要与配置文件中对象的key相同。

调用类的代码如下:

    @Autowired
    private Student student;

    @PostConstruct
    public void postConstruct() {
        System.out.println("student: " + student);
    }

对象的解析

4.4 使用 yml 配置集合

同样地,使用 yml 配置 list 集合也有两种方式:

dbtypes:
  name:
    - mysql
    - sqlserver
    - db2

行内写法如下:

dbtypes: {name: [mysql,sqlserver,db2]}

与配置集合相同,也可以采用 @ConfigurationProperties 来读取,具体实现如下:

@Component
@ConfigurationProperties("dbtypes")
@Data
public class ListConfig {

    private List<String> name;
}

调用类的代码如下:

@Component
public class ReadListYml {

    @Autowired
    private ListConfig listConfig;

    @PostConstruct
    public void postConstruct() {
        System.out.println(listConfig.getName());
    }
}

实现结果

更多系统配置项,请查阅官网:https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#appendix.application-properties


写在最后

本文被 JavaEE编程之路 收录点击订阅专栏 , 持续更新中。
 以上便是本文的全部内容啦!创作不易,如果你有任何问题,欢迎私信,感谢您的支持!

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【笔记】微机原理及接口技术4 -- ADC/DAC

模数数模转换器 控制系统中的模拟接口 A/D 转换器 把模拟信号转成数字信号&#xff0c;供微处理器使用&#xff1b; D/A 转换器 输出模拟信号&#xff0c;供外部控制装置使用&#xff1b; D/A 原理 D/A 转换器的主要部件是电阻开关网络 通常是由输入的二进制数的各位控制一些…

EasyCVR如何在不修改分辨率的情况下进行H.265自动转码H.264?

EasyCVR视频融合平台基于云边端一体化架构&#xff0c;可支持多协议、多类型设备接入&#xff0c;在视频能力上&#xff0c;平台可实现视频直播、录像、回放、检索、云存储、告警上报、语音对讲、电子地图、集群、H.265转码、智能分析以及平台级联等。 我们在此前的文章中介绍过…

【Python实战】Python采集某大夫文字数据

前言 今天&#xff0c;有一位粉丝找到我&#xff0c;希望我出一期关于某大夫数据采集的文章&#xff0c;今天&#xff0c;我们就来采集某大夫的问诊数据。 环境使用 python 3.9pycharm 模块使用 requests 模块介绍 requests requests是一个很实用的Python HTTP客户端库&…

java 健身营养师网站系统myeclipse定制开发mysql数据库B/S模式java编程计算机网页

一、源码特点 JSP 健身营养师网站系统 是一套完善的系统源码&#xff0c;对理解JSP java 编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。研究的基本内容是基于网上 书店系统&#xff0c;使用JSP作为页面开发工具。Web服…

MMaction2 使用记录1——config介绍

目录 了解config &#xff08;模型训练测试的整体过程配置文件&#xff09; 通过脚本参数修改config Config 文件 结构 config文件的命名规则 动作识别的config系统 了解config &#xff08;模型训练测试的整体过程配置文件&#xff09; 我们使用python文件作为config&a…

FreeRTOS学习笔记—任务挂起和恢复

文章目录 一、任务挂起和恢复API函数1.1 vTaskSuspend()函数1.2 vTaskResume()函数1.3 xTaskResumeFromISR()函数 二、任务挂起和恢复2.1 任务1挂起解挂任务22.2 中断中解挂任务1 三、补充内容3.1 FreeRTOS数据类型3.2 中断优先级分组3.3 错误问题 一、任务挂起和恢复API函数 …

ChatGPT | Word文档如何更好地提取表格内容给ChatGPT

本文来自http://blog.csdn.net/hellogv/ &#xff0c;引用必须注明出处&#xff01; Word文档如何更好地提取表格内容给ChatGPT做知识库&#xff0c;这属于文本预处理工作。 本文只讲思路、测试结果&#xff0c;技术实现用Python和Java都能完成&#xff0c;下一篇文章再贴源码…

Python实用工具--全python制作一个音乐下载器

前言 又来展示一下关于Python的实用小技巧了&#xff0c;这次就来分享分享–如何用Python来制作一个音乐下载器 做这个有什么用啊&#xff0c;我只能说&#xff0c;可以免费下载歌曲啊&#xff0c;这样就能每月保住自己钱包咯 效果展示 基本界面 图片以及文字都是可以自己更…

《动手学深度学习》——线性神经网络

参考资料&#xff1a; 《动手学深度学习》 3.1 线性回归 3.1.1 线性回归的基本元素 样本&#xff1a; n n n 表示样本数&#xff0c; x ( i ) [ x 1 ( i ) , x 2 ( i ) , ⋯ , x d ( i ) ] x^{(i)}[x^{(i)}_1,x^{(i)}_2,\cdots,x^{(i)}_d] x(i)[x1(i)​,x2(i)​,⋯,xd(i)​…

序列化对象

1&#xff1a;对象序列化 以内存为基准&#xff0c;把内存中的对象存储到磁盘文件中去&#xff0c;称为对象序列化。使用到的流是对象字节输出流&#xff1a;ObjectOutputStream 2&#xff1a;对象要序列化&#xff0c;必须实现Serializable序列化接口 2&#xff1a;对象反序…

二十四、HTTPS

文章目录 一、HTTPS&#xff08;一&#xff09;定义&#xff08;二&#xff09;HTTP与HTTPS1.端口不同&#xff0c;是两套服务2.HTTP效率更高&#xff0c;HTTPS更安全 &#xff08;三&#xff09;加密&#xff0c;解密&#xff0c;密钥等概念&#xff08;四&#xff09;为什么要…

【H5】文件下载(javascript)

系列文章 【移动设备】iData 50P 技术规格 本文链接&#xff1a;https://blog.csdn.net/youcheng_ge/article/details/130604517 【H5】avalon前端数据双向绑定 本文链接&#xff1a;https://blog.csdn.net/youcheng_ge/article/details/131067187 【H5】安卓自动更新方案&a…

hivesql列转行

原表&#xff1a; 目标表&#xff1a; sql代码&#xff1a; select dp as 日期 ,city_name as 城市, split_part(subject,‘:’,1) as 指标, cast( split_part(subject,‘:’,2) as double ) as 数值 from( select trans_array(2,‘;’,dp,city_name,subject) as (dp,city_na…

探秘高逼格艺术二维码的制作过程-AI绘画文生图

前几天看到几个逼格比较高的二维码&#xff0c;然后自己动手做了一下&#xff0c;给大家看看效果&#xff1a; 1、文生图&#xff08;狮子&#xff09;&#xff1a; 2、文生图&#xff08;城市&#xff09;&#xff1a; 下边将开始介绍怎么做的&#xff0c;有兴趣的可以继续读…

Vault AppRole最佳实现过程

AppRole AppRole身份验证方法允许机器或应用程序使用 Vault 定义的角色进行身份验证。AppRole 的开放式设计支持使用不同的工作流和配置来应对大量应用程序。这种身份验证方法主要是面向自动化工作流程(机器和服务)设计的,对人类操作者不太有用。 “AppRole”代表一组 Vau…

大数据Doris(五十六):RESOTRE数据恢复

文章目录 RESOTRE数据恢复 一、RESTORE数据恢复原理 二、RESTORE 数据恢复语法 三、RESOTRE数据恢复案例 1、在 Doris 集群中创建 mydb_recover 库 2、执行如下命令恢复数据 3、查看 restore 作业的执行情况 四、注意事项 RESOTRE数据恢复 Doris 支持BACKUP方式将当前…

力扣 40. 组合总和 II

题目来源&#xff1a;https://leetcode.cn/problems/combination-sum-ii/description/ C题解&#xff1a; 这道题的难点在于解集中不能包含重复的组合。如果用set去重会造成超时&#xff0c;所以只能在单层递归逻辑中处理。通过识别下一个数与当前数是否相同&#xff0c;来修改…

抖音小程序--开启沙盒模式后一直报,获取白名单失败:您没有权限访问此应用

一. 出现问题 按照抖音开发文档创建沙盒环境&#xff0c;然后替换appid后一直报无权限&#xff0c;如下图&#xff1a; 最后才发现&#xff0c;登录抖音开发工具的账户必须是超级管理员账户&#xff0c;添加的协助开发者&#xff0c;就算给了全部权限&#xff0c;也依然会报上面…

Navicat 入选中国信通院发布的《中国数据库产业图谱(2023)》

7 月 4 日&#xff0c;2023 年可信数据库发展大会主论坛在北京国际会议中心成功召开。会上&#xff0c;中国信息通信研究院正式发布《中国数据库产业图谱&#xff08;2023&#xff09;》。作为中国数据库生态工具供应商&#xff0c;凭借易用、稳定、可靠的产品力&#xff0c;以…

【C++】4.工具:读取yaml配置信息

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍读取yaml配置信息。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下次更新不迷路&…