SpringBoot 配置文件

1. 配置文件的作用

配置文件主要是为了解决硬编码带来的问题, 把可能会发生改变的信息,放在⼀个集中的地方, 当我们启动某个程序时, 应用程序从配置文件中读取数据, 并加载运行。

  • 硬编码是将数据直接嵌入到程序或其他可执行对象的源代码中, 也就是我们常说的"代码写死"。
  • 比如手机字体大小
    • 如果采用硬编码的⽅式, 就直接在程序中指定字体大小, 所有的用户使用的都是同⼀个字体大小
    • 但是不同的用户有不同的偏好, 我们可以把手机字体的大小放在配置文件中, 当程序启动时, 读取配置, 以用户设置的字体大小来显示。

使用配置文件, 可以使程序完成用户和应用程序的交互,或者应用程序与其他应用程序的交互。

2. SpringBoot 配置文件

SpringBoot支持并定义了配置文件的格式,也在另⼀个层面达到了规范其他框架集成到SpringBoot的目的。

很多项目或者框架的配置信息也放在配置文件中,比如:

  • 项目的启动端⼝
  • 数据库的连接信息(包含用户名和密码的设置)
  • 第三方系统的调用密钥等信息
  • 用于发现和定位问题的普通日志和异常日志等

项目的启动端口 :SpringBoot内置了Tomcat服务器, 默认端⼝号是8080,但是用户电脑上8080端口号有可能就被其他应用程序占用了, 所以SpringBoot需要支持让用户自定义端⼝号

数据库连接信息 :为了更方便简单的访问数据库,出现了⼀些持久层框架, 其实就是对JDBC进行了更深层次的封装.让用户通过简单几行代码就可完成数据库的访问。但是不同的应用程序访问的数据库不同, 这些持久层框架就需要支持用户可以自定义配置数据库的连接信息。

可以通过配置文件来修改服务的端口号。

SpringBoot 在创建项目时, 就已经帮我们创建了配置文件:

修改 application.properties 文件:

重新运行程序, 观察日志:显示Tomcat启动端口号为9090

3. 配置文件格式

Spring Boot 配置文件有以下三种:

  • application.properties
  • application.yml
  • application.yaml

yml 为yaml的简写, 实际开发中出现频率最高,yaml 和yml 的使用方式⼀样。

当应用程序启动时, Spring Boot会自动从classpath路径找到并加载 application.properties 和 application.yaml 或者 application.yml 文件。

说明

  1. 理论上讲,.properties 和 .yml 可以并存在于⼀个项目中 ,当 .properties 和 .yml 并存时,两个配置都会加载,如果配置文件内容有冲突, 则以 .properties 为主 , 也就是 .properties 优先级更高
  2. 虽然理论上来讲,.properties 可以和 .yml 共存,但实际的业务当中,我们通常会采取⼀种统⼀的配置文件格式,这样可以更好的维护(降低故障率)。

4. properties 配置文件说明

① 基本语法

properties 是以键值的形式配置的,key 和 value 之间是以 "=" 连接的,key 的所有单词小写,单词之间使用 点(.) 来分割,如:

② 读取配置文件

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

@Value 的作用:用于将单个配置项、系统属性、环境变量或 SpEL 表达式的值,注入到 Bean 的字段、方法参数或构造器参数中。

@Value 注解使用 " ${} " 的格式读取,如下代码所示:

访问:http://127.0.0.1:9090/properties/read

③ properties 缺点分析

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

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

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

5. yml 配置文件说明

yml 是 YAML 是缩写,它的全称 Yet Another Markup Language 翻译成中文就是"另⼀种标记语言我们先来学习yml的语法

① 基本语法

yml 是树形结构的配置⽂件,它的基础语法是 "key: value".

key 和 value 之间使用英文冒号加空格的方式组成,空格不可省略

基础语法如下:

使用 yml 连接数据库:

和 properties 连接数据库的配置对比,去掉了一些冗余信息。

② yml 使用

yml 配置不同数据类型及null

③ 读取配置文件

yml 读取配置的方式和 properties 相同,使用 @Value 注解即可,实现代码如下:

yml 配置:

@PostConstruct

为了方便观察,这里介绍一个注解 @PostConstruct ,@PostConstruct 的作用是:标记一个初始化方法,让容器在依赖注入完成后、Bean 正式使用前自动调用一次。即 @PostConstruct 在构造方法之后、依赖注入之后、Bean 正式使用之前执行。

Spring 创建一个 Bean,大概做这几件事:

    1. 调用构造方法,new 出对象
    1. 给对象注入依赖(@Autowired、setter 等)
    1. 调用 @PostConstruct 方法
    1. 再调用其他初始化方法(如果有)
    1. Bean 准备完毕,可以被别人使用了

读取 yml 文件:

运行结果:

  • 构造方法 -> 依赖注入 -> @PostConstruct -> 整个应用启动完成

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

字符串默认不用加上单引号或者双引号,如果加英文的单双引号可以表示特殊的含义。

尝试在 application.yml 中配置如下信息:

读取:

从上述结果可以看出:

  1. 字符串默认不用加上单引号或者双引号。
  2. 单引号会转义特殊字符,使其失去特殊功能, 始终是⼀个普通的字符串.
  3. 双引号不会转义字符串里面的特殊字符, 特殊字符会表示本身的含义.

④ 配置对象

在 yml 中配置对象:

写法和获取属性一样,只是不再是使用 @Value 注解来读,而是使用另⼀个注解 @ConfigurationProperties 来读取。

作用:把配置文件中,某个前缀下的所有配置项,一次性自动绑定到一个 Java Bean 的属性上。

@ConfigurationPropertiesprefix 属性的作用:让 Spring Boot 去配置文件里找以这个前缀开头的所有属性,把它们批量绑定到当前类的字段上,不可省略。


将配置文件中 person 对象的属性批量绑定到 Person 类中的属性上,让该类中的属性赋上配置文件中对应属性的值:

然后将Person类进行依赖注入,读取配置文件中的person对象:

⑤ 配置集合

配置文件也可以配置 list 集合,如下所示:

集合的读取和对象⼀样,也是使用 @ConfigurationProperties 来读取的,具体实现如下:

读取集合:

【配置集合和配置数组的方式是一样的,只需要将List类换成一个数据即可】

⑥ 配置Map

⑦ yml 优缺点

优点:

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

缺点:

  1. 不适合写复杂的配置文件
  2. 对格式有较强的要求
相关推荐
君顾11 小时前
外卖CPS小程序开发实战指南:从零到上线的完整流程
java·开发语言·外卖
無a伟1 小时前
RabbitMq高级特性:消息确认,持久化,重试机制
java·分布式·rabbitmq
流烟默1 小时前
xxl-job 接入 Spring 的两种方式:手动装配与自动装配(含 initMethod 双启动踩坑实录)
java·spring·xxl-job
鹅城剑仙1 小时前
Spring Boot 3 全局异常处理与统一响应封装进阶实战
java·spring boot·后端
橘子汽水1681 小时前
Leetcode 208,207实现Trie前缀树,课程表
java·数据结构·算法·leetcode
tryxr1 小时前
Chat2Excel 文件服务模块剩余功能开发
java·服务器·windows·java项目·文件服务
张小姐的猫1 小时前
【AI大模型接入SDK】 —— Ollama本地接入Deepseek
java·linux·开发语言·网络·c++·人工智能
谢亮_vipxieliang1 小时前
ValidX与Maven/Gradle集成配置指南
java·spring boot·spring·maven·hibernate
Nuanyt1 小时前
JUC常见核心知识梳理01 线程 并发 JMM volatile 管程 锁 synchronized
java·开发语言·网络·jvm