【Spring Boot 入门二】Spring Boot中的配置文件 - 掌控你的应用设置

在这里插入图片描述

一、引言

在上一篇文章中,我们开启了Spring Boot的入门之旅,成功构建了第一个Spring Boot应用。我们从环境搭建开始,详细介绍了JDK的安装以及IDE的选择与配置,然后利用Spring Initializr创建了项目,分析了项目结构,还编写了第一个简单的API并深入理解了自动配置。这一系列的操作让我们初步领略了Spring Boot在快速构建Java应用方面的强大能力。

配置文件就像是Spring Boot应用的指挥中心,它掌控着应用的各种设置。无论是定义服务器的运行参数,还是连接数据库的详细信息,又或是自定义的业务逻辑相关的属性,都离不开配置文件。合理地配置这些文件,可以让我们的应用在不同的环境(如开发环境、测试环境、生产环境)中灵活运行,同时也方便我们对应用进行定制化和维护。

二、Spring Boot配置文件的类型

1. application.properties文件

  • 基本语法和格式
    • application.properties文件采用键值对(key - value)的形式来设置配置项。每一行代表一个配置项,格式为key=value。例如,要设置服务器的端口号为8080,可以写成server.port=8080。这里的server.port就是键(key),8080就是值(value)。键是固定的配置项名称,Spring Boot会根据这些键来识别对应的配置内容。值则根据具体的配置需求而定,可以是数字、字符串、布尔值等不同的数据类型。
    • 对于一些复杂的值,如列表或者映射,可能需要使用特定的格式。例如,要配置一个包含多个数据源的列表,可以使用逗号分隔的值,像spring.datasource.url=jdbc:mysql://localhost:3306/db1,jdbc:mysql://localhost:3306/db2
  • 常见配置项示例(如服务器端口、数据库连接等)
    • 服务器端口配置:除了上面提到的server.port,我们还可以配置服务器的上下文路径。例如,server.servlet.context - path=/myapp,这意味着我们的应用将在http://localhost:8080/myapp这个路径下运行。
    • 数据库连接配置:假设我们使用MySQL数据库,配置数据库连接的相关项包括spring.datasource.url=jdbc:mysql://localhost:3306/mydb(数据库的URL),spring.datasource.username=root(数据库用户名),spring.datasource.password=123456(数据库密码),spring.datasource.driver - class - name=com.mysql.cj.jdbc.Driver(数据库驱动类名)。这些配置项告诉Spring Boot如何连接到指定的数据库。

2. application.yml文件

  • YAML语法介绍
    • YAML(YAML Ain’t Markup Language)是一种简洁的数据序列化格式。它使用缩进表示层级关系,而不是像application.properties那样使用点号(.)。在YAML中,基本的数据结构有标量(如字符串、数字、布尔值)、列表和映射。
    • 字符串不需要使用引号包裹,除非字符串中包含特殊字符或者空格。例如,name: John是合法的字符串配置。对于布尔值,truefalse直接书写即可,如enabled: true
    • 列表使用短横线(-)开头,每个元素占一行。例如:
fruits:- apple- banana- cherry
  • 映射是键值对的集合,通过缩进表示层级关系。例如:
person:name: Tomage: 25address:city: New Yorkstreet: 123 Main St
  • 对比application.properties,展示YAML的简洁性
    • 以配置服务器端口和数据库连接为例,在application.properties中我们需要这样写:
server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver - class - name=com.mysql.cj.jdbc.Driver
  • application.yml中可以写成:
server:port: 8080
spring:datasource:url: jdbc:mysql://localhost:3306/mydbusername: rootpassword: 123456driver - class - name: com.mysql.cj.jdbc.Driver
  • 可以看到,YAML格式更加直观,尤其是对于复杂的嵌套结构,YAML的可读性更强。
    - 转换application.properties中的配置到application.yml
    • 假设我们有一个application.properties文件中的配置如下:
myapp.title=My Awesome App
myapp.version=1.0
myapp.settings.enabled=true
myapp.settings.timeout=30
  • 转换为application.yml文件的配置如下:
myapp:title: My Awesome Appversion: 1.0settings:enabled: truetimeout: 30

三、自定义配置属性

1. 创建自定义配置类

  • 使用@ConfigurationProperties注解
    • 首先,我们创建一个Java类来表示我们的自定义配置。例如,我们创建一个名为AppConfig的类。在这个类中,我们可以定义各种属性来接收配置文件中的值。假设我们要配置一个邮件服务相关的设置,我们可以这样写:
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Component
@ConfigurationProperties(prefix = "mail")
public class AppConfig {private String host;private int port;private boolean enabled;public String getHost() {return host;}public void setHost(String host) {this.host = host;}public int getPort() {return port;}public void setPort(int port) {this.port = port;}public boolean isEnabled() {return enabled;}public void setEnabled(boolean enabled) {this.enabled = enabled;}
}
  • 这里的@ConfigurationProperties注解的prefix属性指定了在配置文件中对应的配置项的前缀。例如,在application.yml文件中,我们可以这样配置邮件服务:
mail:host: smtp.example.comport: 25enabled: true
  • 定义属性并设置默认值
    • 我们可以在自定义配置类中为属性设置默认值。例如,修改上面的AppConfig类:
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Component
@ConfigurationProperties(prefix = "mail")
public class AppConfig {private String host = "smtp.default.com";private int port = 25;private boolean enabled = false;// 省略getter和setter方法
}
  • 这样,如果在配置文件中没有配置mail.hostmail.port或者mail.enabled,那么就会使用默认值。

2. 在配置文件中设置自定义属性的值

  • 不同数据类型(字符串、数字、布尔值等)的配置示例
    • 字符串类型:继续以邮件服务为例,如果要配置邮件的发件人地址,我们可以在application.yml中添加如下配置:
mail:sender: sender@example.com
  • AppConfig类中添加一个private String sender;属性以及对应的gettersetter方法,就可以接收这个配置值了。
    • 数字类型:假设我们要配置邮件发送的最大重试次数,在application.yml中:
mail:max - retry - times: 3
  • AppConfig类中添加private int maxRetryTimes;属性和相应的方法。
  • 布尔值类型:如果要配置是否开启邮件的加密传输,在application.yml中:
mail:use - ssl: true
  • AppConfig类中添加private boolean useSsl;属性和相关方法。
    - 多层嵌套属性的配置
    • 假设我们的邮件服务有更复杂的配置,比如不同类型邮件(如通知邮件、营销邮件)的发送设置。我们可以这样在application.yml中配置:
mail:notification:subject - prefix: "[Notification]"enabled: truemarketing:subject - prefix: "[Marketing]"enabled: false
  • AppConfig类中,我们可以创建内部类来接收这些嵌套的配置:
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Component
@ConfigurationProperties(prefix = "mail")
public class AppConfig {private NotificationConfig notification;private MarketingConfig marketing;public NotificationConfig getNotification() {return notification;}public void setNotification(NotificationConfig notification) {this.notification = notification;}public MarketingConfig getMarketing() {return marketing;}public void setMarketing(MarketingConfig marketing) {this.marketing = marketing;}public static class NotificationConfig {private String subjectPrefix;private boolean enabled;public String getSubjectPrefix() {return subjectPrefix;}public void setSubjectPrefix(String subjectPrefix) {this.subjectPrefix = subjectPrefix;}public boolean isEnabled() {return enabled;}public void setEnabled(boolean enabled) {this.enabled = enabled;}}public static class MarketingConfig {private String subjectPrefix;private boolean enabled;public String getSubjectPrefix() {return subjectPrefix;}public void setSubjectPrefix(String subjectPrefix) {this.subjectPrefix = subjectPrefix;}public boolean isEnabled() {return enabled;}public void setEnabled(boolean enabled) {this.enabled = enabled;}}
}

四、配置文件的加载顺序

1. 不同位置的配置文件加载优先级

  • 项目根目录下的配置文件
    • 当Spring Boot应用启动时,它会首先查找项目根目录下的application.properties或者application.yml文件。这个位置的配置文件具有较高的优先级,可以用于覆盖默认的配置。例如,如果我们在项目根目录下的application.yml中设置了server.port=8090,那么这个配置将会优先于其他位置的相同配置项被加载。
  • 类路径下的配置文件
    • 如果项目根目录下没有找到配置文件,Spring Boot会在类路径(classpath)下查找application.properties或者application.yml文件。类路径下的配置文件是默认的配置来源。通常,我们在创建Spring Boot项目时,在resources文件夹下的application.yml或者application.properties就是类路径下的配置文件。这里的配置项会被加载,如果项目根目录下没有覆盖这些配置的话。
  • 外部配置文件(如通过命令行指定)
    • Spring Boot还支持通过命令行指定外部配置文件。例如,我们可以在启动应用时使用--spring.config.location=file:/path/to/external - config/application.yml这样的命令行参数来指定外部配置文件的位置。外部配置文件的优先级最高,它可以覆盖项目根目录和类路径下的相同配置项。

2. 利用加载顺序进行灵活配置

  • 覆盖默认配置的示例
    • 假设我们在类路径下的application.yml中有默认的数据库连接配置:
spring:datasource:url: jdbc:mysql://localhost:3306/defaultdbusername: defaultuserpassword: defaultpassword
  • 在开发环境中,我们可能需要连接到本地的测试数据库。我们可以在项目根目录下创建一个application.yml文件,只包含需要覆盖的配置项:
spring:datasource:url: jdbc:mysql://localhost:3306/testdbusername: testuserpassword: testpassword

这样,当在开发环境中启动应用时,就会使用项目根目录下的配置文件中的数据库连接配置,而不是类路径下的默认配置。

五、配置文件与不同环境(dev、prod等)

1. 多环境配置的概念

  • 为什么需要多环境配置
    • 在软件开发过程中,我们通常会经历多个不同的环境,如开发环境(dev)、测试环境(test)、生产环境(prod)等。不同的环境可能需要不同的配置。例如,在开发环境中,我们可能使用本地的轻量级数据库,并且日志级别设置为DEBUG以便于调试;而在生产环境中,我们会使用正式的数据库服务器,并且日志级别可能设置为INFO或者WARN以减少日志输出量,提高性能。多环境配置可以让我们在不同的环境中轻松切换应用的配置,而不需要频繁地修改配置文件中的具体内容。

2. 使用配置文件实现多环境配置

  • 基于application - {env}.properties/yml的配置
    • 在Spring Boot中,我们可以使用application - {env}.properties或者application - {env}.yml的方式来进行多环境配置。例如,我们有一个开发环境的配置文件application - dev.yml和一个生产环境的配置文件application - prod.yml
    • application - dev.yml中,我们可以配置适合开发环境的设置,如:
server:port: 8081
spring:datasource:url: jdbc:mysql://localhost:3306/devdbusername: devuserpassword: devpasswordprofiles:active: dev
logging:level:root: DEBUG
  • application - prod.yml中,配置适合生产环境的设置:
server:port: 80
spring:datasource:url: jdbc:mysql://prod - db - server:3306/proddbusername: produserpassword: prodpasswordprofiles:active: prod
logging:level:root: INFO
  • 激活不同环境的方式(如通过命令行参数、系统环境变量)
    • 通过命令行参数:我们可以在启动应用时使用--spring.profiles.active=dev或者--spring.profiles.active=prod这样的命令行参数来激活对应的环境配置。例如,java - jar myapp.jar --spring.profiles.active=dev会激活开发环境的配置。
    • 通过系统环境变量:我们也可以设置系统环境变量SPRING_PROFILES_ACTIVE的值来激活环境。例如,在Linux系统中,我们可以使用export SPRING_PROFILES_ACTIVE=prod来设置环境变量,然后启动应用时就会使用生产环境的配置。

六、总结与展望

在这篇文章中,我们深入探讨了Spring Boot中的配置文件。我们了解了两种主要的配置文件类型application.propertiesapplication.yml,它们各自的语法和特点,以及如何相互转换。我们还学习了如何创建自定义配置属性,通过@ConfigurationProperties注解来实现配置与Java类的绑定。同时,我们明白了配置文件的加载顺序,以及如何利用这个顺序进行灵活的配置覆盖。最后,我们掌握了多环境配置的方法,通过application - {env}.properties/yml的方式和不同的激活环境的手段(命令行参数、系统环境变量),可以让我们的应用在不同的环境中顺利运行。

在下一篇文章中,我们将进入Spring Boot与数据库集成的精彩世界。我们会探讨如何选择适合我们应用的数据库,如何在Spring Boot项目中添加数据库相关的依赖,如何进行数据库连接配置,以及如何使用JPA(Java Persistence API)进行数据持久化等重要内容。这将为我们构建数据驱动的应用奠定坚实的基础。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

黑马linux笔记(转载)

学习链接 视频链接:黑马程序员新版Linux零基础快速入门到精通 原文链接:黑马程序员新版Linux零基础快速入门到精通——学习笔记 黑马Linux笔记 文章目录 学习链接01初识Linux1.1、操作系统概述1.1.1、硬件和软件1.1.2、操作系统1.1.3、常见操作系统 1.…

SSM人才信息招聘系统-计算机毕业设计源码28084

摘要 本研究旨在基于Java和SSM框架设计并实现一个人才信息招聘系统,旨在提升招聘流程的效率和精准度。通过深入研究Java和SSM框架在Web应用开发中的应用,结合人才招聘领域的需求,构建了一个功能完善、稳定高效的招聘系统。利用SSM框架的优势&…

数据订阅与消费中间件Canal 服务搭建(docker)

MySQL Bin-log开启 进入mysql容器 docker exec -it mysql5.7 bash开启mysql的binlog cd /etc/mysql/mysql.conf.dvi mysqld.cnf #在文件末尾处添加如下配置(如果没有这个文件就创建一个) [mysqld] # 开启 binlog log-binmysql-bin #log-bin/var/lib/mys…

CSP-J模拟赛三补题报告

前言 挂了110pts( ⇑ \Uparrow ⇑ \hspace{14em} 有史以来最大傻逼 T1: 100 p t s \color{green}100pts 100pts T2: 100 p t s → 80 p t s \color{green}100pts\color{yellow}\rightarrow\color{red}80pts 100pts→80pts T3: 100 p t s → 10 p t s \color{gre…

k8s架构,从clusterIP到光电半导体,再从clusterIP到企业管理

clusterIP作为k8s中的服务, 也是其他三个服务的基础 ~]$ kubectl create service clusterip externalname loadbalancer nodeport 客户端的流量到service service分发给pod,pod由控制器自动部署,自动维护 那么问题是service的可用…

【C++前缀和】1895. 最大的幻方|1781

本文涉及的基础知识点 C算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 LeetCode1895. 最大的幻方 难度分:1781 一个 k x k 的 幻方 指的是一个 k x k 填满整数的方格阵,且每一行、每一列以及两条对角线的和 全部相…

ubuntu 设置静态IP

一、 ip addresssudo nano /etc/netplan/50-cloud-init.yaml 修改前: 修改后: # This file is generated from information provided by the datasource. Changes # to it will not persist across an instance reboot. To disable cloud-inits # ne…

360浏览器时不时打不开csdn

从百度或者csdn的搜索中打开,会发现打不开网页,以前也出现过,只是以为这篇文章被删了,昨天接连多个文章打不开,怀疑的浏览器的问题,复制网址到edge浏览器就打开了 刚刚又出现了,怀疑360会拦截某…

Elasticsearch——数据聚合、数据同步与集群搭建

目录 1.数据聚合1.1.聚合的种类1.2.DSL实现聚合1.2.1.Bucket 聚合语法1.2.2.聚合结果排序1.2.3.限定聚合范围1.2.4.Metric 聚合语法1.2.5.小结 1.3.RestAPI 实现聚合1.3.1.API 语法1.3.2.业务需求1.3.3.业务实现 2.自动补全2.1.拼音分词器2.2.自定义分词器2.3.自动补全查询2.4.…

使用百度文心智能体创建多风格表情包设计助手

文章目录 一、智能定制,个性飞扬二、多元风格,创意无限 百度文心智能体平台为你开启。百度文心智能体平台,创建属于自己的智能体应用。百度文心智能体平台是百度旗下的智能AI平台,集成了先进的自然语言处理技术和人工智能技术&…

C++ STL 初探:打开标准模板库的大门

文章目录 C STL 初探:打开标准模板库的大门前言第一章: 什么是STL?1.1 标准模板库简介1.2 STL的历史背景1.3 STL的组成 第二章: STL的版本与演进2.1 不同的STL版本2.2 STL的影响与重要性 第三章: 为什么学习 STL?3.1 从手动编写到标准化解决方…

C++网络编程之TCP协议

概述 TCP,即传输控制协议,英文全称为Transmission Control Protocol,是互联网协议套件中的核心协议之一。它工作在OSI七层模型的传输层,也工作在TCP/IP四层模型的传输层。TCP协议的主要目的是:在不可靠的网络环境中提供…

腾讯一面-LRU缓存

为了设计一个满足LRU(最近最少使用)缓存约束的数据结构,我们可以使用哈希表(HashMap)来存储键值对,以便在O(1)时间复杂度内访问任意键。同时,我们还需要一个双向链表(Doubly Linked …

飞创龙门双驱XYZ直线模组高精度应用实例

飞创龙门双驱XYZ直线模组集超精密定位、高动态响应和灵活配置于一体,适用于电子制造行业(点胶、组装、检测)、半导体圆晶加工、芯片封装、激光切割、激光焊接、数控机床、精密检测及科研实验等,满足高精度、高动态的三维定位需求&…

NVIDIA Hopper 架构深入

在 2022 年 NVIDIA GTC 主题演讲中,NVIDIA 首席执行官黄仁勋介绍了基于全新 NVIDIA Hopper GPU 架构的全新 NVIDIA H100 Tensor Core GPU。 文章目录 前言一、NVIDIA H100 Tensor Core GPU 简介二、NVIDIA H100 GPU 主要功能概述1. 新的流式多处理器 (SM) 具有许多性能和效率…

Golang | Leetcode Golang题解之第452题用最少数量的箭引爆气球

题目&#xff1a; 题解&#xff1a; func findMinArrowShots(points [][]int) int {if len(points) 0 {return 0}sort.Slice(points, func(i, j int) bool { return points[i][1] < points[j][1] })maxRight : points[0][1]ans : 1for _, p : range points {if p[0] > …

docker下载mysql时出现Unable to pull mysql:latest (HTTP code 500) server error 问题

报错 Unable to pull mysql:latest (HTTP code 500) server error - Get “https://registry-1.docker.io/v2/”: EOF 解决方法 将VPN开到Global模式 解决啦

从面向过程(pop)到面向对象(oop)

文章目录 1. 情境2. 抛出问题3. 给出解决方案4. 方案存在的bug5. 补救措施6. 得出结论&#xff1a;该方案实际是不可行的7. 总结上述代码思考方式 -- 基于过程① 思考方式② 上述思考方式存在的问题基于过程的思维方式核心基于过程的思维方式的缺点 8. 转变思维&#xff0c;引出…

无水印短视频素材下载网站有哪些?十个高清无水印视频素材网站分享

你知道怎么下载无水印视频素材吗&#xff1f;今天小编就给大家推荐十个高清无水印视频素材下载的网站&#xff0c;如果你也是苦于下载高清无水印的短视频素材&#xff0c;赶紧来看看吧&#xff5e; 1. 稻虎网 首推的是稻虎网。这个网站简直就是短视频创作者的宝库。无论你需要…