【框架篇】Spring Boot 配置文件(详细教程)

news2024/12/29 10:10:01

在这里插入图片描述

Spring Boot 配置文件

在这里插入图片描述


一,配置文件的用途

配置文件在Spring Boot项目中的地位是比较重要,其功能可主要归纳为以下几个:

  1. 进行配置程序属性:配置文件允许设置应用程序的各种属性,如数据库连接、端口号、日志级别、缓存配置等。通过配置文件,可以集中管理和修改这些属性,而不需修改代码。
  2. 进行环境特定配置:配置文件可以根据不同的环境(如开发、测试、生产环境)指定不同的配置,以满足不同环境下的需求。通过切换不同的配置文件,应用程序可以适应不同的运行环境。
  3. 进行细粒度配置:配置文件可以提供细粒度的配置,允许逐个组件进行配置,例如数据库连接池、缓存配置、日志配置等。这样每个组件可以根据自己的需求进行个性化配置。
  4. 进行外部化配置:配置文件使配置信息外部化,不需要硬编码到应用程序代码中。这样使得应用程序更加灵活和可维护,可以在不重新编译应用程序的情况下更改配置。
  5. 进行密文配置:配置文件可以用于存储敏感信息,如密码或者API密钥。可以通过加密或其他安全机制来保护这些敏感信息,确保配置文件的安全性。

二,配置文件的格式

2.1,配置文件格式介绍

Spring Boot 项目配置文件的格式有两种,分别为:

1,Properties格式

用法:Properties格式使用键值对的方式进行配置,每个配置项使用key=value的格式。可以通过.properties文件扩展名来标识使用此格式的配置文件,例如application.properties。在文件中,可以配置多个属性,使用#作为注释符号。

优点:Properties格式使用简单的键值对,易于理解和书写。对于简单的配置需求,Properties格式足够满足要求。

缺点:Properties格式缺乏层级结构的表示能力,难以表达复杂配置。并且随着配置项的增多,Properties格式的可读性会变差。

示例:在配置文件中设置端口号和建立数据库连接。

server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase
spring.datasource.username=root
spring.datasource.password=secret

2,YAML格式

用法:YAML格式以层级结构的方式进行配置,使用缩进和冒号来表示层级关系。可以通过.yml.yaml文件扩展名来标识使用此格式的配置文件,例如application.yml。在文件中,可以使用缩进和冒号定义各级配置,注意冒号与值之间存在个空格。

优点:YAML格式支持层级结构,可以更好地表达复杂配置,如嵌套配置、列表、块等。并且该格式采用缩进的语法,易于阅读和维护。

缺点:YAML格式对缩进和冒号的使用有严格的要求,如果没有正确缩进或冒号使用错误可能导致配置解析问题,需要一定的学习成本。

示例:在配置文件中设置端口号和建立数据库连接。

server:
  port: 8080
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydatabase
    username: root
    password: secret

总结:Properties格式适合简单配置和快速编写,而YAML格式则更适合复杂配置和可读性强的情况。选择哪种格式可以根据项目需求和个人偏好来决定。

系统配置项查看网址:Common Application Properties (spring.io)


2.2,文件格式特殊说明

配置文件格式的特殊说明

1,两种配置文件是可以同时存在的,但是在企业中通常会规定项目使用这其中的一种格式作为项目配置文件的格式。

2,如果一个配置项在两种配置文件中都进行了设置,以 .properties 为后缀的配置文件为主。

3,.properties 配置文件的优先级最高,但加载完.properties 配置文件之后,也会加载.yml 配置文件的配置信息。


三,配置文件的使用

3.1,读取配置文件的内容

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

示例:读取application.properties配置文件中设置的端口号

1,application.properties配置文件中设置的端口号信息:

image-20230715105605968

2,编写读取配置文件在的端口号代码,示例代码:

package com.example.springboot.component;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@Component
public class ReadProperties {
    @Value("${server.port}")
    private String port;
    @PostConstruct
    public void doPostConstruct(){
        System.out.println("server.port = " + port);
    }
}

代码说明:@Component注解:在 Spring Boot启动时候将ReadProperties类注入到框架中,@PostConstruct注解:类注入到框架中时会执行doPostConstruct初始化方法,这个时候就能读取到配置信息了。

3,运行编写好的示例代码,查看到如下运行结果:

image-20230715110128120

读取配置文件的多种方式:SpringBoot 有几种读取配置文件的方法?


3.2,配置项加不加引号区别

1,不使用引号(裸值)

用法:在配置文件中,通常不需要使用引号将值括起来。这种情况下,值会被解析为相应的数据类型,如字符串、整数、布尔值等。

使用环境:适用于不包含特殊字符的情况。

myapp.name=My Application
myapp.port=8080
myapp.enabled=true

2,单引号(‘’)

用法:单引号可以用来保留配置值中的空格或特殊字符。其中的值将按照原样进行解析,包括空格。

使用环境:适用于需要保留空格、特殊字符或原始格式的配置值,如文件路径、密码或命令行参数。

myapp.name='My Application'
myapp.description='This is my "awesome" application.'
myapp.author='Traceless'

3,双引号(“”)

用法:双引号可以用于提供字符串类型的配置值。其中的值将进行解析和处理,可以包含占位符或转义字符。

使用环境:适用于需要进行变量替换或使用转义字符的配置值。

myapp.name="My Application"
myapp.description="This is my \"awesome\" application."
myapp.author="Traceless"

总结:具体使用哪种引号取决于要实现的功能和期望的字符串处理方式。例如,如果需要对变量进行替换或特殊字符转义,双引号是更适合的选择。单引号则保持字符串的原样,适用于需要保留特殊字符字面值的情况。。


3.3,设置不同环境的配置文件

在实际开发中,一个项目存在多种不同环境的配置文件,例如开发环境配置文件,测试环境配置文件,生产环境配置文件 …

Spring Boot 项目在不同平台上的环境配置规则:

  1. 必须存在主配置文件,主配置文件名必须为application.propertion 或者 application.yml
  2. 每个平台都存在一个专属配置文件,配置文件名有要求,需遵循application-xxx.propertion(.yml)格式。

设置不同环境的配置文件示例:现有个项目,项目中存在开发环境,测试环境,生产环境的配置文件,而每个配置文件端口号不同,现在需要进行项目的测试操作,所以我们切换使用测试环境的配置文件。

1,项目主环境和各环境的配置文件配置如下:

image-20230715115953309

2,项目启动检测环境配置是否切换至测试生产环境,查看端口号为8888,说明切换成功。

image-20230715115658515


结语

这就是本期博客的全部内容啦!如果有什么其他的问题无法自己解决,可以在评论区留言哦!

最后,如果你觉得这篇文章写的还不错的话或者有所收获的话,麻烦小伙伴们动动你们的小手,给个三连呗(点赞👍,评论✍,收藏📖),多多支持一下!各位的支持是我最大的动力,后期不断更新优质的内容来帮助大家,一起进步。那我们下期见!

在这里插入图片描述


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

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

相关文章

多态及其原理

文章目录 构成多态的条件虚函数作用:完成重写 重写重载 重写 隐藏为什么析构函数要搞成符合多态?原理预热对于基类指针或引用指向父类或者子类的成员函数是如何调用不同的函数呢? 一个类如果是基类,它的析构函数最好加上virtual 构成多态的条…

【【51单片机的LCD1602 最简单的一集】】

最简单的一集&#xff0c;明白运算显示就没问题 这一节相对简单 其实只要明白显示行列就可以了 剩下来的取什么基本上就是遍历 然后读取到\0停止 下面是基础的LCD1602的功能 #include <REGX52.H> sbit LCD_RSP2^6; sbit LCD_RWP2^5; sbit LCD_EP2^7; #define LCD_Data…

ES6基础知识七:你是怎么理解ES6中 Generator的?使用场景?

一、介绍 Generator 函数是 ES6 提供的一种异步编程解决方案&#xff0c;语法行为与传统函数完全不同 回顾下上文提到的解决异步的手段&#xff1a; 回调函数promise 那么&#xff0c;上文我们提到promsie已经是一种比较流行的解决异步方案&#xff0c;那么为什么还出现Gen…

归并排序法解释

什么是归并排序法 归并排序是一种常见的排序算法&#xff0c;它基于分治策略&#xff0c;将一个大问题分解为小问题来解决。归并排序的主要思想是将待排序的数组分成两个子数组&#xff0c;分别对这两个子数组进行排序&#xff0c;最后将两个有序的子数组合并成一个有序的数组…

Openlayers入门,Openlayers调整中心点坐标、Openlayers调整缩放级别、Openlayers调整地图可视角度和地图复位

专栏目录: OpenLayers入门教程汇总目录 前言 本章介绍一下Openlayers最基础的调整中心点坐标方式、调整缩放级别、调整地图可视角度和地图复位的小功能示例,非常简单,可直接上手。 二、依赖和使用 "ol": "^6.15.1"使用npm安装依赖npm install ol@6…

重学C++系列之继承

一、什么是继承 继承是面向对象三大特性之一&#xff0c;C中&#xff0c;被继承的类称为基类&#xff08;父类&#xff09;&#xff0c;继承别的类的类成为派生类&#xff08;子类&#xff09;&#xff0c;继承除了基类的构造函数和析构函数不继承外&#xff0c;其余成员全部继…

【安卓】视频播放器实现过程,超详细注释,自定义视频进度条,打开本地文件播放视频等功能。

一、实现效果 废话不多说&#xff0c;直接上代码&#xff0c;里面有详细注释&#xff0c;不清楚的评论区留言。 二、布局代码 <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res…

Android安卓实战项目(3)—一个炫酷的健身APP界面

Android安卓实战项目&#xff08;3&#xff09;—一个炫酷的健身APP界面 一.项目运行介绍 1.大致浏览 2.功能介绍 &#xff08;1&#xff09;功能一 上导航条 &#xff08;2&#xff09;功能二 下导航条 二.具体实现 MainActivity.java package com.rckdeveloper.fitene…

python 面向对象编程的特点 - 封装 - 继承(经典类、新式类) - 多态 - 静态方法、类方法 - 下划线的使用 - 回合制攻击游戏实验

目录 面向对象编程的特点&#xff1a; 封装&#xff1a;封装是将数据和操作&#xff08;方法&#xff09;封装在一个对象中的能力 继承&#xff1a;继承是指一个类&#xff08;子类&#xff09;可以继承另一个类&#xff08;父类&#xff09;的属性和方法。 我们为什么需要继…

Python采集法外狂徒张三所有视频【含jS逆向解密】

传说中&#xff0c;有人因为只是远远的看了一眼法外狂徒张三就进去了&#x1f602; 我现在是获取他视频&#xff0c;岂不是直接终生了&#x1f929; 网友&#xff1a;赶紧跑路吧 &#x1f60f; 好了话不多说&#xff0c;我们直接开始今天的内容吧&#xff01; 你需要准备 …

详解STM32的GPIO八种输入输出模式,GPIO各种输入输出的区别、初始化的步骤详解,看这文章就行了(超详细)

在STM32微控制器中&#xff0c;常见的输入输出(GPIO)模式有八种&#xff0c;分别是推挽输出、开漏输出、复用推挽输出、复用开漏输出、浮空输入、上拉输入、下拉输入和模拟输入。下面我将为你解释每种模式的特点和区别&#xff0c;并提供相应的示例代码。 文章目录 介绍区别初…

组合模式-树形结构的处理

A公司需要筛选出年龄35岁及以上(如果是领导&#xff0c;年龄为45岁及以上)的人。其组织架构图如下。 图 A公司部分组织架构图 图 传统解决方案 public class Development {private String name;public Development(String name) {this.name name;}List<Employee> emplo…

uni-app优雅的实现时间戳转换日期格式

现在显示的格式如下图&#xff1a; 我期望统一格式&#xff0c;所以不妨前端处理一下&#xff0c;核心代码如下 filters: {// 时间戳处理formatDate: function(value, spe /) {value value * 1000let data new Date(value);let year data.getFullYear();let month data.…

【设计模式——学习笔记】23种设计模式——适配器模式Adapter(原理讲解+应用场景介绍+案例介绍+Java代码实现)

介绍 生活中的案例 不同国家的插座不同&#xff0c;出国旅游充电器不能直接使用&#xff0c;可以通过使用多功能转换插头来辅助使用 基础介绍 适配器模式将某个类的接口转换成客户端期望的另一个接口表示&#xff0c;主的目的是兼容性&#xff0c;让原本因接口不匹配不能一起…

github gitlab 多用户多平台切换

一、背景 我需要用账号1 来登录并管理github 账号 我需要用账号2 来登录并管理gitlab 账号 二、设置账号 邮箱 设置账号1用户名与邮箱 git config --global user.name "miaojiang" git config --global user.email "187133163.com" 三、生成本地密钥…

LT6911C 是一款HDMI 1.4到双端口MIPIDSI/CSI或者LVDS加音频的一款高性能芯片

LT6911C 1.描述&#xff1a; LT6911C是一款高性能的HDMI1.4到MIPIDSI/CSI/LVDS芯片&#xff0c;用于VR/智能手机/显示器应用程序。对于MIPIDSI/CSI输出&#xff0c;LT6911C具有可配置的单端口或双端口MIPIDSI/CSI&#xff0c;具有1个高速时钟通道和1个~4个高速数据通道&#…

ChatGLM-RM(Reward Model)实现代码逐行讲解

这里我们尝试通过RM训练让模型学会从给定上下文中提取信息&#xff0c;来进行RM模型的实践。你可以从下面链接获取代码 GitHub - Pillars-Creation/ChatGLM-RLHF-LoRA-RM: ChatGLM-6B添加了RLHF的实现&#xff0c;以及部分核心代码的逐行讲解 ,实例部分是做了个新闻短标题的生成…

入行软件测试7年,才知道原来字节跳动这么容易进

当前就业环境&#xff0c;裁员、失业消息满天飞&#xff0c;好像有一份工作就不错了&#xff0c;更别说高薪了。其实这只是一方面&#xff0c;而另一方面&#xff0c;各大企业依然求贤若渴&#xff0c;高技术人才依然紧缺&#xff0c;只要你技术过硬&#xff0c;拿个年薪50w不是…

FUNBOX_1靶场详解

FUNBOX_1靶场复盘 这个系列的靶场给出的干扰因素都挺多的&#xff0c;必须从中找到有用的线索才可以。 这个靶场你扫描到ip地址后打开网页会发现&#xff0c;ip自动转换成域名了&#xff0c;所以我们需要添加一条hosts解析才可以。 192.168.102.190 funbox.fritz.box从目录…

4EVERLAND 托管让 Permaweb 变得更容易!

在互联网托管领域&#xff0c;我们通常将其与存储和管理网站的服务联系起来。传统的 Web2 托管服务在集中式服务器模型上运行&#xff0c;其中网站文件和数据库存储在集中管理的服务器上。用户通过互联网访问网站。这种托管模式应用广泛&#xff0c;相对简单&#xff0c;适合很…