在 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 项目中更好地管理配置,提高开发和维护的效率。
原创 路条编程