Spring Boot 框架中的配置文件

news2025/1/10 20:43:48

一、配置文件作用

整个项目中所有重要的数据都是在配置文件中配置的,比如:
  • 数据库的连接信息(包含用户名和密码的设置);
  • 项目的启动端口;
  • 第三方系统的调用秘钥等信息;
  • 用于发现和定位问题的普通日志和异常日志等。
想象一下如果没有配置信息,那么 Spring Boot 项目就 不能连接和操作数据库 ,甚至是 不能保存可以用 于排查问题的关键日志 ,所以配置文件的作用是非常重要的。

二、配置文件的格式

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

如下图所示:

这就好像连锁店里面的统一服装一样,有两种不同的款式, properties 类型的配置文件就属于老款 服饰” ,也是创建 Spring Boot 项目时默认的文件格式(主要是由于仓库里还有库存 ) ,而 yml 属于新版款式,如果用户了解情况直接指定要新款服饰,那么就直接发给他。

特殊说明

1. 理论上讲 properties 可以和 yml 一起存在于一个项目当中,当 properties yml 一起存在一个项目中时,如果配置文件中出现了同样的配置,比如 properties yml 中都配置了 “server.port”
那么这个时候会以 properties 中的配置为主,也就是 ** .properties 配置文件的优先级最高,但加
载完 .properties 文件之后,也会加载 .yml 文件的配置信息 **
2. 虽然理论上来讲 .properties 可以和 .yml 共存,但实际的业务当中,我们通常会采取一种统一的配置文件格式,这样可以更好的维护(降低故障率)。这就好像连锁店的服饰一样,不管是老款的服装还是新款的服装,一定要统一了才好看。

为配置文件安装提示插件

IDEA 社区版安装 Spring Assistant 插件之后,就可以正常创建 Spring Boot 项目了,并且 yml 的配置文件就有提示了。但默认情况下是不支持 properties 格式的日志提示的,这个时候需要安装了 Spring Tools 插件才会有相应的提示。

 

3.properties 配置文件说明

properties 配置文件是最早期的配置文件格式,也是创建 Spring Boot 项目默认的配置文件。

3.1 properties 基本语法

properties 是以键值的形式配置的, key value 之间是以 “=” 连接的,如:
# 配置项目端口号
server.port=8084
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
PS :小技巧:配置文件中使用 “#” 来添加注释信息。

3.2 读取配置文件

如果在项目中,想要主动的读取配置文件中的内容,可以使用 @Value 注解来实现。
@Value 注解使用 “${}” 的格式读取,如下代码所示:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@Component
public class ReadYml {
@Value("${server.port}")
private String port;
@PostConstruct
public void postConstruct() {
System.out.println("Read YML,port:" + port);
    }
}
最终执行效果:
@Component Spring Boot 启动时候会注入到框架中,注入到框架中时会执行
@PostConstruct 初始化方法,这个时候就能读取到配置信息了。

3.3 properties 缺点分析

properties 配置是以 key-value 的形式配置的,如下图所示:

从上述配置key看出,properties 配置文件中会有很多的冗余的信息,比如这些

 想要解决这个问题,就可以使用 yml 配置文件的格式化了。

4.yml 配置文件说明

yml YMAL 是缩写,它的全称 Yet Another Markup Language 翻译成中文就是 另一种标记语言 。yml 是一个可读性高,易于理解,用来表达数据序列化的格式。它的语法和其他高级语言类似,并且可以简单表达清单(数组)、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件等。
yml 最大的优势是可以跨语言 ,不止是 Java 中可以使用 golang python 都可以使用 yaml 作为配置文件。

4.1 yml 基本语法

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

 

其中第一项的配置为正确的, key 也是高亮显示的,而第二项没有空格是错误的使用方式,第二项的key 也没有高亮显示。

使用 yml 连接数据库

yml 使用示例:
spring:
datasource:
url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8
username: root
password: root
yml properties 连接数据库的配置对比

 

4.2 yml 的高级使用使用

4.2.1 yml 配置不同数据类型及 null

# 字符串
string.value: Hello
# 布尔值,true或false
boolean.value: true
boolean.value1: false
# 整数
int.value: 10
int.value1: 0b1010_0111_0100_1010_1110 # 二进制
# 浮点数
float.value: 3.14159
float.value1: 314159e-5 # 科学计数法
# Null,~代表null
null.value: ~

4.2.1.1 yml 配置读取

yml 读取配置的方式和 properties 相同,使用 @Value 注解即可,实现代码如下:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@Component
public class ReadYml {
@Value("${string.hello}")
private String hello;
@PostConstruct
public void postConstruct() {
System.out.println("Read YML,Hello:" + hello);
    }
}

 

4.2.1.2 注意事项:value 值加单双引号

字符串默认不用加上单引号或者双引号,如果加英文的单双引号可以表示特殊的含义。
我们在 application.yml 中配置如下信息:
string:
str1: Hello \n Spring Boot.
str2: 'Hello \n Spring Boot.'
str3: "Hello \n Spring Boot."
读取程序实现代码如下:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@Component
public class ReadYml {
@Value("${string.str1}")
private String str1;
@Value("${string.str2}")
private String str2;
@Value("${string.str3}")
private String str3;
@PostConstruct
public void postConstruct() {
System.out.println("string.str1:" + str1);
System.out.println("string.str2:" + str2);
System.out.println("string.str3:" + str3);
    }
}
以上程序的执行结果如下图所示:

 

从上述结果可以看出:
  • 字符串默认不用加上单引号或者双引号。
  • 单引号会转义特殊字符,特殊字符最终只是一个普通的字符串数据。
  • 双引号不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思。

4.2.2 配置对象

我们还可以在 yml 中配置对象,如下配置:
student:
id: 1
name: Java
age: 18
或者是使用行内写法(与上面的写法作用一致):
student: {id: 1,name: Java,age: 18}
这个时候就不能用 @Value 来读取配置中的对象了,此时要使用另一个注解 @ConfigurationProperties
来读取,具体实现如下:
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@ConfigurationProperties(prefix = "student")
@Component
public class StudentComponent {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "StudentComponent{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
    }
}
注意:以上代码中的 getter setter 方法不能省略。
调用类的实现如下:
@Component
public class ReadYml2 {
@Autowired
private StudentComponent studentComponent;
@PostConstruct
public void postConstruct() {
System.out.println(studentComponent);
    }
}
以上程序的执行结果如下图所示:

4.2.3 配置集合

配置文件也可以配置 list 集合,如下所示:
dbtypes:
name:
- mysql
- sqlserver
- db2
或者是使用行内写法(与上面的写法作用一致):
dbtypes: {name: [mysql,sqlserver,db2]}
集合的读取和对象一样,也是使用 @ConfigurationProperties 来读取的,具体实现如下:
@Component
@ConfigurationProperties("dbtypes")
@Data
public class ListConfig {
private List<String> name;
}
打印类的实现如下:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@Component
public class ReadYml2 {
@Autowired
private ListConfig listConfig;
@PostConstruct
public void postConstruct() {
System.out.println(listConfig.getName());
    }
}

5.properties VS yml 总结

  • properties 是以 key=value 的形式配置的键值类型的配置文件,而 yml 使用的是类似 json 格式的树形配置方式进行配置的,yml 层级之间使用换行缩进的方式配置,key value 之间使用“: ”英文冒号加空格的方式设置,并且空格不可省略。
  • properties 为早期并且默认的配置文件格式,但其配置存在一定的冗余数据,使用 yml 可以很好的解决数据冗余的问题。
  • yml 通用性更好,支持更多语言,如 JavaGoPython 等,如果是云服务器开发,可以使用一份配置文件作为 Java Go 的共同配置文件。
  • yml 虽然可以和 properties 共存,但一个项目中建议使用统一的配置类型文件。

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

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

相关文章

小红书如何引流推广,小红书app评论图片脚本实操教学分享

大家好&#xff0c;我是小刘互联网思维。最近小红书越来越火&#xff0c;所以很多人或者小团队也都盯上了这个新兴市场。有人选择手动引流&#xff0c;就一定有人想软件引流&#xff0c;有些朋友就私信问我这个软件引流要怎么操作&#xff0c;接下来我就为大家简单讲解小红书脚…

多线程下的OOM问题

多线程下的OOM问题 前言问题排查日志查看代码查看集群查看问题解决 多线程OOM时候的回收测试代码启动参数设置控制台打印 前言 最近的一台服务器出现了OOM的情况&#xff0c;出于好奇就进行了一些探查&#xff0c;这里做一些简单的记录 问题排查 日志查看 登陆服务器查看当…

24考研数据结构-线性表3

目录 2.4 线性表的链式表示2.4.0 引入的原因2.4.1 单链表的定义 2.4.2 单链表的两种实现形式2.4.2.1 不带头结点的单链表2.4.2.2 带头结点的单链表2.4.2.3知识回顾与重要考点2.4.3.1 带头结点的单链表按位序插入节点2.4.3.2 单链表的插入节点的时间复杂度2.4.3.3 不带头结点的单…

Ceph网络模型

Ceph网络模型 Ceph 生产环境中一般分为两个网段公有网络: 用于用户的数据通信集群网络: 用于集群内部的管理通信

mac m1 触控栏TouchBar功能栏异常

电脑可能在高温下运行时间过长&#xff0c;导致TouchBar之前正常显示的调整屏幕亮度与调整声音等功能的按钮均丢失&#xff0c;然后看了一眼键盘设置&#xff0c;设置也是正常的&#xff0c;已勾选显示功能栏 下面请看 如何在MacBook Pro&#xff08;macOS Monterey&#xff0…

2023年深圳杯数学建模赛题浅析

由于今明两日由于一些不可避免的事情&#xff0c;这里仅仅先给大家简单写一个赛题浅析&#xff0c;详细过程步骤思路以及讲解视频预计后天发布 A题 影响城市居民身体健康的因素分析 A题以慢性病为命题背景&#xff0c;给出数据以及题目初步来看来看为一个数据处理数据分析的综…

elasticsearch查询操作(DSL语句方式)

说明&#xff1a;本文介绍在kibana&#xff0c;es的可视化界面上对文档的查询操作&#xff1b; 添加数据 先使用API&#xff0c;创建索引库&#xff0c;并且把数据从MySQL中查出来&#xff0c;传到ES上&#xff0c;参考&#xff08;http://t.csdn.cn/NaTHg&#xff09; 索引库…

Ceph部署方法介绍

Ceph部署方法介绍 Installing Ceph — Ceph Documentation Ceph环境规划 admin是一个部署节点

Centos7 扩容(LVM 和非 LVM)

一、磁盘扩容方式 CentOS 系统的磁盘扩容可以分为两种方式&#xff1a;LVM 管理和非 LVM 管理。 LVM 管理的分区和传统分区方式是可以共存的。在同一个系统中&#xff0c;你可以同时使用 LVM 管理的分区和传统分区。 例如&#xff0c;在 CentOS 系统中&#xff0c;你可以选择将…

《重构的时机和方法》书籍推荐

《重构的时机和方法》是一本由克里斯蒂安克劳森(Christian Clausen)所著&#xff08;郭涛翻译&#xff09;的软件工程经典之作。本书全面介绍了重构的概念、原则和方法&#xff0c;为软件开发者提供了一系列宝贵的指导和实践经验。在这篇书评文章中&#xff0c;我将从内容、实用…

Linux环境安装Tomcat

在tomcat官网(下载路径)下载好tomcat压缩包 上传服务器压缩到/usr/tomcat目录下 tar -zxvf xxx.tar.gz 配置tomcat环境变量 export CATALINA_HOME/usr/tomcat/apache-tomcat-8.5.56 export CATALINE_BASE/usr/tomcat/apache-tomcat-8.5.56 export PATH$PATH:$CATALINA_BASE/bi…

阿克曼转向模型介绍

阿克曼转向模型介绍 目录 阿克曼转向模型介绍是什么&#xff1f;基本原理应用与改进 是什么&#xff1f; 阿克曼转向是一种现代汽车的转向方式&#xff0c;在汽车转弯的时候&#xff0c;内外轮转过的角度不一样&#xff0c;内侧轮胎转弯半径小于外侧轮胎。 它描述了汽车转向系…

Spring中如何用注解方式存取JavaBean?有几种注入方式?

博主简介&#xff1a;想进大厂的打工人博主主页&#xff1a;xyk:所属专栏: JavaEE进阶 本篇文章将讲解如何在spring中使用注解的方式来存取Bean对象&#xff0c;spring提供了多种注入对象的方式&#xff0c;常见的注入方式包括 构造函数注入&#xff0c;Setter 方法注入和属性…

TypeError: can‘t convert np.ndarray of type numpy.object_.

在处理数据集的时候出现报错&#xff1a; TypeError: can’t convert np.ndarray of type numpy.object_. The only supported types are: float64, float32, float16, complex64, complex128, int64, int32, int16, int8, uint8, and bool. train_labels torch.tensor(train…

手机怎么压缩pdf?这种压缩方法简单易用

手机怎么压缩pdf&#xff1f;PDF文件是我们生活和工作中常用的一种文档格式&#xff0c;但是有时候PDF文件的大小会很大&#xff0c;不方便发送和存储。那么&#xff0c;如何在手机上压缩PDF文件呢&#xff1f;下面就给大家介绍一种简单好用的压缩方法。 今天要给大家介绍的这款…

甘特图的发展史

目录 背景: 过程: 总结&#xff1a; 背景: 1910年代初为了管理工程项目的进度而创造了甘特图。 1917年&#xff0c;美国工程师亨利甘特(Henry Laurence Gantt)首次提出了甘特图的概念。他是一位工程师和管理学家&#xff0c;设计了一种图表&#xff0c;用于显示进度成产仅度…

毕业生求职招聘网站的设计与实现JAVA(SpringBoot+VUE+Mysql)

由SpringBootVUEMysql实现的网站的设计 功能模块 设计思路&#xff1a;主要分为管理员、毕业生、招聘企业三大身份模块 首先是登录界面 注册界面 其次就是公共页面 公共页面又分为首页、空中宣讲会、招聘岗位、求职信息、论坛信息、试卷列表、招聘资讯、个人中心和后台管理、…

【原创】内网穿透案例

案列一&#xff08;Frp内网渗透&#xff09; 大概图列网上随便找的&#xff0c;路线是这个样子 这里选用ctfshow的一道命令执行题 由Frp实现内网访问及扫描 1.传入一句话&#xff0c;上线蚁剑http://b85fdf24-b98e-4810-9e76-a038a8987630.challenge.ctf.show:8080/?cecho…

C语言--位段

C语言—位段 文章目录 C语言---位段一、位段是什么&#xff1f;二、位段的内存分配三&#xff0c;位段的跨平台问题四&#xff0c;位段的应用 一、位段是什么&#xff1f; 位段的声明和结构是类似的&#xff0c;有两个不同&#xff1a; 位段的成员必须是 int、unsigned int 或…

代码随想录day12 | [前、中、后、层]二叉树的遍历迭代法和递归法

文章目录 一、前后中序递归法二、前后序迭代法三、中序遍历迭代法四、层序遍历 递归三部曲&#xff1a; 1️⃣ 第一步确定递归函数的返回值和参数 2️⃣第二步确定递归的终止条件 3️⃣第三步确定单层递归处理的逻辑 一、前后中序递归法 前序遍历二叉树 class Solution { pr…