当前位置: 首页 > news >正文

Spring Boot 项目配置文件

文章目录

  • 配置文件的作用
  • properties
    • 基本语法
    • 读取文件信息
    • 缺点
  • yml
    • 基本语法
    • 优点
    • 配置不同数据类型
      • 字符串类型的写法
    • 配置对象
    • 配置集合
  • 读取配置文件的几种方法
    • Environment
    • @PropertySource
    • 使用原生方式读取
  • 设置不同环境的配置文件

配置文件的作用

整个项目中重要的数据都是在配置文件中配置的,例如:

  1. 数据库的连接信息(包含连接主机、用户名和密码的设置);
  2. 项目的启动端⼝;
  3. 第三方系统的调用秘钥等信息;
  4. 发现和定位问题的普通日志和异常日志等

Spring Boot 配置文件主要分为以下两种格式:

  1. .properties
  2. .yml

配置文件都是放在:/src/main/resources中的,默认的 Spring Boot 项目生产的是 .properties 格式的配置文件,.yml 格式文件需要自己手动创建

image-20240127174835923

注意事项:

  1. properties 可以和 yml ⼀起存在于⼀个项目当中,但是如果两个配置文件中出现了同样的配置那么会以 properties 中的配置为主,但加载完 .properties 文件之后,也会加载 .yml 文件的配置信息。
  2. properties 配置文件是 Spring Boot 项目的默认配置文件

properties

基本语法

properties 是以键值的形式配置的,key 和 value 之间以 “=” 连接。

# 注释
server.port=8088
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding= utf8 
spring.datasource.username=root 
spring.datasource.password=root

读取文件信息

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

import jakarta.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;/* @Component 在 Spring Boot 启动时候会注入到框架中注⼊到框架中时会执⾏ @PostConstruct初始化⽅法读取配置文件信息
*/@Component
public class UserComponent {@Value("${server.port}")private String port;@PostConstructpublic void postConstruct() {System.out.println("Read properties: port: " + port);}
}

image-20240127175626724

缺点

例如下面的配置信息中:

# 注释
server.port=8088
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding= utf8 
spring.datasource.username=root 
spring.datasource.password=root

从上述配置key看出,properties 配置文件中会有很多的冗余的信息,出现了很多次的 spring.datasource.

这样写起来就很麻烦,代码也不好看,这时候旧的考虑 yml 配置文件了

yml

基本语法

yml 是树形结构的配置文件,基础语法是“key: value”,注意:key 和 value 之间使用英文冒汗加空格的方式组成的,空格不可省略

# 注释
spring:datasource:url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8username: rootpassword: root

这样写出来了代码就简约明了

优点

  1. yml 是⼀个可读性高,写法简单、易于理解,它的语法和 JSON 语⾔类似。
  2. yml 更多的数据类型,它可以简单表达清单(数组)、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件等。
  3. yml 支持更多的编程语言,它不止是 Java 中可以使用在 Golang、PHP、Python、Ruby、 JavaScript、Perl 中同样可以

配置不同数据类型

# 注释
string: helloboolean: trueint: 22float: 22.22

那么对于 yml 的获取文件信息,和 properties是一样的,同样使用 @Value zhujie

@Controller
public class UserController {@Value("${string}")private String hello;@Value("${boolean}")private String bool;@Value("${int}")private String Int;@Value("${float}")private String Flo;@PostConstructpublic void doPostConstruct(){System.out.println("string: " + hello);System.out.println("boolean: " + bool);System.out.println("int: " + Int);System.out.println("float: " + Flo);}
}

字符串类型的写法

  1. 字符串默认不要加上单引号或者双引号
  2. 加英文的单双引号就会表示特殊的含义
# 注释
str1: hel\nlo
str2: 'hel\nlo'
str3: "hel\nlo"

\n 是有着换行的特殊含义的,那么对于加或不加的字符串会有什么效果

image-20240127183418995

可以看到,不加和加了单引号就会得到 原所写的字符串

加了双引号就会变成原义输出

配置对象

yml 可以直接配置对象

student:id: 1name: 张三age: 22

或者可以使用行内式

student: {id: 1, name: 张三, age: 22}

配置好了之后就可以直接通过 @ConfigurationProperties 注解去获取配置对象了

@Getter
@Setter
@ConfigurationProperties(prefix = "student")
@Component
public class StudentComponent {private String name;private int id;private int age;@Overridepublic String toString() {return "StudentComponent{" + "id= " + id + ", " +"name= '" + name + '\'' +", age= " + age + '}';}
}

注意:使用 @ConfigurationProperties 注解的类一定要有 Get和Set 方法。可以跟上述代码一样使用 LomBok 也可以直接写出来

通过控制类去获取该 Bean 打印查看结果

@Component
public class StudentController {@Autowiredprivate StudentComponent studentComponent;@PostConstructpublic void print(){System.out.println(studentComponent);}
}

image-20240127204849860

配置集合

yml 也可以配置集合

dbtypes:name:- mysql- sqlserver- test

或者使用行内式

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

然后通过list 去接收

@Getter
@Setter
@ConfigurationProperties(prefix = "dbtypes")
@Component
public class NameComponent {private List<String> name;
}

通过控制类去获取该 Bean 打印查看结果

@Component
public class NameController {@Autowiredprivate NameComponent nameComponent;@PostConstructpublic void print(){System.out.println(nameComponent.getName());}
}

image-20240127205513882

读取配置文件的几种方法

Spring Boot 中读取配置文件有以下 5 种方法:

  1. 使用 @Value 读取配置文件。
  2. 使用 @ConfigurationProperties 读取配置文件。
  3. 使用 Environment 读取配置文件。
  4. 使用 @PropertySource 读取配置文件。
  5. 使用原生方式读取配置文件。

@Value 和 @ConfigurationProperties 在上文已经讲过了

Environment

首先 Environment 是一个类,这个类可以直接使用 @Autowired 去注入,注入完成后就可以调用其 getProperty 方法去获取指定配置信息了

@SpringBootApplication
public class SpringbootDemoApplication implements InitializingBean {@Autowiredprivate Environment environment;public static void main(String[] args) {SpringApplication.run(SpringbootDemoApplication.class, args);}@Overridepublic void afterPropertiesSet() throws Exception {System.out.println("str1:" + environment.getProperty("str1"));}
}

image-20240127211403086

@PropertySource

使用 @PropertySource 注解可以用来指定读取某个配置文件,但是只是指定,还是得用到 @Value注解去获取

@SpringBootApplication
@PropertySource("classpath:application.yml")
public class SpringbootDemoApplication implements InitializingBean {@Value("${str1}")private String str1;public static void main(String[] args) {SpringApplication.run(SpringbootDemoApplication.class, args);}@Overridepublic void afterPropertiesSet() throws Exception {System.out.println("str1:" + str1);}
}

使用原生方式读取

最原始的方式就是通过 Properties 对象来读取配置文件

@SpringBootApplication
public class SpringbootDemoApplication implements InitializingBean {public static void main(String[] args) {SpringApplication.run(SpringbootDemoApplication.class, args);}@Overridepublic void afterPropertiesSet() throws Exception {Properties props = new Properties();try {// 指定配置文件InputStreamReader inputStreamReader = new InputStreamReader(this.getClass().getClassLoader().getResourceAsStream("application.yml"),StandardCharsets.UTF_8);props.load(inputStreamReader);} catch (IOException e1) {System.out.println(e1);}// 调用方法获取指定信息System.out.println("str1:" + props.getProperty("str1"));}
}

设置不同环境的配置文件

可能一个项目中不同阶段时所用的配置是不一样的,例如测试时使用的数据库是本地的,发布后使用的数据库是云端的,那这样就需要一个个修改。

在Spring Boot 项目中可以为不同的环境设置不同的配置文件,然后只需要修改主配置文件就可以指定使用哪一套配置文件,并且只需要将不同的配置分开,公共的配置还是可以放在主配置文件中。

主配置文件名必须为:

application.properties / application.yml

其他的配置文件前面部分必须统一,横杠后的任取

application-XXX.properties / application-XXX.yml

需要指定用某一个配置文件,只需要在主配置文件中加入

spring.profiles.active=XXX // 注意XXX是横杠后任取的名称

相关文章:

Spring Boot 项目配置文件

文章目录 配置文件的作用properties基本语法读取文件信息缺点 yml基本语法优点配置不同数据类型字符串类型的写法 配置对象配置集合 读取配置文件的几种方法EnvironmentPropertySource使用原生方式读取 设置不同环境的配置文件 配置文件的作用 整个项目中重要的数据都是在配置…...

学校“数据结构”课程Project—扩展功能(自主设计)

目录 一、设想功能描述 想法缘起 目标功能 二、问题抽象 三、算法设计和优化 1. 易想的朴素搜索 / dp 搜索想法 动态规划&#xff08;dp&#xff09;想法 2. 思考与优化 四、算法实现 五、结果示例 附&#xff1a;使用的地图API 一、设想功能描述 想法缘起 OSM 导出…...

从0开始搭建若依微服务项目 RuoYi-Cloud(保姆式教程 一)

掌握陌生项目解读技巧 掌握若依(RuoYi-Cloud)框架 掌握SpringCloud Alibaba体系项目开发套路&#xff0c;结合我之前所有企业项目来学习就知道有多么简单。 一、框架介绍 1. 简介 一直想做一款后台管理系统&#xff0c;看了很多优秀的开源项目但是发现没有合适的。于是利用空…...

【Chrome】浏览器怎么清除缓存并强制刷新

文章目录 1、正常刷新&#xff1a;正常刷新网页&#xff0c;网页有缓存则采用缓存。 F5 或 刷新键2、强制刷新&#xff1a;忽略缓存刷新&#xff0c;重新下载资源不用缓存。 CtrlF5 或 ShiftF5 或 CtrlShiftR3、在浏览器的设置里面清除所有数据...

Android创建保存Excel文件

Android开发生成保存Excel文件&#xff0c;首先下载两个jar包。下载地址&#xff1a;Android读写Excel文件的两个jar包资源-CSDN文库 poi-3.12-android-a.jar poi-ooxml-schemas-3.12-20150511-a.jar 把jar包放在app的libs文件夹下&#xff0c;引用jar我一般都在build.gradle的…...

Selenium + Django + Echarts 实现亚马逊商品数据可视化爬虫项目

最近完成了1个爬虫项目&#xff0c;记录一下自己的心得。 项目功能简介 根据用户输入商品名称、类别名称&#xff0c;使用Selenium, BS4等技术每天定时抓取亚马逊商品数据&#xff0c;使用Pandas进行数据清洗后保存在MySql数据库中. 使用Django提供用户端功能&#xff0c;显…...

【深度学习】初识深度学习

初识深度学习 什么是深度学习 关系&#xff1a; #mermaid-svg-7QyNQ1BBaD6vmMVi {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-7QyNQ1BBaD6vmMVi .error-icon{fill:#552222;}#mermaid-svg-7QyNQ1BBaD6vmMVi .err…...

探索 Xind3 生态系统,解锁铭文资产的新玩法

铭文市场的兴起&#xff0c;不仅是新资产发行方案向市场的代表&#xff0c;更是新资产革命的代表。通过“公平启动”的方式&#xff0c;任何人都可以按照先到先得的原则“铸造”资产。虽然这看起来是意识形态上的新升级&#xff0c;但实际上最火的铭文风潮是由CEX引发的。 我们…...

js有哪些内置对象?

在 JavaScript 中&#xff0c;内置对象可以分为三类&#xff1a;原始值的包装对象、构造函数和其他对象。这里列举一些常见的内置对象及其方法&#xff1a; 原始值的包装对象&#xff1a; String&#xff1a;字符串类型的包装对象&#xff0c;有 charAt、concat、indexOf、repl…...

拦截器的简单使用

拦截器的简单使用 拦截器的使用创建拦截器preHandle 目标方法执行前执行postHandle 目标方法执行后执行afterCompletion 视图渲染后执行 拦截器使用场景返回值注册拦截器运用拦截器 拦截器的使用 创建拦截器 首先,我们需要创建一个拦截器器的类,并且需要继承自HandlerIntercep…...

【gmsh源码阅读】OCC对象绑定tag及获取几何与网格映射关系

一、Tag是什么&#xff1f; gmsh中的几何模型相对于OCC的模型增加了id编号&#xff0c;也叫tag&#xff0c;在gmsh中可以显示出来。在gmsh中&#xff0c;点、线、面、体都有Tag&#xff0c;以方便对其查找定位查找。在OCC中TopoDS_Shape只有几何与拓扑结构&#xff0c;没有唯一…...

【RTP】webrtc 学习3: webrtc对h264的rtp解包

rtp_rtcp\source\video_rtp_depacketizer_h264.cc【RTP】webrtc 学习2: webrtc对h264的rtp打包 中分析了打包过程的代码,这样再来看解析过程的源码就容易多了:本代码主要基于m79,m98类似。这里注明了jitterbuffer 会再次 做 解析stap-a 变为NAL units解析ParseFuaNalu 第一…...

幻兽帕鲁服务器多少钱?4核16G支持32人在线吗?

4核16G服务器是幻兽帕鲁Palworld推荐的配置&#xff0c;阿里云和腾讯云均推出针对幻兽帕鲁的4核16G服务器&#xff0c;阿里云4核16G幻兽帕鲁专属服务器32元1个月、66元3个月&#xff0c;腾讯云4核16G14M服务器66元1个月、277元3个月、1584元一年。云服务器吧yunfuwuqiba.com分享…...

AD/DA(模数数模转换)

文章目录 前言一、介绍部分介绍AD/DA硬件电路模型硬件电路ADC模块DAC模块ADC0809DAC0832 运算放大器&#xff08;运放&#xff09;运放电路 DA原理两种不同的DA转换器 AD原理部分AD/DA性能指标XPT2046介绍主要功能XPT2046时序结构控制字节解释单端模式配置表 二、实例使用AD读取…...

Docker数据卷挂载(以容器化Mysql为例)

数据卷 数据卷是一个虚拟目录&#xff0c;是容器内目录与****之间映射的桥梁 在执行docker run命令时&#xff0c;使用**-v 本地目录&#xff1a;容器目录**可以完成本地目录挂载 eg.Mysql容器的数据挂载 1.在根目录root下创建目录mysql及三个子目录&#xff1a; cd ~ pwd m…...

YOLOv8-Seg改进:注意力系列篇 | non-local自注意力,助力小目标分割

🚀🚀🚀本文改进:non-local自注意力,助力小目标分割 🚀🚀🚀YOLOv8-seg创新专栏:http://t.csdnimg.cn/KLSdv 学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科研; 1)手把手教你如何训练YOLOv8-seg; 2)模型创新,提升分割性能; 3)独家自研模块助力分割;…...

【Qt无门槛入门】信号以及信号机制及其常用控件(1)

信号与信号槽 信号源&#xff1a;由哪个控件发出的信号。 信号的类型&#xff1a;用户进行不同的操作&#xff0c;就可能出发不同的信号。 信号处理的方式:槽&#xff08;slot&#xff09;某个对象接收到这个信号之后&#xff0c;就会做一些相关的处理动作。但是Qt对象不会无故…...

【python】爬取百度热搜排行榜Top50+可视化【附源码】【送数据分析书籍】

英杰社区https://bbs.csdn.net/topics/617804998 一、导入必要的模块&#xff1a; 这篇博客将介绍如何使用Python编写一个爬虫程序&#xff0c;从斗鱼直播网站上获取图片信息并保存到本地。我们将使用requests模块发送HTTP请求和接收响应&#xff0c;以及os模块处理文件和目录操…...

排序(插入排序)

现在&#xff0c;我们学习了之前数据结构的部分内容&#xff0c;即将进入一个重要的领域&#xff1a;排序&#xff0c;这是一个看起来简单&#xff0c;但是想要理清其中逻辑并不简单的内容&#xff0c;让我们一起加油把&#xff01; 排序的概念及其运用 排序的概念 排序&…...

Spring MVC 请求流程

SpringMVC 请求流程 一、DispatcherServlet 是一个 Servlet二、Spring MVC 的完整请求流程 Spring MVC 框架是基于 Servlet 技术的。以请求为驱动&#xff0c;围绕 Servlet 设计的。Spring MVC 处理用户请求与访问一个 Servlet 是类似的&#xff0c;请求发送给 Servlet&#xf…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...