【springboot开发】Spring Boot3.3 内部配置与外部配置的差异及其应用

news/2024/12/26 12:54:58/文章来源:https://www.cnblogs.com/o-O-oO/p/18555804

在 Spring Boot 开发中,配置管理是关键的组成部分。配置不仅影响应用程序的行为,还直接关系到应用的灵活性和可维护性。Spring Boot 提供了多种方式来管理配置,其中包括内部配置和外部配置。这两种配置方式各有其优势和应用场景,了解它们的特点和使用场景有助于在开发过程中做出更合适的配置管理选择。本文将深入探讨这两种配置方式,展示它们的实现方式,并结合具体代码示例进行详细讲解。

一、内部配置与外部配置的深入对比

1.1 内部配置

内部配置 是指配置项直接写在 Spring Boot 项目的 application.properties 或 application.yml 文件中。这种方式的主要优点在于简单直接,适用于那些不需要频繁变动或在不同环境中保持一致的配置项。
内部配置通常用于以下场景:

开发阶段:开发人员在本地开发和测试时,内部配置提供了一个简单的方式来管理应用的配置。小型项目:对于配置项较少且变化不大的小型项目,内部配置能够很好地满足需求。

内部配置的缺点是配置项的变动需要修改代码并重新构建项目,这在生产环境中可能不够灵活。

1.2 外部配置

外部配置 则是将配置项放在项目外部的文件、环境变量或命令行参数中。这种方式的主要优点在于配置的灵活性和可维护性,适用于需要根据不同环境动态调整配置的场景。外部配置通常用于以下场景:

生产环境:在生产环境中,外部配置能够帮助你快速调整配置,而无需修改代码或重新构建应用。多环境支持:在同一个代码库中支持多种环境(如开发、测试、生产),外部配置能够帮助你根据不同环境加载不同的配置。

外部配置的缺点是管理和维护可能相对复杂,需要确保配置文件的安全性和正确性。

运行效果:

若想获取项目完整代码以及其他文章的项目源码,且在代码编写时遇到问题需要咨询交流,欢迎加入下方的知识星球。

1.3 项目依赖配置

以下是pom.xml文件的配置示例,包含了基本的 Spring Boot 依赖:


<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.3.3</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.icoderoad</groupId><artifactId>config-wars</artifactId><version>0.0.1-SNAPSHOT</version><name>config-wars</name><description>Demo project for Spring Boot</description><properties><java.version>17</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><scope>provided</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

application.yml 配置:

在 src/main/resources/application.yml 文件中,我们定义内部配置项:

server:port: 8080app:name: Springboot 内部配置示例description: 这是一个内部配置的示例

使用 @ConfigurationProperties 读取配置

创建配置属性类

我们可以使用 @ConfigurationProperties 注解来读取 application.yml 中的配置项。以下是一个使用 Lombok 的配置类示例:

package com.icoderoad.configwars.config;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Data
@Component
@ConfigurationProperties(prefix = "app")
public class AppProperties {private String name;private String description;
}

使用配置属性类

在控制器中使用配置类读取配置项:

package com.icoderoad.configwars.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;import com.icoderoad.configwars.config.AppProperties;@Controller
public class IndexController {@Autowiredprivate AppProperties appConfig;@GetMapping("/")public String home(Model model) {model.addAttribute("appName", appConfig.getName());model.addAttribute("appDescription", appConfig.getDescription());return "index";}
}

外部配置实现

外部配置文件

我们可以将配置放在外部文件中,例如 config/application-external.yml。在运行时,可以通过 --spring.config.additional-location 参数指定外部配置文件:

mvn clean package
java -jar ./config-wars-0.0.1-SNAPSHOT.jar --spring.config.additional-location=file:./config/application-external.yml

外部配置示例

config/application-external.yml 文件内容如下,包含中文名称和描述:

app:name: Springboot 外部配置示例description: 这是一个外部配置的示例

运行效果

无论是内部配置还是外部配置,访问 / 路径都应该显示对应的应用名称和描述。大家可以通过修改 application-external.yml 文件来验证外部配置是否生效。

前端实现

创建 Thymeleaf 模板

在 src/main/resources/templates/index.html 文件中使用 Thymeleaf 模板显示配置信息:

<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>配置示例</title><link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet">
</head>
<body><div class="container"><h1 class="mt-5">应用名称: <span th:text="${appName}">应用名称</span></h1><p>描述: <span th:text="${appDescription}">描述</span></p></div><script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script><script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.5.2/dist/umd/popper.min.js"></script><script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
</body>
</html>

运行效果

启动 Spring Boot 应用程序,访问 http://localhost:8080/,你将看到页面显示的配置信息。通过修改配置文件(内部或外部),页面内容将随之变化。

总结

在本文中,我们深入探讨了 Spring Boot 中的内部配置与外部配置的差异及其应用场景。内部配置虽然简单直观,但在生产环境中可能缺乏灵活性。外部配置提供了更高的灵活性和可维护性,适合在不同环境中动态调整配置。我们通过具体的代码示例展示了如何使用 @ConfigurationProperties 注解来读取配置,并演示了如何在项目中实现这两种配置方式。通过对前端页面的展示,我们验证了配置项的变化如何在应用中体现。希望本文能帮助大家在 Spring Boot 项目中更好地管理配置,提高开发和维护的效率。

原创 路条编程

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

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

相关文章

DCL

创建用户通过create user 来创建用户 create user 用户名;(不带密码) create user 用户名 identified by 密码;登录用户发现他可以访问的表少,权限比较少; exit 可以退出登录 用户授权 用grant all|权限1,权限2..on 数据库.表 to 用户(with grant option)【加了括号中命…

【springboot开发】Spring Boot 配置文件高级用法

一、总体优先级顺序二、应用配置文件的详细优先级三、文件类型优先级四、特定环境配置五、配置文件高级用法六、案例: 多配置文件处理方式Spring Boot配置文件的优先级是一个重要的概念,它决定了当存在多个配置文件时,哪个配置文件中的配置将被优先采用。 一、总体优先级顺序…

【微服务】微服务中token鉴权设计的4种方式总结

一、JWT鉴权1.1 概述1.2 实现步骤1.2.1 用户登录1.2.2 存储JWT 1.2.3 请求携带JWT1.2.4 服务端验证JWT 1.3 优点 二、OAuth 2.0鉴权2.1 概述2.2 实现步骤2.2.1 授权服务器2.2.2 资源服务器 2.2.3 客户端 2.3 优点三、统一授权中心(API Gateway)3.1 概述3.2 实现步骤 3.2.1 部…

【架构】一文搞懂多规格商品、组合商品模型设计

今天聊聊多规格商品、组合商品模型设计。 一、多规格商品 1.1 什么是多规格商品 多规格商品是指同一款商品具有多个不同的规格或属性,例如颜色、尺寸、材质、容量等。这些规格使得商品能够满足不同消费者的偏好和需求。在新零售系统中,多规格商品通常会以一个商品条目展示,消…

【架构】多租户系统的核心概念模型

让我们深入探讨一下多租户系统的概念模型。概念模型是多租户系统的"骨架",帮助我们理解系统各部分的组织和运作方式。 多租户的核心概念模型 • 租户:通常指一个企业客户,不同租户之间的数据和行为是相互隔离的。• 用户:某个租户内的具体使用者,使用账号、密码…

WinForm 设计器中DPI感知错误解决方法

这张图是WinForm在1080P分辨率下开发的一个Form,但是代码到高分辨率屏幕就会变成这个鸟样虽然说可以通过DPI感知让程序在运行的时候显示出正确的样式,但是这样让我们在设计的时候很是苦恼 在翻看了WinForm微软官方在Net8的更新,发现了这样的一条:我们在项目csproj里面加入一…

安装kali purple后要做的事

1、切换中文sudo dpkg-reconfigure locales翻到最后,找到zh_cn重启搞定。 2、换源vim /etc/apt/sources.list打开后注释原来的源,换上国内源。 先用 # 把原本的注释掉: 之后,在下面添加上新的源: aliyun 阿里云 deb http://mirrors.aliyun.com/kali kali-rolling main no…

博客同步到腾讯云开发者社区声明

我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=26x714yb3cb3作者:翎野君 出处:http://www.cnblogs.com/lingyejun/ 若本文如对您有帮助,不妨点击一下右下角的【推荐】。如果您喜欢或希望看到更多我…

考研打卡(22)

开局(22) 开始时间 2024-11-19 23:02:31 结束时间 2024-11-19 23:58:31今天开会,我真是碎掉了数据结构假设某段通信电文仅由 6 个字母 ABCDEF 组成, 字母在电文中出现的频率分别为 2,3,7,15,4,6。 根据这些频率作为权值构造哈夫曼编码, 终构造出的哈夫曼树带权路径长…

使用分区助手扩充C盘空间

检查设备加密状态 首先,进入设备的设置界面,查看设备加密选项是否已开启。如果加密已开启,需要先关闭加密功能。此过程大约需要十几分钟时间,具体时间取决于设备的配置和数据量。使用分区助手扩展磁盘空间选择空闲空间较多的磁盘 在分区助手中,选中一个空闲空间较多的磁盘…

DQL多表查询

select *from 表名,表名 会输出这两个表的笛卡尔积select *from 表名 限制条件表名不能在同一条指令中反复使用,所以应当起别名,如表名 别名, 表名 别名;可以自身连接查询 在select语句后面加两个相同的表 外连接查询 用inner join,需要加on select * from 表名 inner jo…

《数据结构》课程作业

第二章 PTA编程题 一共十道编程题 难度排序: \[\begin{align} 6<8<5<7<5<10<1=2<3\le 4<9 \nonumber \end{align} \]6-1 有序链表合并(无重复) 双指针法 def merge_list(la, lb):ans = LinkList()p = ans.headp1 = la.head.nextp2 = lb.head.nextwh…