SpringBoot 配置文件

ops/2025/2/1 8:11:09/

目录

一. 配置文件相关概念

二. 配置文件快速上手

 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/ops/154687.html

相关文章

反向代理模块。。

1 概念 1.1 反向代理概念 反向代理是指以代理服务器来接收客户端的请求&#xff0c;然后将请求转发给内部网络上的服务器&#xff0c;将从服务器上得到的结果返回给客户端&#xff0c;此时代理服务器对外表现为一个反向代理服务器。 对于客户端来说&#xff0c;反向代理就相当于…

基于PyQt设计的智能停车管理系统

文章目录 一、前言1.1 项目介绍【1】项目开发背景【2】设计实现的功能【3】设计意义【4】国内外研究现状【6】摘要1.2 设计思路1.3 系统功能总结1.4 开发工具的选择【1】VSCODE【2】python【3】ptqt【4】HyperLPR31.5 参考文献二、安装Python环境1.1 环境介绍**1.2 Python版本介…

黑马点评 - 商铺类型缓存练习题(Redis List实现)

首先明确返回值是一个 List<ShopType> 类型那么我们修改此函数并在 TypeService 中声明 queryTypeList 方法&#xff0c;并在其实现类中实现此方法 GetMapping("list")public Result queryTypeList() {return typeService.queryTypeList();}实现此方法首先需要…

可扩展架构:如何打造一个善变的柔性系统?

系统的构成:模块 + 关系 我们天天和系统打交道,但你有没想过系统到底是什么?在我看来,系统内部是有明确结构 的,它可以简化表达为: 系统 = 模块 + 关系 在这里,模块是系统的基本组成部分,它泛指子系统、应用、服务或功能模块。关系指模块 之间的依赖关系,简单…

C#,入门教程(13)——字符(char)及字符串(string)的基础知识

上一篇&#xff1a; C#&#xff0c;入门教程(12)——数组及数组使用的基础知识https://blog.csdn.net/beijinghorn/article/details/123918227 字符串的使用与操作是必需掌握得滚瓜烂熟的编程技能之一&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; C#语言实…

AI常见的算法和例子

人工智能&#xff08;AI&#xff09;中常见的算法分为多个领域&#xff0c;如机器学习、深度学习、强化学习、自然语言处理和计算机视觉等。以下是一些常见的算法及其用途&#xff1a; 例子代码&#xff1a;纠结哥/pytorch_learn 1. 机器学习 (Machine Learning) 监督学习 (S…

CAN总线数据采集与分析

CAN总线数据采集与分析 目录 CAN总线数据采集与分析1. 引言2. 数据采集2.1 数据采集简介2.2 数据采集实现3. 数据分析3.1 数据分析简介3.2 数据分析实现4. 数据可视化4.1 数据可视化简介4.2 数据可视化实现5. 案例说明5.1 案例1:数据采集实现5.2 案例2:数据分析实现5.3 案例3…

Android --- CameraX讲解

预备知识 surface surfaceView SurfaceHolder surface 是什么&#xff1f; 一句话来说&#xff1a; surface是一块用于填充图像数据的内存。 surfaceView 是什么&#xff1f; 它是一个显示surface 的View。 在app中仍在 ViewHierachy 中&#xff0c;但在wms 中可以理解为…