SpringBoot 配置文件

devtools/2025/2/4 15:57:49/

目录

一. 配置文件相关概念

二. 配置文件快速上手

 1. 配置文件的格式

2. properties 配置文件

(1) properties 基本语法

(2) 读取配置文件内容 

(3) properties 缺点分析 

3. yml配置文件

(1) yml 基本语法

 (2) 读取配置文件内容

(3) yml 配置对象

(4) yml 配置集合

(5) yml 配置map 

(6) yml 优缺点


一. 配置文件相关概念

配置文件是用于存储各种配置信息和参数设置的文件.

SpringBoot 同样也有配置文件. 其中包含很多信息 如:项目的启动端口; 数据库的连接信息; 第三方系统的调用密钥等信息; 普通日志和异常日志等.

二. 配置文件快速上手

我们在前面讲了Tomcat的默认端口号是8080, 我们程序访问时默认的端口号也是8080. 但是如果8080这个端口号已经被其他进程占用了呢? --> 此时我们就可以通过配置文件来修改服务的端口号.

 1. 配置文件的格式

配置文件有以下两种类型:

application. properties

application. yml

其中, application.yml 也可以些写作 application.yaml  (yml为yaml的简写, 两者语法和使用方式完全相同). 当应⽤程序启动时, Spring Boot 会自动从 classpath 路径找到并加载 application.properties 和 application.yml 文件.

[注]: 理论上讲, properties 和 yml 文件可以并存在一个项目中. 项目启动时, 两个文件内的配置都会加载. 当两者发生冲突时, 以properties为主 (properties的优先级更高).

2. properties 配置文件

(1) properties 基本语法

properties 文件是以键值对的形式进行配置的. 键值对中的 key 和 value 之间用 = 连接.

java">server.port=8080
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?
characterEncoding=utf8&useSSL=false
spring.datasource.name=root
spring.datasource.password=123456

(2) 读取配置文件内容 

如果在项目中,想要主动的读取配置文件中的内容, 可以使用 @Value 注解来实现.
@Value 注解使用" ${ } "的格式读取. 如下代码所示: 

properties代码:

java">mykey.key="master"

Java代码: 

java">@RestController
@RequestMapping("/demo")
public class PropertiesController {@Value("${mykey.key}")private String key;@RequestMapping("/key")public String key(){return "读到key值" + key;}
}

(3) properties 缺点分析 

[会出现冗余信息.]

properties 文件是以键值对的形式配置的. 而键难免会出现重复的信息, 这些信息就是冗余的.

java">spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8&useSSL=false
spring.datasource.name=root
spring.datasource.password=123456

 如上述代码中, datasource 这部分就是显得非常冗余.

3. yml配置文件

yml 是yaml 的缩写. yaml ("Yet Another Markup Language" -- 意为"另一种标记语言").

(1) yml 基本语法

yml 是树形结构的配置文件. 它的基础语法是 "key: value", key 和 value之间 使用空格加冒号隔开 (空格不可省略).

使用 yml 连接数据库:

java">spring:datasource:url: jdbc:mysql://127.0.0.1:3306/mycnblog?characterEncoding=utf8&useSSL=falseusername: rootpassword: 123456
# 字符串 
string.value: Hello# 布尔值,true或false 
boolean.value: true
boolean.value1: false# 整数 
int.value: 10# 浮点数 
float.value: 3.14159# Null,~代表null 
null.value: ~# "" 表示空字符串 
# 直接在键后面什么都不加也可以, 但这种⽅式不直观, 更常用的表⽰方式是使⽤引号括起来 
empty.value: ''

 (2) 读取配置文件内容

yml 读取配置文件内容的方式和properties相同, 使用 @Value 注解来实现.
@Value 注解使用" ${ } "的格式读取. 如下代码所示: 

yml 代码:

java">string:hello: "master"

Java代码: 

java">@RestController
@RequestMapping("/demo")
public class YmlController {@Value("${string.hello}")public String hello;@RequestMapping("/hello")public String hello(){return "读取到值" + hello;}
}

[注意]:

字符串默认不用加上单引号或者双引号, 如果加单双引号会表示特殊的含义.

  • 默认不加单双引号.
  • 加单引号: 特殊字符失去特殊含义, 始终是一个普通字符串.
  • 加双引号: 特殊字符表示其特殊含义.

 yml 代码:

java">string:str1: Hello \n Spring Boot.str2: 'Hello \n Spring Boot.'str3: "Hello \n Spring Boot."

 Java代码:

java">@RestController
public class ReadYml {@Value("${string.str1}")private String str1;@Value("${string.str2}")private String str2;@Value("${string.str3}")private String str3;@PostConstructpublic String readYml(){System.out.println(str1);System.out.println(str2);System.out.println(str3);return "yml";}
}

上述程序执行结果如下图所示:

(3) yml 配置对象

用yml文件也可以配置对象:

① 一般格式:

java">student:id: 1name: javaage: 20

② 行内格式:

java">student: {id: 1,name: Java,age: 18}

 注意此时就不能使用 @value 获取配置了, 需要用 @ConfigurationProperties 来读取对象.

java">@ConfigurationProperties(prefix = "student")
@Component
@Data
public class Student {private Integer id;private String name;private Integer age;
}
java">@RestController
public class StudentController {@Autowiredprivate Student student;@RequestMapping("/readStudent")public void readStudent(){System.out.println(student);}
}

运行结果如下: 

 

(4) yml 配置集合

java">dbtypes:name:- mysql- sqlserver- db2

读取集合的方式和读取对象的方式相同: 用 @ConfigurationProperties 来读取集合. 

java">@ConfigurationProperties("dbtypes")
@Component
@Data
public class ListConfig {private List<String> name;
}
java">@RestController
public class ReadYml2 {
@Autowired
private ListConfig listConfig;@RequestMapping("/readList")
public String readList(){return listConfig.toString();}
}

 

(5) yml 配置map 

java">maptypes:map:k1: v1k2: v2k3: v3

读取map的方式和读取对象的方式相同: 用 @ConfigurationProperties 来读取map.  

java">@ConfigurationProperties(prefix = "maptypes")
@Component
@Data
public class MapConfig {public Map<String,String> map;
}
java">@RestController
public class ReadYml2 {@Autowiredpublic MapConfig mapConfig;@RequestMapping("/readMap")public void readStudent(){return mapConfig.toString();}
}

(6) yml 优缺点

① yml 优点:

  • 可读性高, 写法简单, 易于理解.
  • 支持更多的数据类型, 可以简单表达对象, 数组, List, Map等数据形态.
  • 支持更多的编程语言, 不止是在Java中可以使用.

② yml 缺点:

  • 不适合写复杂的配置文件. (如果用yml写较复杂的配置文件的话, 可读性就会很差)
  • 对格式有较强的要求.

http://www.ppmy.cn/devtools/156047.html

相关文章

【大数据技术】教程03:本机PyCharm远程连接虚拟机Python

本机PyCharm远程连接虚拟机Python 注意:本文需要使用PyCharm专业版。 pycharm-professional-2024.1.4VMware Workstation Pro 16CentOS-Stream-10-latest-x86_64-dvd1.iso写在前面 本文主要介绍如何使用本地PyCharm远程连接虚拟机,运行Python脚本,提高编程效率。 注意: …

Kafka流式计算架构

引言 Kafka 凭借其卓越的架构设计&#xff0c;具备极为高效的流式计算能力&#xff0c;在海量数据环境下&#xff0c;依然能够以惊人的速度实现消息的高性能消费&#xff0c;轻松应对高并发、低延迟的严苛业务需求。无论是实时数据处理、复杂事件分析&#xff0c;还是大规模数…

NLP深度学习 DAY5:Sequence-to-sequence 模型详解

Seq2Seq&#xff08;Sequence-to-Sequence&#xff09;模型是一种用于处理输入和输出均为序列任务的深度学习模型。它最初被设计用于机器翻译&#xff0c;但后来广泛应用于其他任务&#xff0c;如文本摘要、对话系统、语音识别、问答系统等。 核心思想 Seq2Seq 模型的目标是将…

项目测试之Postman

文章目录 基础实战进行批量测试并输出报告 基础 实战 进行批量测试并输出报告 参考&#xff1a; https://blog.csdn.net/tyh_keephunger/article/details/109205191 概述 Newman是什么&#xff1f;Newman是Postman的命令行工具&#xff0c;用于执行接口测试集合。操作过程…

Leetcode 8283 移除排序链表中的重复元素

Leetcode 82&83 移除排序链表中的重复元素 Leetcode 83 题目描述 给定一个已排序的链表的头 head &#xff0c; 删除所有重复的元素&#xff0c;使每个元素只出现一次 。返回 已排序的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,1,2] 输出&#xff1a;[1,2] 示…

排序算法--插入排序

插入排序是一种简单且稳定的排序算法&#xff0c;适合小规模数据或部分有序数据。 // 插入排序函数 void insertionSort(int arr[], int n) {for (int i 1; i < n; i) { // 从第二个元素开始int key arr[i]; // 当前需要插入的元素int j i - 1;// 将比 key 大的元素向后…

680.验证回文串||

解题思路 最多删除一个字符使其成为回文串&#xff0c;首先根据回文串的特点&#xff0c;即两边互相对应。 因此判断的方法可以有两种&#xff1a; 翻转后两个字符串相同&#xff0c;是回文串使用双指针进行判断 这里需要涉及删除&#xff0c;因此使用双指针&#xff0c;l和…

DeepSeek-R1:通过强化学习激励大型语言模型(LLMs)的推理能力

摘要 我们推出了第一代推理模型&#xff1a;DeepSeek-R1-Zero和DeepSeek-R1。DeepSeek-R1-Zero是一个未经监督微调&#xff08;SFT&#xff09;作为初步步骤&#xff0c;而是通过大规模强化学习&#xff08;RL&#xff09;训练的模型&#xff0c;展现出卓越的推理能力。通过强…