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

SpringBoot的配置文件——.yml和.properties

目录

1. Spring Boot 配置文件的使用场景

2. 配置文件的两种格式

2.0 特殊说明:

2.1 .properties 

2.1.1 格式 

2.2.2 缺陷 

2.2.3 解决中文乱码的问题

2.2  .yml

2.2.3 格式

配置数据库连接

注意转义字符

​编辑 ​编辑

配置null

配置对象

 从.yml读取文件举例

Student类及注意事项

appliaction.yml

Test

 配置集合示例

 创建不同环境下的配置文件


1. Spring Boot 配置文件的使用场景

1.系统配置文件:配置文件通常用于指定应用程序的全局设置,比如数据库连接、日志级别、端口号等。可以在配置文件中定义这些属性,并根据需要进行修改。

2.用户配置文件:通过使用Spring Boot的配置文件,可以让用户在运行时指定他们希望覆盖的属性。例如,应用程序可能具有一些默认设置,但允许用户在配置文件中指定其他值

2. 配置文件的两种格式

.properties和.yml 

2.0 特殊说明:

1. 当.properties中设置端口号server.port=8888,而在.yml中设置

server:

    port:6666,这个时候会以8888端口号!当一个项目中存在两种格式的配置文件,并且两个配置文件中设置了相同配置项,properties的优先级会更高

2. 理论上这两种配置文件是可以共存的,但实际上我们会统一

3. properties第一次用的话使用中文会乱码,但.yml不会,但是也可以通过别的方法来改变properties中文乱码的问题,下文中有介绍

4.yml的通用性更好

2.1 .properties 

2.1.1 格式 

#表示注释;key=value的形式
server.port=8888
mytest=zhangsan
#连接数据库配置
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123456

2.2.2 缺陷 

mytest=张三,像这种使用中文会乱码,但是你也可以通过改成utf8的形式改变这个问题。

2.2.3 解决中文乱码的问题

  1. @PropertySource
    @PropertySource(value="application.properties",encoding="utf-8")

     但是这种方式必须保证在application.properties , 中有

  2. @Value(value = "${my.value}", encoding = "utf-8")
    private String myValue;
    

2.2  .yml

2.2.3 格式

server:port: 6666
#自定义配置类
mytest2: lisi

这个必须值的前面有空格,这里的mytets2= 张三,写成中文也不会乱码。

配置数据库连接

# 配置数据库连接
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8username: rootpassword: 123456 

对比一下:

注意转义字符

 

配置null

# Null,~表示null,下行表示null是key,而value是一个特殊的值
null.value: ~

配置对象

student:id: 1name: javaage: 18
# 或者就使用行内写法
student2: {id: 1,name: java,age: 18}

 

 从.yml读取文件举例
Student类及注意事项


import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Component
@ConfigurationProperties("student")//将配置文件的属性值与一个特定的Java类库绑定起来
@Data
//使用lombok的@Data注解,里面就是我们想要的get,set,toString等方法
public class Student {private int id;private String name;private int age;
}

注意事项 :

  •  Student类上方有@ConfigurationProperties("student")注解,并且里面写的必须与application.yml中的自定义配置对象名字一样
  • 实体类属性名要与配置中的key保持一致,并且提供settet和getter;则会就可以使用lombok中的@Data注解

@Configuration注解就是把配置文件中的某个属性值与某个特定的Java类绑定起来。

appliaction.yml

# 配置对象
student:id: 1name: javaage: 18
# 或者就使用行内写法
student2: {id: 1,name: java,age: 18}
Test

最后的打印结果

 配置集合示例

在 YAML 配置文件中,可以使用列表来定义一组值。


students:- id: 1name: Aliceage: 18- id: 2name: Bobage: 20- id: 3name: Charlieage: 22

在上面的配置中,我们定义了一个名为 `students` 的列表,其中包含了三个学生的信息,每个学生的信息又用一个 map 来表示。

在 Spring Boot 中,可以通过 `@ConfigurationProperties` 注解来将 YAML 配置文件中的值注入到 Java 对象中。例如,我们可以创建一个 `Student` 类来表示一个学生的信息:

@Data
public class Student {private int id;private String name;private int age;
}

然后,在 Spring Boot 应用程序中,可以使用以下方式将 `students` 列表中的所有元素注入到一个 `List<Student>` 对象中:


@Component
@ConfigurationProperties("students")
@Data
public class StudentConfig {private List<Student> students;
}

在上面的代码中,我们使用 `@Component` 和 `@ConfigurationProperties` 注解将 `StudentConfig` 类声明为一个 Spring Bean,并将其与 YAML 配置文件中以 `students` 为前缀的配置项绑定起来。Spring Boot 会自动将 `students` 列表中的所有元素映射为 `List<Student>` 对象的属性值。

现在,我们可以在其他组件中注入 `StudentConfig` 对象,并使用其中的 `students` 属性来获取所有学生的信息了。例如:

```java
@Service
public class StudentService {private final StudentConfig studentConfig;@Autowiredpublic StudentService(StudentConfig studentConfig) {this.studentConfig = studentConfig;}public List<Student> getAllStudents() {return studentConfig.getStudents();}
}
```

在上面的代码中,我们注入了 `StudentConfig` 对象,并在 `getAllStudents()` 方法中返回了其中的 `students` 属性。

这样,我们就可以轻松地将 YAML 配置文件中的列表注入到 Java 对象中,并在 Spring Boot 应用程序的其他组件中使用了。

 创建不同环境下的配置文件

dev开发环境中可以设置端口号:1111

prod中可以设置成别的端口号:2222

在application.yml中可以去选择使用哪一种环境

spring:profiles:active: dev

相关文章:

SpringBoot的配置文件——.yml和.properties

目录 1. Spring Boot 配置文件的使用场景 2. 配置文件的两种格式 2.0 特殊说明&#xff1a; 2.1 .properties 2.1.1 格式 2.2.2 缺陷 2.2.3 解决中文乱码的问题 2.2 .yml 2.2.3 格式 配置数据库连接 注意转义字符 ​编辑 ​编辑 配置null 配置对象 从.yml读取文件举例 Stud…...

Retrieve Anything To Augment Large Language Models

简介 论文主要介绍了一套通过对比学习和蒸馏学习的方法&#xff0c;来增强学习了embedding向量&#xff0c;然后能够在知识增强&#xff0c;长上下文建模&#xff0c;ICL和工具学习等方面来增强大模型能力。...

什么是面向对象编程

面向对象编程&#xff08;Object-oriented programming&#xff0c;简称OOP&#xff09;是一种编程范型&#xff0c;通过将数据和方法&#xff08;即属性和行为&#xff09;组织在一个单元中&#xff0c;以模拟现实世界中的实体或概念。在面向对象编程中&#xff0c;数据和方法…...

c++视觉处理----固定阈值操作:Threshold()函数,实时处理:二值化,反二值化,截断,设为零,反向设为零

固定阈值操作&#xff1a; Threshold()函数 cv::threshold() 函数是OpenCV中用于执行固定阈值二值化操作的函数。它可以用来将图像中的像素值根据用户定义的阈值转换为二进制值&#xff08;0或255&#xff09;&#xff0c;以便进行图像分割、物体检测和特征提取等任务。 cv::…...

KWin、libdrm、DRM从上到下全过程 —— drmModeAddFBxxx(8)

接前一篇文章:KWin、libdrm、DRM从上到下全过程 —— drmModeAddFBxxx(7) 上一回讲到了drm_internal_framebuffer_create函数中的framebuffer_check函数中的drm_get_format_info函数,讲解了该函数的第一部分暨前一部分,本文讲解后一部分。为了便于理解以及理清脉络和当前所…...

【问题解决】Ubuntu 安装 SeisSol 依赖 easi 报错解决: undefined reference to `H5free_memory‘

兼职帮客户安装 SeisSol 时问题解决&#xff0c;安装 easi 这个报错卡了很久&#xff08;搞了一天&#xff09;&#xff0c;记录下&#xff0c;以备后用~ # 编译器问题 rootubuntu:/opt/easi# make -j install [ 4%] Building CXX object CMakeFiles/easi.dir/src/component/…...

循环小数(Repeating Decimals, ACM/ICPC World Finals 1990, UVa202)rust解法

输入整数a和b&#xff08;0≤a≤3000&#xff0c;1≤b≤3000&#xff09;&#xff0c;输出a/b的循环小数表示以及循环节长度。例如a5&#xff0c;b43&#xff0c;小数表示为0.(116279069767441860465)&#xff0c;循环节长度为21。 解法 就是模拟竖式除法 use std::{collecti…...

[GAMES101]透视投影变换矩阵中为什么需要改变z值

一、问题提出 在GAMES101-Lecture4 Transformation Matrices 一节中&#xff0c;闫老师介绍了正交投影和透视投影。 在讲透视投影变换矩阵 M p e r s p → o r t h o M_{persp→ortho} Mpersp→ortho​时&#xff0c;同学们对矩阵中的z分量是变化的还是不变的有很多争论。即下…...

sklearn处理离散变量的问题——以决策树为例

最近做项目遇到的数据集中&#xff0c;有许多高维类别特征。catboost是可以直接指定categorical_columns的【直接进行ordered TS编码】&#xff0c;但是XGboost和随机森林甚至决策树都没有这个接口。但是在学习决策树的时候&#xff08;无论是ID3、C4.5还是CART&#xff09;&am…...

QT 数据库表格----QSqlTableModel

将数据库数据以表格的形式转化处理的方法很多&#xff0c;但我觉得QSqlTableModel这个model应算是非常好用的&#xff1b; msql.exec("create table alldata(照片,车牌号 "",入车时间,出车时间,金额,状态,看守人员);"); //创建表格 //msql 打开的数据库即Q…...

Vue_Bug Failed to fetch extension, trying 4 more times

Bug描述&#xff1a; 启动electron时出现Failed to fetch extension, trying 4 more times的问题 解决方法&#xff1a; 去src/background.js文件中进行代码注释工作 app.on(ready, async() > {// if (isDevelopment && !process.env.IS_TEST) {// // Install V…...

缩短从需求到上线的距离:集成多种工程实践的稳定框架 | 开源日报 No.55

zeromicro/go-zero Stars: 25.7k License: MIT go-zero 是一个集成了各种工程实践的 web 和 rpc 框架。通过弹性设计保障了大并发服务端的稳定性&#xff0c;经受了充分的实战检验。 go-zero 包含极简的 API 定义和生成工具 goctl&#xff0c;可以根据定义的 api 文件一键生成…...

基于秃鹰优化的BP神经网络(分类应用) - 附代码

基于秃鹰优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于秃鹰优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.秃鹰优化BP神经网络3.1 BP神经网络参数设置3.2 秃鹰算法应用 4.测试结果&#xff1a;5.M…...

C++笔记之std::future的用法

C笔记之std::future的用法 code review! 文章目录 C笔记之std::future的用法1.C中std::future和std::async总是一起出现吗&#xff1f;2.主要特点和用法3.一个完整的例子4.std::future 存放的是一个结果吗&#xff1f;5.cppreference——std::future 1.C中std::future和std::a…...

openssl学习——消息认证码原理

消息认证码原理 消息认证码&#xff08;Message Authentication Code, MAC&#xff09;是一种技术&#xff0c;它的原理是通过对消息和密钥进行特定的处理&#xff0c;生成一个固定长度的数据&#xff0c;这个数据就是消息认证码&#xff08;MAC&#xff09;。这个过程可以看作…...

Netty使用SslHandler实现加密通信-单向认证篇

引入依赖 <dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId><version>4.1.100.Final</version> </dependency>生成keystore.jks文件 keytool -genkeypair -alias your_alias -keyalg RSA -keysto…...

Jetpack:007-Kotlin中的Button

文章目录 1. 概念介绍2. 使用方法2.1 Button2.2 IconButton2.3 ElevatedButton2.4 OutlinedButton2.5 TextButton2.6 FloatingActionButton 3. 示例代码4. 内容总结 我们在上一章回中介绍了Jetpack中输入框相关的内容&#xff0c;本章回中将要介绍 Button。闲话休提&#xff0…...

opencv图形绘制2

目录 制作宣传语&#xff08;中文&#xff09; 制作宣传语&#xff08;英文&#xff09; 绘制标记 鼠标交互绘制十字线 鼠标交互绘制图形 鼠标交互制作几何画板 滚动条控制 鼠标事件练习 制作宣传语&#xff08;中文&#xff09; import cv2 import numpy as np from …...

“华为杯”研究生数学建模竞赛2019年-【华为杯】A题:无线智能传播模型(附优秀论文及Pyhton代码实现)(续)

目录 六、问题三的分析与建模 6.1 问题三的分析 6.2 问题三的建模 6.2.1 模型介绍...

爬虫 | 正则、Xpath、BeautifulSoup示例学习

文章目录 &#x1f4da;import requests&#x1f4da;import re&#x1f4da;from lxml import etree&#x1f4da;from bs4 import BeautifulSoup&#x1f4da;小结 契机是课程项目需要爬取一份数据&#xff0c;于是在CSDN搜了搜相关的教程。在博主【朦胧的雨梦】主页学到很多…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...