Spring Boot 核心配置文件

一、引言

在 Spring Boot 应用的开发与部署过程中,核心配置文件起着至关重要的作用。它们就像是应用程序的指挥中心,决定了从服务器端口、数据库连接到各种框架和组件的行为方式。理解 Spring Boot 的核心配置文件是开发人员有效定制和管理应用程序的关键。

二、Spring Boot 核心配置文件的类型

(一)application.properties 文件

  1. 格式与特点
    • application.properties 是一种传统的基于键值对的配置文件格式。它使用简单的文本形式,每行一个配置项,格式为 “key=value”。这种格式简单明了,易于理解和编辑。例如:

server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/mydb

  1. 历史渊源
    • 它继承自 Java 应用程序配置的传统方式,在 Spring Boot 出现之前,许多 Java 应用程序就使用类似的属性文件来配置。Spring Boot 对其进行了扩展和增强,使其能够更好地与 Spring 框架和各种第三方库集成。

(二)application.yml 文件

  1. 格式与特点
    • application.yml 文件采用 YAML(YAML Ain't Markup Language)格式。YAML 以其简洁的语法和对层次结构的良好支持而受到青睐。它使用缩进表示层级关系,例如:

server:port: 8080
spring:datasource:url: jdbc:mysql://localhost:3306/mydb

这种格式在配置复杂的嵌套结构时更加清晰,减少了视觉上的混乱。
2. 优势与适用场景

  • 对于具有多层级配置的 Spring Boot 应用,如复杂的数据库连接配置、多个数据源配置或者配置与 Spring Cloud 相关的微服务配置等,yml 格式能够更直观地呈现信息。而且,它在处理列表和映射类型的配置时更加方便。例如,配置一个包含多个配置项的缓存配置:
spring:cache:cache-names:- cache1- cache2type: simple

三、核心配置文件的位置与加载规则

(一)classpath 根目录下

  1. 自动加载机制
    • Spring Boot 会自动在 classpath 的根目录下查找 application.properties 和 application.yml 文件。当应用程序启动时,这些文件中的配置会被加载并应用到整个应用程序中。
  2. 示例说明
    • 假设我们有一个简单的 Spring Boot 项目,在 src/main/resources 目录(classpath 根目录)下有一个 application.properties 文件,其中配置了服务器端口:

server.port=8081

当启动应用程序时,它将使用 8081 作为服务器端口,而不是 Spring Boot 的默认端口 8080。

(二)特定环境的配置文件

  1. 基于 profile 的配置原理
    • Spring Boot 支持根据不同的运行环境(profile)加载不同的配置文件。可以创建 application-{profile}.properties 或 application-{profile}.yml 文件,其中 {profile} 是特定的环境名称,如 dev(开发环境)、test(测试环境)、prod(生产环境)等。
  2. 激活 profile 的方式
    • 可以通过多种方式激活 profile。常见的方法包括在命令行中使用参数 “--spring.profiles.active=dev”,或者在 application.properties 或 application.yml 文件中设置 “spring.profiles.active=dev”。
  3. 示例
    • 假设在项目中有 application-dev.properties 和 application-prod.properties 文件。在 application-dev.properties 中配置数据库连接为开发环境的数据库:

spring.datasource.url=jdbc:mysql://localhost:3306/devdb

在 application-prod.properties 中配置为生产环境的数据库:

spring.datasource.url=jdbc:mysql://prodserver:3306/proddb

当通过命令行激活 dev 这个 profile 时,应用程序将使用开发环境的数据库连接。

(三)外部配置文件

  1. 命令行指定配置文件位置
    • 可以通过命令行参数 “--spring.config.location=/path/to/external/config/application.properties” 指定外部配置文件的位置。这种方式允许在不修改打包后的应用程序的情况下,使用特定位置的配置文件。
  2. 加载优先级
    • 外部指定的配置文件优先级高于 classpath 下的配置文件。这意味着如果在外部配置文件和 classpath 下的配置文件中有相同的配置项,外部配置文件中的配置将生效。
  3. 示例
    • 假设在打包后的应用程序的 classpath 下的 application.properties 中有 server.port=8080,但通过命令行指定了一个外部配置文件,其中 server.port=8082,那么应用程序将使用 8082 作为服务器端口。

四、核心配置文件中的常见配置项

(一)服务器相关配置

  1. 服务器端口配置
    • 在 Spring Boot 中,最常见的服务器相关配置是服务器端口。使用 “server.port” 配置项可以指定应用程序监听的端口。例如:
server.port=8083

这在需要在同一台机器上运行多个应用程序或者在特定环境下使用指定端口时非常有用。
2. 服务器上下文路径

  • 可以通过 “server.servlet.context-path” 配置项设置服务器的上下文路径。例如:
server.servlet.context-path=/myapp

这样,应用程序的所有 URL 都将在 “/myapp” 这个上下文路径下,如访问一个控制器的 URL 可能变成 “http://localhost:8083/myapp/user”。

(二)数据库连接配置

  1. 基本的数据库连接 URL、用户名和密码
    • 对于常见的数据库(如 MySQL、Oracle、PostgreSQL 等),需要配置数据库连接 URL、用户名和密码。以 MySQL 为例:
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=secret

这些配置项告诉 Spring Boot 如何连接到数据库,是数据库操作的基础。
2. 数据库连接池相关配置

  • 除了基本的连接信息,还可以配置数据库连接池的参数。例如,对于 HikariCP(Spring Boot 默认的连接池),可以配置最大连接数、最小连接数、连接超时时间等:
spring.datasource.hikari.maximum-pool-size=10
spring.datasource.hikari.minimum-idle=5
spring.datasource.hikari.connection-timeout=30000

合理配置连接池参数可以提高数据库访问性能和稳定性。

(三)日志配置

  1. 日志级别设置
    • 可以通过 “logging.level” 配置项设置不同包或类的日志级别。例如:
logging.level.root=INFO
logging.level.com.example.mypackage=DEBUG

这里将根日志级别设置为 INFO,将特定包 “com.example.mypackage” 的日志级别设置为 DEBUG,以便在开发和调试过程中获取更详细的信息。
2. 日志文件配置

  • 可以指定日志文件的路径和名称,以及日志文件的滚动策略等。例如:
logging.file.name=/var/log/myapp.log
logging.file.max-size=10MB
logging.file.max-history=10

这将把日志输出到指定的文件中,并在文件大小达到 10MB 时进行滚动,最多保留 10 个历史日志文件。

(四)Spring 相关框架配置

  1. Spring Data JPA 配置
    • 对于使用 Spring Data JPA 的应用程序,可以配置实体扫描路径、数据库方言等。例如:
spring.data.jpa.repositories.base-package=com.example.repository
spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect

这里指定了 JPA 仓库的扫描包和使用的数据库方言。
2. Spring Security 配置

  • 在 Spring Security 相关的配置中,可以设置用户认证、授权等信息。例如:
spring.security.user.name=admin
spring.security.user.password=admin123
spring.security.user.roles=USER,ADMIN

这是一种简单的设置内置用户认证信息的方式,在开发和测试阶段可以快速建立安全机制。

五、配置文件中的高级特性

(一)配置文件中的占位符

  1. 基本占位符用法
    • Spring Boot 配置文件支持使用占位符来引用其他配置项或环境变量。例如:
app.name=MyApp
app.description=This is ${app.name}

这里在 “app.description” 配置项中使用了占位符 “${app.name}”,它会被替换为 “MyApp”。
2. 引用环境变量作为占位符

  • 还可以引用环境变量作为占位符。例如:
server.port=${PORT:8080}

这里表示如果环境变量 “PORT” 存在,则使用其值作为服务器端口,否则使用默认值 8080。

(二)多文档块(仅 YAML 文件)

  1. 多文档块的概念与用法
    • 在 YAML 文件中,可以使用多文档块来在一个文件中定义多个配置集。每个文档块以 “---” 分隔。这种方式在需要为不同的 profile 或不同的情况定义配置时非常有用。例如:
server:port: 8080
---
spring:profiles: dev
server:port: 8081
---
spring:profiles: prod
server:port: 8082

这里定义了一个默认的服务器端口 8080,以及针对 dev 和 prod 两个 profile 的不同端口配置。
2. 激活特定文档块的方式

  • 通过激活相应的 profile 来选择使用哪个文档块。例如,当激活 dev 这个 profile 时,服务器端口将使用 8081。

(三)配置文件的加密(可选的安全增强方式)

  1. 加密的必要性与场景
    • 在某些情况下,配置文件中的敏感信息(如数据库密码、第三方 API 密钥等)需要进行加密。特别是在生产环境中,防止配置文件中的敏感信息泄露是非常重要的安全措施。
  2. 实现加密的方式(以 Jasypt 为例)
    • 可以使用第三方库如 Jasypt(Java Simplified Encryption)来实现配置文件的加密。首先需要在项目中引入 Jasypt 依赖,然后在配置文件中配置加密相关的参数和加密后的密文。例如:
jasypt.encryptor.password=secretKey
spring.datasource.password=ENC(encryptedPassword)

这里 “jasypt.encryptor.password” 是加密和解密的密钥,“spring.datasource.password” 中的 “ENC (encryptedPassword)” 表示加密后的数据库密码。

六、实际案例分析

(一)案例背景

假设有一个电商应用程序,使用 Spring Boot 开发。这个应用程序需要在开发、测试和生产环境下运行,并且需要连接到不同环境下的数据库,同时需要配置合适的服务器端口、日志级别和安全机制。

(二)技术选型

  1. 数据库选择 MySQL
    • 在不同环境下使用不同的 MySQL 数据库实例,开发环境使用本地数据库,测试环境使用测试服务器上的数据库,生产环境使用生产服务器上的数据库。
  2. 服务器选择 Tomcat(Spring Boot 内置的默认服务器)
    • 根据不同环境设置服务器端口和上下文路径。
  3. 日志框架选择 Logback(Spring Boot 默认的日志框架)
    • 配置不同环境下的日志级别和日志文件输出。
  4. 安全框架选择 Spring Security
    • 配置用户认证和授权机制,在不同环境下可能有不同的用户设置。

(三)核心配置文件的具体配置

  1. classpath 根目录下的配置文件
    • 在 application.properties 文件中,设置一些通用的配置:
server.servlet.context-path=/ecommerce
logging.level.root=INFO

这将应用程序的上下文路径设置为 “/ecommerce”,并将根日志级别设置为 INFO。
2. 基于 profile 的配置文件

  • 在 application-dev.properties 文件中:
server.port=8081
spring.datasource.url=jdbc:mysql://localhost:3306/devdb
spring.datasource.username=devuser
spring.datasource.password=devpass
spring.security.user.name=devadmin
spring.security.user.password=devadmin123
logging.level.com.example.ecommerce=DEBUG

这里为开发环境配置了服务器端口、数据库连接信息、安全用户信息和特定包的日志级别。

  • 在 application-test.properties 文件中:
server.port=8082
spring.datasource.url=jdbc:mysql://testserver:3306/testdb
spring.datasource.username=testuser
spring.datasource.password=testpass
spring.security.user.name=testadmin
spring.security.user.password=testadmin123

这是测试环境的配置,类似地调整了端口、数据库连接和安全信息。

  • 在 application-prod.properties 文件中:
server.port=8083
spring.datasource.url=jdbc:mysql://prodserver:3306/proddb
spring.datasource.username=produser
spring.datasource.password=prodpass
spring.security.user.name=prodadmin
spring.security.user.password=prodadmin123
logging.file.name=/var/log/ecommerce.log
logging.file.max-size=20MB
logging.file.max-history=20

这是生产环境的配置,除了端口、数据库和安全信息外,还配置了更详细的日志文件输出。
3. 外部配置文件(用于生产环境的敏感信息)

  • 在生产环境部署时,通过命令行参数指定外部配置文件,该文件包含了生产数据库的真实密码等敏感信息。例如:
spring.datasource.password=realprodpass

这里的 “realprodpass” 是加密后的密码(假设使用了加密机制)。

(四)效果评估

  1. 环境适应性
    • 通过使用不同的 profile 和外部配置文件,应用程序能够很好地适应不同的环境。开发人员可以在本地开发环境中使用开发配置进行快速开发和调试,测试人员可以在测试环境中进行全面的测试,运维人员可以在生产环境中安全地部署和运行应用程序。
  2. 配置灵活性
    • 开发人员可以根据需要轻松地修改配置文件中的各种配置项。无论是调整服务器端口、数据库连接还是日志级别,都可以通过简单地编辑配置文件或使用命令行参数来实现。这种灵活性提高了开发和运维的效率。
  3. 安全性
    • 在生产环境中,通过使用外部配置文件和加密机制,有效地保护了敏感信息,降低了安全风险。即使配置文件被泄露,攻击者也难以获取到真实的敏感数据。

七、总结

Spring Boot 的核心配置文件是开发和管理 Spring Boot 应用程序的关键部分。无论是简单的键值对配置还是复杂的多环境、多层次结构配置,它们都为开发人员提供了丰富的手段来定制应用程序的行为。通过合理利用配置文件的各种特性,如占位符、多文档块和加密等,可以进一步增强配置的灵活性和安全性。在实际应用中,深入理解和熟练掌握核心配置文件的使用方法,能够使 Spring Boot 应用程序在不同的场景和环境下高效、稳定地运行。

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

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

相关文章

低功耗WTK6900P语音ic方案助力电子烟技术革新 打造个性化吸烟体验

在这个科技日新月异的时代,每一个细节的创新都是对传统的一次超越。今天,我们自豪地宣布一项革命性的融合——将先进的频谱技术与电子烟相结合,通过WTK6900P芯片的卓越性能,为您开启前所未有的个性化吸烟体验。这不仅是一次技术的…

《基于深度学习的车辆行驶三维环境双目感知方法研究》

复原论文思路: 《基于深度学习的车辆行驶三维环境双目感知方法研究》 1、双目测距的原理 按照上述公式算的话,求d的话,只和xl-xr有关系,这样一来,是不是只要两张图像上一个测试点的像素位置确定,对应的深…

Chromium 中sqlite数据库操作演示c++

本文主要演示sqlite数据库 增删改查创建数据库以及数据库表的基本操作,仅供学习参考。 一、sqlite数据库操作类封装: sql\database.h sql\database.cc // Copyright 2012 The Chromium Authors // Use of this source code is governed by a BSD-sty…

Qt初识简单使用Qt

使用C代码实现hello world 之前介绍过用图形化界面的方式创建hello world&#xff0c;这里我们使用C代码的方式再来实现一次hello world。 如上&#xff0c;首先要先包含一个头文件。 在QT这里&#xff0c;每一个类都有一个对应的同名头文件。比如这里我就包含了 <QLabel&…

高效运维:构建全面监控与自动化管理体系

在当今数字化时代&#xff0c;企业IT系统的稳定运行直接关系到业务的连续性和竞争力。运维团队作为保障系统稳定运行的中坚力量&#xff0c;面临着前所未有的挑战。随着云计算、大数据、物联网等技术的快速发展&#xff0c;系统架构日益复杂&#xff0c;运维工作也从传统的被动…

Docker网络和overlay的基础讲解

本人发现了两篇写的不错的文章&#xff1a;Docker网络 - docker network详解-CSDN博客&#xff0c;Docker 容器跨主机通信 overlay_docker overlay 网络-CSDN博客 因为这两篇文章中含有大量的例子&#xff0c;新手看起来毫不费力。于是我偷了个小懒&#xff0c;在本篇文章中没有…

C++开发基础之使用librabbitmq库实现RabbitMQ消息队列通信

1. 前言 RabbitMQ是一个流行的开源消息队列系统&#xff0c;支持多种消息协议&#xff0c;广泛用于构建分布式系统和微服务架构。可以在不同应用程序之间实现异步消息传递。在本文中&#xff0c;我们将熟悉如何使用C与RabbitMQ进行消息通信。 2. 准备工作 在 Windows 平台上…

vue elementui el-dropdown-item设置@click无效的解决方案

如图&#xff0c;直接在el-dropdown-item上面设置click&#xff0c;相应的method并没有被触发&#xff0c;查找资料发现需要在它的上级 el-dropdown 处使用 command 方法触发。 【template】 <el-dropdown placement"bottom-end" command"handleCommand&quo…

使用docker-compose单点搭建社区版seafile+onlyoffice在线word编辑平台

文章目录 前言一、平台介绍1. seafile平台介绍2. onlyoffice平台介绍 二、版本信息三、基础信息准备1.docker配置文件2.准备目录 四、onlyoffice部署五、seafile平台部署1.准备seafile.yaml文件2.运行平台 六、双平台对接总结 前言 记录使用docker-compose单点搭建社区版seafi…

游戏引擎学习第七天

视频参考:https://www.bilibili.com/video/BV1QFmhYcE69 ERROR_DEVICE_NOT_CONNECTED 是一个错误代码&#xff0c;通常在调用 XInputGetState 或 XInputSetState 函数时返回&#xff0c;表示指定的设备未连接。通常会出现以下几种情况&#xff1a; 未连接控制器&#xff1a;如…

计算机的错误计算(一百五十二)

摘要 探讨 MATLAB 中双曲正弦函数 sinh(x)与双曲余弦函数 cosh(x)的计算精度问题。 例1. 已知 计算 以及 直接贴图吧&#xff1a; 另外&#xff0c;16或17位的正确值分别为 0.5168712762709208e1、0.52645599648397069e1、0.2140244217618104e247 与 0.2140244217…

【C++】详解RAII思想与智能指针

&#x1f308; 个人主页&#xff1a;谁在夜里看海. &#x1f525; 个人专栏&#xff1a;《C系列》《Linux系列》 ⛰️ 丢掉幻想&#xff0c;准备斗争 目录 引言 内存泄漏 内存泄漏的危害 内存泄漏的处理 一、RAII思想 二、智能指针 1.auto_ptr 实现原理 模拟实现 弊端…

JDBC-Dao层模式

分层思维 分层思维是软件架构设计的一种重要思想&#xff0c;它通过将应用程序划分为多个相互独立且依赖关系的层。 通常分为以下三层关系。 web层&#xff1a;主要负责与用户进行交互&#xff0c;处理请求。 service层&#xff1a;业务逻辑层&#xff0c;主要负责处理应用程序…

三种单例实现

1、不继承Mono的单例 实现 使用 注&#xff1a; 使用需要继承BaseManager 泛型填写自己本身 需要实现无参构造函数 2、挂载式的Mono单例 实现 使用 注&#xff1a; 使用需要继承SingletonMono 泛型填写自己本身 需要挂载在unity引擎面板 3、不用挂载式的单例 实现 使…

Flink API 的层次结构

Apache Flink 提供了多层 API&#xff0c;每层 API 针对不同的抽象层次和用途&#xff0c;使得开发者可以根据具体需求选择合适的 API 层次。以下是 Flink API 的层次结构及其简要说明&#xff1a;

DHCP与DNS安全管理

一、DHCPSnooping的攻击防范功能配置&#xff08;路由器&#xff09; 1.启动设备 2.将pc设为DHCP获取IP地址 3.配置DHCP [AR1]dhcp enable //启动DHCP服务 [AR1]ip pool aaa //设置地址池 [AR1-ip-pool-aaa]network 192.168.10.0 mask 24 //设置地址范围 [AR1-ip-poo…

51c视觉~合集6

我自己的原文哦~ https://blog.51cto.com/whaosoft/11603901 #CSWin-UNet 将自注意力机制集成到UNet中&#xff01;CSWin-UNet&#xff1a;U型分割方法&#xff0c;显著提高计算效率和感受野交互&#xff01;本文提出了CSWin-UNet&#xff0c;这是一种新颖的U型分割方法&…

深度学习服务器租赁AutoDL

省钱绝招 #AutoDL #GPU #租显卡

设备接入到NVR管理平台EasyNVR多品牌NVR管理工具/设备的音视频配置参考

NVR管理平台EasyNVR是一款功能强大的安防视频监控平台&#xff0c;能够轻松实现视频流的导入、录像、存储和回放等功能。在将设备接入到海康NVR管理平台EasyNVR时&#xff0c;视音频配置是确保视频监控效果的重要步骤。本文将详细介绍如何将设备接入到EasyNVR平台&#xff0c;并…

35.3K+ Star!PhotoPrism:一款基于AI的开源照片管理工具

PhotoPrism 简介 PhotoPrism[1] 是一个为去中心化网络设计的AI照片应用,它利用最新技术自动标记和查找图片,实现自动图像分类与本地化部署,你可以在家中、私有服务器或云端运行它。 项目特点 主要特点 浏览所有照片和视频,无需担心RAW转换、重复项或视频格式。 使用强大的…