网站域名要钱吗,python做一个简单的网页,品牌 网站建设,网站开发子账号SpringBoot中的多环境配置管理 文章目录 SpringBoot中的多环境配置管理SpringBoot中的多环境配置管理 多环境配置的概述1. 为什么需要多环境配置#xff1f;2. Spring Boot 中如何实现多环境配置#xff1f;3. 多环境配置的应用场景4. 如何实现配置隔离#xff1f; Spring B…SpringBoot中的多环境配置管理 文章目录 SpringBoot中的多环境配置管理SpringBoot中的多环境配置管理 多环境配置的概述1. 为什么需要多环境配置2. Spring Boot 中如何实现多环境配置3. 多环境配置的应用场景4. 如何实现配置隔离 Spring Boot 中的配置文件管理1. 配置文件的类型2. 配置文件的基本结构3. 配置文件的优先级与加载顺序4. Profile 和配置文件的切换5. 配置文件的外部化6. 敏感信息的管理7. 多环境配置的最佳实践 使用 Profiles 管理不同环境配置1. 什么是 Profile2. 如何使用 Profiles 管理环境配置2.1 定义和激活 Profile2.2 根据 Profile 加载配置文件 3. 使用 Profile 注解在代码中区分不同环境4. 配置文件的优先级与覆盖5. Spring Boot Profile 的常见实践 Spring Boot 配置的外部化1. 外部化配置的概念2. 外部化配置的常见方式2.1 使用外部配置文件2.2 使用环境变量2.3 通过命令行参数2.4 使用 Spring Cloud Config 3. 优先级与加载顺序4. 敏感信息的外部化5. 配置文件的分层管理 不同环境配置的实现1. Spring Boot 配置文件的多环境管理1.1 Profile 的概念1.2 不同环境的配置文件1.3 Profile 的激活1.4 配置文件的加载顺序 2. 环境特定配置的管理2.1 开发环境配置 (application-dev.properties)2.2 生产环境配置 (application-prod.properties)2.3 测试环境配置 (application-test.properties) 3. 配置的外部化 配置文件加密与敏感数据保护1. 敏感数据保护的需求2. 配置文件加密的策略3. Spring Boot 配置文件的加密4. Jasypt 配置文件加密4.1 引入 Jasypt 依赖4.2 加密配置属性4.3 在配置文件中使用加密后的数据4.4 配置解密 5. 使用 Spring Cloud Config 与 Vault 保护敏感数据5.1 配置 Vault5.2 Spring Cloud Config 集成 Vault5.3 从 Vault 获取配置6. 环境变量加密配置 SpringBoot中的多环境配置管理
在开发实际的 Java 应用时通常会遇到不同的运行环境比如开发环境、测试环境和生产环境。每个环境都有不同的配置需求例如数据库连接信息、服务端口、日志级别等。如果我们没有一个灵活的机制来区分和管理这些不同环境下的配置代码中的配置就会变得混乱且不易维护。 Spring Boot 提供了强大的多环境配置管理功能能够帮助我们根据不同的环境加载不同的配置文件从而让应用在不同的环境下能保持一致性和灵活性。通过合理使用 Spring Boot 的 Profile 功能我们可以在开发、测试和生产等不同环境中动态地切换配置避免了硬编码配置的麻烦提高了系统的可维护性。
多环境配置的概述
在开发和部署应用程序时通常会遇到多个不同的运行环境例如开发环境、测试环境和生产环境。这些环境之间的差异主要体现在配置上包括数据库连接、服务端口、日志级别、API 密钥等。为了更好地管理这些差异Spring Boot 提供了多环境配置的机制允许在不同的环境下加载不同的配置文件从而使应用在各个环境中保持灵活性和一致性。 1. 为什么需要多环境配置
多环境配置的需求来源于应用在不同阶段和环境中可能需要不同的设置。比如
● 开发环境我们通常使用本地的数据库、较低的日志级别、调试信息等。
● 测试环境需要连接到测试数据库执行一些集成测试可能会使用一些测试专用的配置。
● 生产环境生产环境中的数据库通常需要更高的安全性和性能日志级别也可能需要调整为较低的日志记录级别以提高系统性能。
通过将这些配置分开我们能够更好地管理应用程序并确保它在不同环境下的表现符合预期。
2. Spring Boot 中如何实现多环境配置
Spring Boot 通过 Profiles 来支持多环境配置允许在不同环境中加载不同的配置文件。每个配置文件可以针对不同的环境做出定制比如
● application.properties 或 application.yml这是 Spring Boot 默认的配置文件。
● application-dev.properties 或 application-dev.yml用于开发环境的配置文件。
● application-prod.properties 或 application-prod.yml用于生产环境的配置文件。
Spring Boot 通过 spring.profiles.active 属性来标记当前使用的配置文件动态切换不同的环境配置。
3. 多环境配置的应用场景
● 开发在开发过程中通常会使用本地数据库、调试模式和其他开发工具的配置。
● 测试集成测试、单元测试等需要连接测试环境的数据库或第三方服务并根据测试要求配置环境。
● 生产生产环境通常需要更高的安全性和性能配置比如使用外部服务、生产级数据库连接、严格的日志管理等。
4. 如何实现配置隔离
在 Spring Boot 中可以通过以下方式实现不同环境的配置隔离
● Profile 区分配置使用 Profile 注解或在配置文件中通过 application-{profile}.properties 来区分环境。
● 外部化配置Spring Boot 支持将配置放在外部文件或系统环境变量中从而使得每个环境的配置不需要硬编码到应用中。
Spring Boot 中的配置文件管理
在 Spring Boot 中配置文件是管理应用程序设置的关键部分。Spring Boot 提供了一种简单而灵活的方式来处理配置支持多种配置格式、层次结构、环境隔离等特性。 1. 配置文件的类型
Spring Boot 默认支持两种配置文件格式
● application.properties这是传统的 Java 属性文件格式每个配置项以 keyvalue 的形式存在。
● application.ymlYAML 格式的配置文件比 properties 格式更具层次性和可读性尤其对于结构化数据的表示非常方便。
这些文件可以存放在项目的 src/main/resources 目录下并且可以根据不同的环境进行灵活管理。
2. 配置文件的基本结构
● application.properties 示例
server.port8080
spring.datasource.urljdbc:mysql://localhost:3306/mydb
spring.datasource.usernameroot
spring.datasource.passwordsecret● application.yml 示例
server:port: 8080
spring:datasource:url: jdbc:mysql://localhost:3306/mydbusername: rootpassword: secretYAML 格式通过层级缩进来表示结构能够更清晰地组织和表达配置数据。
3. 配置文件的优先级与加载顺序
Spring Boot 在启动时会按照一定的顺序加载配置文件配置文件的加载优先级依次递增 命令行参数通过命令行传入的参数优先级最高。 application.properties 或 application.yml项目中的配置文件默认加载。 外部配置文件可以通过 spring.config.location 指定外部的配置文件路径。 环境变量如果没有在配置文件中找到某项配置Spring Boot 会查找环境变量。 Java System 属性如 -D 参数传入的系统属性。
4. Profile 和配置文件的切换
在 Spring Boot 中Profile 是一种用于标识不同运行环境的机制可以帮助我们在不同的环境下加载不同的配置。
● 指定 Profile可以在 application.properties 或 application.yml 中使用 spring.profiles.active 属性指定当前的运行环境如开发、测试、生产等。
spring.profiles.activedev● 环境特定的配置文件可以创建专门为某个环境定制的配置文件如 application-dev.properties、application-prod.properties。这些文件会根据当前活动的 Profile 被自动加载。
○ application-dev.properties 示例
spring.datasource.urljdbc:mysql://dev-db:3306/mydb○ application-prod.properties 示例
spring.datasource.urljdbc:mysql://prod-db:3306/mydb5. 配置文件的外部化
Spring Boot 允许将配置文件外部化避免硬编码在应用中。常见的外部化方式有
● 通过命令行参数指定
java -jar myapp.jar --spring.config.locationfile:/path/to/application.properties● 通过环境变量指定在容器化应用中如 Docker可以通过环境变量来指定配置。
● 配置文件路径的优先级spring.config.location 和 spring.config.name 可以用于指定文件的位置和名称。
6. 敏感信息的管理
在配置文件中可能会涉及到敏感信息如数据库密码、API 密钥等。Spring Boot 提供了多种方式来保护这些敏感配置
● 加密配置使用 jasypt-spring-boot 等工具来加密配置文件中的敏感信息。
● 环境变量管理将敏感信息放在系统环境变量中而非配置文件中。
7. 多环境配置的最佳实践
在 Spring Boot 项目中推荐使用如下方式来管理多环境配置 使用不同的配置文件为不同的环境如开发、测试、生产创建不同的配置文件并通过 spring.profiles.active 动态切换。 外部化配置配置文件放置在项目之外通过命令行、环境变量等方式动态传入避免将敏感信息和配置暴露在代码中。 减少重复配置利用 Spring Boot 提供的配置继承和共享功能减少不同环境中重复配置的量。 集中管理敏感配置使用配置中心如 Spring Cloud Config集中管理敏感信息和环境配置。
使用 Profiles 管理不同环境配置
在开发和部署应用程序时通常会遇到不同的运行环境例如开发环境、测试环境、生产环境等。每个环境的配置需求往往不同比如数据库连接、服务端口、日志级别等。为了在不同的环境中灵活地加载和管理配置Spring Boot 提供了 Profiles 功能来实现多环境配置的管理。
1. 什么是 Profile
Spring Boot 的 Profile 是一种标识和管理不同环境的机制可以根据当前激活的 Profile 来加载不同的配置文件或配置项。通过 Profile开发者可以在开发、测试、生产等多个环境中维护不同的配置避免在同一个配置文件中管理所有环境的配置。
2. 如何使用 Profiles 管理环境配置
2.1 定义和激活 Profile
Profile 是通过 Profile 注解或者通过配置文件来激活的。在 Spring Boot 中可以通过两种方式来指定当前使用的 Profile
在配置文件中设置 在 application.properties 或 application.yml 文件中可以通过 spring.profiles.active 来设置当前激活的 Profile。
# application.properties
spring.profiles.activedev或者在 application.yml 中设置
spring:profiles:active: dev这里dev 就是当前激活的 Profile。
通过命令行参数激活 在启动应用时可以通过命令行传入 -Dspring.profiles.active 参数来指定 Profile。例如
java -jar myapp.jar --spring.profiles.activeprod通过环境变量激活 还可以通过系统环境变量 SPRING_PROFILES_ACTIVE 来指定激活的 Profile。例如在 Linux 或 macOS 中
export SPRING_PROFILES_ACTIVEprod然后启动应用。
2.2 根据 Profile 加载配置文件
Spring Boot 会根据当前激活的 Profile 来加载对应的配置文件。例如假设你有多个不同环境的配置文件
● application-dev.properties开发环境配置
● application-prod.properties生产环境配置
● application-test.properties测试环境配置
如果在 application.properties 或 application.yml 中配置了 spring.profiles.activedev那么 Spring Boot 会加载 application-dev.properties 文件中的配置。不同的 Profile 可以有不同的配置文件Spring Boot 会根据激活的 Profile 加载与之匹配的配置文件。
3. 使用 Profile 注解在代码中区分不同环境
除了在配置文件中使用 ProfileSpring Boot 还允许我们在代码中使用 Profile 注解来根据 Profile 的激活与否选择是否加载某些 Bean。例如
Configuration
Profile(dev)
public class DevConfig {Beanpublic DataSource dataSource() {// 开发环境的数据源配置return new DataSource(dev-db-url);}
}Configuration
Profile(prod)
public class ProdConfig {Beanpublic DataSource dataSource() {// 生产环境的数据源配置return new DataSource(prod-db-url);}
}在上面的示例中只有当 dev Profile 被激活时DevConfig 中的配置才会生效只有当 prod Profile 被激活时ProdConfig 中的配置才会生效。
4. 配置文件的优先级与覆盖
在多个配置文件中如果有相同的配置项Spring Boot 会根据文件的加载顺序和 Profile 的优先级来决定最终的配置值。例如 application.properties所有环境通用的配置。 application-dev.properties开发环境专用配置。 application-prod.properties生产环境专用配置。
如果在 application.properties 中配置了 server.port8080在 application-prod.properties 中配置了 server.port80并且激活了 prod Profile那么最终的端口配置会使用 application-prod.properties 中的 server.port80。
5. Spring Boot Profile 的常见实践
● 使用环境变量通过环境变量来设置不同的 Profile可以方便地在不同的部署环境中切换配置。
● 配置多套数据库连接开发环境使用本地数据库生产环境使用生产数据库测试环境使用专门的测试数据库。可以通过不同的 Profile 文件来配置不同的数据库连接。
● 不同的日志级别配置在开发环境中可能需要更详细的日志信息而生产环境则需要更简洁的日志以提高性能。通过 Profile 可以灵活配置不同的日志级别。
● 外部配置管理可以通过外部的配置文件来管理环境配置使得应用可以在不同环境下保持一致性尤其适合容器化和微服务架构中的配置管理。
Spring Boot 配置的外部化
Spring Boot 提供了灵活的配置机制可以轻松将应用程序的配置外部化避免将敏感信息如数据库密码、API 密钥等硬编码在代码中。外部化配置不仅可以使应用程序更具可维护性还能提高灵活性和安全性。尤其在容器化、微服务架构中外部化配置变得尤为重要。
1. 外部化配置的概念
外部化配置指的是将应用程序的配置从代码中分离出来将其存储在外部位置如文件、环境变量、配置服务器等。Spring Boot 支持从多种外部源加载配置这样就可以避免每次更改配置时都需要重新构建和部署应用程序。
2. 外部化配置的常见方式
Spring Boot 提供了多种外部化配置的方式可以根据需求选择合适的方法。
2.1 使用外部配置文件
Spring Boot 支持将配置文件放在项目外部或者通过命令行传入外部配置。常见的做法是使用 application.properties 或 application.yml并将其存放在外部目录。
通过命令行参数指定配置文件路径可以通过 --spring.config.location 参数指定配置文件的路径。例如在启动命令中指定配置文件
java -jar myapp.jar --spring.config.locationfile:/path/to/application.properties通过环境变量指定配置文件路径使用环境变量来指定配置文件的位置。在 Linux 或 macOS 中
export SPRING_CONFIG_LOCATION/path/to/application.properties
java -jar myapp.jar2.2 使用环境变量
Spring Boot 支持通过操作系统的环境变量来覆盖配置文件中的设置。环境变量的优先级高于配置文件中的属性特别适合用于存储敏感信息或在生产环境中动态配置参数。
● 通过环境变量配置数据库连接
export SPRING_DATASOURCE_URLjdbc:mysql://localhost:3306/mydb
export SPRING_DATASOURCE_USERNAMEroot
export SPRING_DATASOURCE_PASSWORDsecret这些环境变量会覆盖 application.properties 文件中的相应配置。
2.3 通过命令行参数
Spring Boot 允许在启动应用时通过命令行参数传递配置值命令行参数的优先级最高。例如
java -jar myapp.jar --server.port8081 --spring.datasource.urljdbc:mysql://localhost:3306/testdb这将覆盖 application.properties 中的相应配置。
2.4 使用 Spring Cloud Config
对于复杂的微服务架构Spring Cloud 提供了配置中心Spring Cloud Config来集中管理和外部化配置。配置中心可以将所有应用的配置统一存储在 Git 仓库、数据库或文件系统中并通过 HTTP 服务提供给应用使用。
配置中心的工作原理
○ 应用从 Spring Cloud Config 服务器拉取配置。
○ 配置可以按环境、按应用进行划分支持动态刷新和更新。
配置中心的优势
○ 集中管理多个微服务共享配置统一管理。
○ 动态刷新通过 Spring Cloud Bus 可以实现配置的动态刷新无需重启应用。
○ 版本控制通过 Git 实现配置的版本控制。
3. 优先级与加载顺序
Spring Boot 会按照一定的优先级加载配置项如果不同来源的配置项有重复后加载的配置将覆盖前加载的配置。配置的加载顺序如下 命令行参数优先级最高。 application.properties 或 application.yml项目中的配置文件。 外部配置文件通过 spring.config.location 指定的外部配置文件。 环境变量操作系统的环境变量。 系统属性如 -D 参数传入的系统属性。
因此如果在不同的位置配置了相同的属性Spring Boot 会使用优先级更高的配置。
4. 敏感信息的外部化
为了确保应用程序的安全性敏感信息如数据库密码、API 密钥等不应该存储在版本控制系统中。Spring Boot 提供了以下几种方式来处理敏感信息
● 环境变量将敏感信息存储在环境变量中而不是硬编码在配置文件中。
● 加密配置使用加密工具如 Jasypt加密配置文件中的敏感信息然后在运行时解密。
例如使用 Jasypt 加密 application.properties 文件中的数据库密码
spring.datasource.passwordENC(encrypted_password)5. 配置文件的分层管理
为了管理不同环境下的配置Spring Boot 允许根据不同的 Profile 使用不同的配置文件。例如可以为开发、测试、生产环境创建不同的配置文件Spring Boot 会根据当前激活的 Profile 加载相应的配置。
● application-dev.properties开发环境配置。
● application-prod.properties生产环境配置。
● application-test.properties测试环境配置。
激活 Profile 后Spring Boot 会自动加载相应的配置文件
# application.properties
spring.profiles.activedev或者通过命令行参数指定 Profile
java -jar myapp.jar --spring.profiles.activeprod不同环境配置的实现
在实际的开发和部署中应用程序通常需要在多个环境中运行例如开发环境、测试环境和生产环境。每个环境的配置通常会有所不同如数据库连接、缓存配置、日志级别等。Spring Boot 提供了多种方式来管理和切换不同环境的配置以便在不修改代码的情况下能够根据环境的不同自动加载对应的配置。
1. Spring Boot 配置文件的多环境管理
Spring Boot 允许通过使用不同的配置文件来管理不同环境的配置。我们可以为每个环境创建独立的配置文件并通过 Profile 来指定当前激活的环境。Spring Boot 会根据激活的 Profile 加载对应的配置文件。
1.1 Profile 的概念
Profile 是 Spring 框架的一种机制用于标识和区分不同的环境。通过 Profile可以在开发环境、测试环境和生产环境之间切换配置确保每个环境有合适的配置。
1.2 不同环境的配置文件
Spring Boot 通过 application.properties 或 application.yml 文件来存储配置。为了支持多环境配置我们可以创建多个配置文件按照环境的不同进行区分。
● application.properties 或 application.yml用于存储通用配置。
● application-dev.properties 或 application-dev.yml用于开发环境配置。
● application-prod.properties 或 application-prod.yml用于生产环境配置。
● application-test.properties 或 application-test.yml用于测试环境配置。
1.3 Profile 的激活
要使用不同的配置文件必须激活相应的 ProfileSpring Boot 提供了几种激活 Profile 的方式
通过 spring.profiles.active 设置可以在 application.properties或 application.yml 中通过 spring.profiles.active 属性来指定激活的 Profile。例如
# application.properties
spring.profiles.activedev或者在 application.yml 中
spring:profiles:active: dev通过命令行参数激活可以在启动应用时通过命令行传递 --spring.profiles.active 来激活 Profile
java -jar myapp.jar --spring.profiles.activeprod通过环境变量激活可以通过设置操作系统的环境变量来激活 Profile。例如在 Linux 或 macOS 中
export SPRING_PROFILES_ACTIVEprod
java -jar myapp.jar通过 Profile 注解激活在 Java 类中使用 Profile 注解只有当指定的 Profile 被激活时相关的 Bean 才会被加载
Configuration
Profile(dev)
public class DevConfig {Beanpublic DataSource dataSource() {return new DataSource(jdbc:mysql://localhost:3306/devdb);}
}1.4 配置文件的加载顺序
Spring Boot 会根据 Profile 的优先级顺序加载配置文件 application.properties 或 application.yml这是全局的配置文件适用于所有环境。 application-{profile}.properties 或 application-{profile}.yml根据激活的 Profile 加载相应的配置文件。例如如果激活的是 dev Profile则加载 application-dev.properties 文件中的配置。 命令行参数和环境变量如果配置文件中存在重复的属性命令行参数和环境变量的值会覆盖配置文件中的值。
2. 环境特定配置的管理
为了更好地管理不同环境的配置常见的做法是将敏感信息和环境特定的配置如数据库连接、第三方服务的 API 密钥、日志级别等单独管理。
2.1 开发环境配置 (application-dev.properties)
开发环境中的配置通常比较宽松适合进行调试和测试。常见的开发环境配置有
●数据库连接使用本地数据库或开发环境的数据库。
●日志级别通常设置为 DEBUG以便在开发过程中查看详细的日志信息。
●缓存配置开发环境可能不需要使用高性能的缓存或者使用本地缓存。
# application-dev.properties
spring.datasource.urljdbc:mysql://localhost:3306/devdb
spring.datasource.usernamedev_user
spring.datasource.passworddev_password
logging.level.rootDEBUG2.2 生产环境配置 (application-prod.properties)
生产环境配置需要更加严格和高效通常包括
●数据库连接连接生产数据库通常使用更高效、稳定的数据库连接池。
●日志级别生产环境通常设置为 INFO 或 WARN以减少日志量避免暴露敏感信息。
●安全配置生产环境可能需要配置更严格的安全措施如 HTTPS、API 密钥等。
# application-prod.properties
spring.datasource.urljdbc:mysql://prod-db-server:3306/proddb
spring.datasource.usernameprod_user
spring.datasource.passwordprod_password
logging.level.rootINFO2.3 测试环境配置 (application-test.properties)
测试环境中的配置主要用于单元测试和集成测试通常包括
●使用测试数据库如 H2 数据库或内存数据库。
●配置测试特定的日志级别和性能参数。
●配置模拟服务或 Mock 数据。
# application-test.properties
spring.datasource.urljdbc:h2:mem:testdb
spring.datasource.usernametest_user
spring.datasource.passwordtest_password
logging.level.rootDEBUG3. 配置的外部化
对于一些敏感数据如数据库密码、API 密钥等可以将配置外部化到环境变量、命令行参数或配置服务器中避免将敏感信息写入配置文件。Spring Boot 支持从环境变量、JNDI、命令行参数、Spring Cloud Config 等多种外部化方式读取配置。
配置文件加密与敏感数据保护
在现代应用程序中配置文件通常包含敏感数据如数据库密码、API 密钥、用户名等。如果这些信息被泄露可能会导致严重的安全问题。因此如何保护配置文件中的敏感数据是开发和运维过程中必须关注的重点。Spring Boot 提供了多种方式来加密配置文件中的敏感数据确保在使用配置文件时不会暴露敏感信息。
1. 敏感数据保护的需求
在开发和生产环境中敏感数据的保护尤为重要。常见的敏感数据包括
● 数据库密码、用户名
● 第三方 API 密钥
● OAuth2 客户端密钥
● 访问令牌Access Token
为了防止敏感数据的泄露我们通常会采取加密手段确保即使配置文件被非法访问也无法获取敏感信息。
2. 配置文件加密的策略
加密配置文件中的敏感数据常见的方式有 对称加密使用相同的密钥对敏感数据进行加密和解密。常见的对称加密算法有 AES高级加密标准。这种方式要求在应用程序启动时通过安全的方式提供解密密钥。 非对称加密使用公钥加密私钥解密。适用于需要更高安全性的场景通常用于数据交换和密钥管理。 基于属性的加密仅对配置文件中的特定属性进行加密。例如可以只加密数据库连接字符串中的密码部分而保留其他非敏感信息明文。
3. Spring Boot 配置文件的加密
Spring Boot 并没有直接提供加密配置文件的功能但可以通过结合第三方库来实现加密。常用的加密方案包括
● JasyptJava Simplified Encryption这是一个开源的加密工具可以用来加密配置文件中的敏感数据。它支持对属性进行加密和解密并提供简单的集成方式。
● Spring Cloud Config VaultSpring Cloud Config 提供了集中式配置管理Vault 是 HashiCorp 提供的安全工具专门用于存储和保护敏感数据。结合 Vault 和 Spring Cloud Config可以有效地加密配置文件中的敏感信息。
4. Jasypt 配置文件加密
Jasypt 是 Java 中最常用的加密工具之一它提供了易于集成的加密方案适合用来加密 Spring Boot 配置文件中的敏感信息。
4.1 引入 Jasypt 依赖
首先在 pom.xml 中添加 Jasypt 的依赖
dependencygroupIdorg.jasypt/groupIdartifactIdjasypt-spring-boot-starter/artifactIdversion3.0.3/version
/dependency4.2 加密配置属性
使用 Jasypt 加密属性时首先需要对敏感数据进行加密。可以通过 Jasypt 提供的工具进行加密示例如下
import org.jasypt.util.text.BasicTextEncryptor;public class EncryptPassword {public static void main(String[] args) {BasicTextEncryptor encryptor new BasicTextEncryptor();encryptor.setPassword(secretKey); // 设置加密密钥String encryptedPassword encryptor.encrypt(myPassword123); // 加密敏感信息System.out.println(encryptedPassword);}
}4.3 在配置文件中使用加密后的数据
将加密后的密码放入 application.properties 或 application.yml 中格式为 ENC(…)
spring.datasource.passwordENC(1y2l1G0Uht9HgddKxsT8Tg)4.4 配置解密
在 Spring Boot 启动时Jasypt 会自动解密这些加密过的配置项。为此需要在 application.properties 中配置解密所需的密钥
jasypt.encryptor.passwordsecretKey当 Spring Boot 启动时它会使用 secretKey 来解密配置文件中的敏感数据并将其加载到 Spring 环境中。
5. 使用 Spring Cloud Config 与 Vault 保护敏感数据
Spring Cloud Config 与 HashiCorp Vault 是用于集中式配置和敏感数据存储的强大工具。Vault 提供了一个安全的存储库用于存储应用程序的敏感数据如 API 密钥、数据库凭证等。Spring Cloud Config 可以与 Vault 集成以便在应用程序启动时从 Vault 中读取敏感配置。
5.1 配置 Vault
首先您需要设置 Vault 服务器并将敏感数据存储到 Vault 中。例如将数据库密码存储为一个密钥
vault kv put secret/myapp/db passwordmy-secret-password5.2 Spring Cloud Config 集成 Vault
在 application.properties 中配置 Vault 作为配置源
spring.cloud.config.urihttp://localhost:8888 # Spring Cloud Config 服务器的地址
spring.cloud.config.server.vault.backendsecret # 配置 Vault 密钥后端
spring.cloud.config.server.vault.default-contextmyapp5.3 从 Vault 获取配置
当应用程序启动时Spring Cloud Config 会自动从 Vault 中加载敏感数据而不会暴露敏感数据在配置文件中。例如password 就会从 Vault 中安全地加载而不会被硬编码在配置文件里。
6. 环境变量加密配置
在某些情况下环境变量是一个比配置文件更安全的存储敏感信息的方式。例如可以通过 CI/CD 系统或 Docker 等平台将密钥和密码设置为环境变量这样它们不会出现在配置文件或源代码中。
Spring Boot 支持通过环境变量读取配置
spring.datasource.password${DB_PASSWORD}通过 export DB_PASSWORDmy-secret-password 来设置环境变量Spring Boot 会在启动时读取该值。