SpringBoot中的多环境配置管理

SpringBoot中的多环境配置管理

文章目录

  • SpringBoot中的多环境配置管理
      • SpringBoot中的多环境配置管理
    • 多环境配置的概述
      • 1. 为什么需要多环境配置?
      • 2. Spring Boot 中如何实现多环境配置?
      • 3. 多环境配置的应用场景
      • 4. 如何实现配置隔离?
    • Spring Boot 中的配置文件管理
      • 1. 配置文件的类型
      • 2. 配置文件的基本结构
      • 3. 配置文件的优先级与加载顺序
      • 4. Profile 和配置文件的切换
      • 5. 配置文件的外部化
      • 6. 敏感信息的管理
      • 7. 多环境配置的最佳实践
    • 使用 Profiles 管理不同环境配置
      • 1. 什么是 Profile?
      • 2. 如何使用 Profiles 管理环境配置?
        • 2.1 定义和激活 Profile
        • 2.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 配置 Vault
        • 5.2 Spring Cloud Config 集成 Vault
        • 5.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 属性文件格式,每个配置项以 key=value 的形式存在。

application.yml:YAML 格式的配置文件,比 properties 格式更具层次性和可读性,尤其对于结构化数据的表示非常方便。

这些文件可以存放在项目的 src/main/resources 目录下,并且可以根据不同的环境进行灵活管理。

2. 配置文件的基本结构

application.properties 示例:

server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=secret

application.yml 示例:

server:port: 8080
spring:datasource:url: jdbc:mysql://localhost:3306/mydbusername: rootpassword: secret

YAML 格式通过层级缩进来表示结构,能够更清晰地组织和表达配置数据。

3. 配置文件的优先级与加载顺序

Spring Boot 在启动时会按照一定的顺序加载配置文件,配置文件的加载优先级依次递增:

  1. 命令行参数:通过命令行传入的参数优先级最高。

  2. application.propertiesapplication.yml:项目中的配置文件,默认加载。

  3. 外部配置文件:可以通过 spring.config.location 指定外部的配置文件路径。

  4. 环境变量:如果没有在配置文件中找到某项配置,Spring Boot 会查找环境变量。

  5. Java System 属性:如 -D 参数传入的系统属性。

4. Profile 和配置文件的切换

在 Spring Boot 中,Profile 是一种用于标识不同运行环境的机制,可以帮助我们在不同的环境下加载不同的配置。

● 指定 Profile:可以在 application.properties application.yml 中使用 spring.profiles.active 属性指定当前的运行环境(如开发、测试、生产等)。

spring.profiles.active=dev

● 环境特定的配置文件:可以创建专门为某个环境定制的配置文件,如 application-dev.properties、application-prod.properties。这些文件会根据当前活动的 Profile 被自动加载。

○ application-dev.properties 示例:

spring.datasource.url=jdbc:mysql://dev-db:3306/mydb

○ application-prod.properties 示例:

spring.datasource.url=jdbc:mysql://prod-db:3306/mydb

5. 配置文件的外部化

Spring Boot 允许将配置文件外部化,避免硬编码在应用中。常见的外部化方式有:

● 通过命令行参数指定:

java -jar myapp.jar --spring.config.location=file:/path/to/application.properties

● 通过环境变量指定:在容器化应用中(如 Docker),可以通过环境变量来指定配置。

● 配置文件路径的优先级:spring.config.locationspring.config.name 可以用于指定文件的位置和名称。

6. 敏感信息的管理

在配置文件中,可能会涉及到敏感信息(如数据库密码、API 密钥等)。Spring Boot 提供了多种方式来保护这些敏感配置:

● 加密配置:使用 jasypt-spring-boot 等工具来加密配置文件中的敏感信息。

● 环境变量管理:将敏感信息放在系统环境变量中,而非配置文件中。

7. 多环境配置的最佳实践

在 Spring Boot 项目中,推荐使用如下方式来管理多环境配置:

  1. 使用不同的配置文件:为不同的环境(如开发、测试、生产)创建不同的配置文件,并通过 spring.profiles.active 动态切换。

  2. 外部化配置:配置文件放置在项目之外,通过命令行、环境变量等方式动态传入,避免将敏感信息和配置暴露在代码中。

  3. 减少重复配置:利用 Spring Boot 提供的配置继承和共享功能,减少不同环境中重复配置的量。

  4. 集中管理敏感配置:使用配置中心(如 Spring Cloud Config)集中管理敏感信息和环境配置。

使用 Profiles 管理不同环境配置

在开发和部署应用程序时,通常会遇到不同的运行环境,例如开发环境、测试环境、生产环境等。每个环境的配置需求往往不同,比如数据库连接、服务端口、日志级别等。为了在不同的环境中灵活地加载和管理配置,Spring Boot 提供了 Profiles 功能来实现多环境配置的管理。

1. 什么是 Profile?

Spring Boot 的 Profile 是一种标识和管理不同环境的机制,可以根据当前激活的 Profile 来加载不同的配置文件或配置项。通过 Profile,开发者可以在开发、测试、生产等多个环境中维护不同的配置,避免在同一个配置文件中管理所有环境的配置。

2. 如何使用 Profiles 管理环境配置?

2.1 定义和激活 Profile

Profile 是通过 @Profile 注解或者通过配置文件来激活的。在 Spring Boot 中,可以通过两种方式来指定当前使用的 Profile:

  1. 在配置文件中设置: 在 application.propertiesapplication.yml 文件中,可以通过 spring.profiles.active 来设置当前激活的 Profile。
# application.properties
spring.profiles.active=dev

或者,在 application.yml 中设置:

spring:profiles:active: dev

这里,dev 就是当前激活的 Profile。

  1. 通过命令行参数激活: 在启动应用时,可以通过命令行传入 -Dspring.profiles.active 参数来指定 Profile。例如:
java -jar myapp.jar --spring.profiles.active=prod
  1. 通过环境变量激活: 还可以通过系统环境变量 SPRING_PROFILES_ACTIVE 来指定激活的 Profile。例如,在 Linux 或 macOS 中:
export SPRING_PROFILES_ACTIVE=prod

然后启动应用。

2.2 根据 Profile 加载配置文件

Spring Boot 会根据当前激活的 Profile 来加载对应的配置文件。例如,假设你有多个不同环境的配置文件:

● application-dev.properties:开发环境配置

● application-prod.properties:生产环境配置

● application-test.properties:测试环境配置

如果在 application.properties 或 application.yml 中配置了 spring.profiles.active=dev,那么 Spring Boot 会加载 application-dev.properties 文件中的配置。不同的 Profile 可以有不同的配置文件,Spring Boot 会根据激活的 Profile 加载与之匹配的配置文件。

3. 使用 @Profile 注解在代码中区分不同环境

除了在配置文件中使用 Profile,Spring 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 的优先级来决定最终的配置值。例如:

  1. application.properties:所有环境通用的配置。

  2. application-dev.properties:开发环境专用配置。

  3. application-prod.properties:生产环境专用配置。

如果在 application.properties 中配置了 server.port=8080,在 application-prod.properties 中配置了 server.port=80,并且激活了 prod Profile,那么最终的端口配置会使用 application-prod.properties 中的 server.port=80

5. Spring Boot Profile 的常见实践

● 使用环境变量:通过环境变量来设置不同的 Profile,可以方便地在不同的部署环境中切换配置。

● 配置多套数据库连接:开发环境使用本地数据库,生产环境使用生产数据库,测试环境使用专门的测试数据库。可以通过不同的 Profile 文件来配置不同的数据库连接。

● 不同的日志级别配置:在开发环境中,可能需要更详细的日志信息,而生产环境则需要更简洁的日志,以提高性能。通过 Profile 可以灵活配置不同的日志级别。

● 外部配置管理:可以通过外部的配置文件来管理环境配置,使得应用可以在不同环境下保持一致性,尤其适合容器化和微服务架构中的配置管理。

Spring Boot 配置的外部化

​ Spring Boot 提供了灵活的配置机制,可以轻松将应用程序的配置外部化,避免将敏感信息(如数据库密码、API 密钥等)硬编码在代码中。外部化配置不仅可以使应用程序更具可维护性,还能提高灵活性和安全性。尤其在容器化、微服务架构中,外部化配置变得尤为重要。

1. 外部化配置的概念

外部化配置指的是将应用程序的配置从代码中分离出来,将其存储在外部位置(如文件、环境变量、配置服务器等)。Spring Boot 支持从多种外部源加载配置,这样就可以避免每次更改配置时都需要重新构建和部署应用程序。

2. 外部化配置的常见方式

Spring Boot 提供了多种外部化配置的方式,可以根据需求选择合适的方法。

2.1 使用外部配置文件

Spring Boot 支持将配置文件放在项目外部,或者通过命令行传入外部配置。常见的做法是使用 application.propertiesapplication.yml,并将其存放在外部目录。

  1. 通过命令行参数指定配置文件路径:可以通过 --spring.config.location 参数指定配置文件的路径。例如,在启动命令中指定配置文件:
java -jar myapp.jar --spring.config.location=file:/path/to/application.properties
  1. 通过环境变量指定配置文件路径:使用环境变量来指定配置文件的位置。在 Linux 或 macOS 中:
export SPRING_CONFIG_LOCATION=/path/to/application.properties
java -jar myapp.jar
2.2 使用环境变量

Spring Boot 支持通过操作系统的环境变量来覆盖配置文件中的设置。环境变量的优先级高于配置文件中的属性,特别适合用于存储敏感信息或在生产环境中动态配置参数。

● 通过环境变量配置数据库连接:

export SPRING_DATASOURCE_URL=jdbc:mysql://localhost:3306/mydb
export SPRING_DATASOURCE_USERNAME=root
export SPRING_DATASOURCE_PASSWORD=secret

这些环境变量会覆盖 application.properties 文件中的相应配置。

2.3 通过命令行参数

Spring Boot 允许在启动应用时通过命令行参数传递配置值,命令行参数的优先级最高。例如:

java -jar myapp.jar --server.port=8081 --spring.datasource.url=jdbc:mysql://localhost:3306/testdb

这将覆盖 application.properties 中的相应配置。

2.4 使用 Spring Cloud Config

对于复杂的微服务架构,Spring Cloud 提供了配置中心(Spring Cloud Config)来集中管理和外部化配置。配置中心可以将所有应用的配置统一存储在 Git 仓库、数据库或文件系统中,并通过 HTTP 服务提供给应用使用。

  1. 配置中心的工作原理

​ ○ 应用从 Spring Cloud Config 服务器拉取配置。

​ ○ 配置可以按环境、按应用进行划分,支持动态刷新和更新。

  1. 配置中心的优势

​ ○ 集中管理:多个微服务共享配置,统一管理。

​ ○ 动态刷新:通过 Spring Cloud Bus 可以实现配置的动态刷新,无需重启应用。

​ ○ 版本控制:通过 Git 实现配置的版本控制。

3. 优先级与加载顺序

Spring Boot 会按照一定的优先级加载配置项,如果不同来源的配置项有重复,后加载的配置将覆盖前加载的配置。配置的加载顺序如下:

  1. 命令行参数:优先级最高。

  2. application.propertiesapplication.yml:项目中的配置文件。

  3. 外部配置文件:通过 spring.config.location 指定的外部配置文件。

  4. 环境变量:操作系统的环境变量。

  5. 系统属性:如 -D 参数传入的系统属性。

因此,如果在不同的位置配置了相同的属性,Spring Boot 会使用优先级更高的配置。

4. 敏感信息的外部化

为了确保应用程序的安全性,敏感信息(如数据库密码、API 密钥等)不应该存储在版本控制系统中。Spring Boot 提供了以下几种方式来处理敏感信息:

● 环境变量:将敏感信息存储在环境变量中,而不是硬编码在配置文件中。

● 加密配置:使用加密工具,如 Jasypt,加密配置文件中的敏感信息,然后在运行时解密。

例如,使用 Jasypt 加密 application.properties 文件中的数据库密码:

spring.datasource.password=ENC(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.active=dev

或者,通过命令行参数指定 Profile:

java -jar myapp.jar --spring.profiles.active=prod

不同环境配置的实现

在实际的开发和部署中,应用程序通常需要在多个环境中运行,例如开发环境、测试环境和生产环境。每个环境的配置通常会有所不同,如数据库连接、缓存配置、日志级别等。Spring Boot 提供了多种方式来管理和切换不同环境的配置,以便在不修改代码的情况下,能够根据环境的不同自动加载对应的配置。

1. Spring Boot 配置文件的多环境管理

Spring Boot 允许通过使用不同的配置文件来管理不同环境的配置。我们可以为每个环境创建独立的配置文件,并通过 Profile 来指定当前激活的环境。Spring Boot 会根据激活的 Profile 加载对应的配置文件。

1.1 Profile 的概念

Profile 是 Spring 框架的一种机制,用于标识和区分不同的环境。通过 Profile,可以在开发环境、测试环境和生产环境之间切换配置,确保每个环境有合适的配置。

1.2 不同环境的配置文件

Spring Boot 通过 application.propertiesapplication.yml 文件来存储配置。为了支持多环境配置,我们可以创建多个配置文件,按照环境的不同进行区分。

application.propertiesapplication.yml:用于存储通用配置。

application-dev.propertiesapplication-dev.yml:用于开发环境配置。

application-prod.propertiesapplication-prod.yml:用于生产环境配置。

application-test.propertiesapplication-test.yml:用于测试环境配置。

1.3 Profile 的激活

要使用不同的配置文件,必须激活相应的 Profile,Spring Boot 提供了几种激活 Profile 的方式:

  1. 通过 spring.profiles.active 设置:可以在 application.propertiesapplication.yml 中通过 spring.profiles.active 属性来指定激活的 Profile。例如:
# application.properties
spring.profiles.active=dev

或者在 application.yml 中:

spring:profiles:active: dev
  1. 通过命令行参数激活:可以在启动应用时通过命令行传递 --spring.profiles.active 来激活 Profile:
java -jar myapp.jar --spring.profiles.active=prod
  1. 通过环境变量激活:可以通过设置操作系统的环境变量来激活 Profile。例如,在 Linux 或 macOS 中:
export SPRING_PROFILES_ACTIVE=prod
java -jar myapp.jar
  1. 通过 @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 的优先级顺序加载配置文件:

  1. application.propertiesapplication.yml:这是全局的配置文件,适用于所有环境。

  2. application-{profile}.propertiesapplication-{profile}.yml:根据激活的 Profile 加载相应的配置文件。例如,如果激活的是 dev Profile,则加载 application-dev.properties 文件中的配置。

  3. 命令行参数和环境变量:如果配置文件中存在重复的属性,命令行参数和环境变量的值会覆盖配置文件中的值。

2. 环境特定配置的管理

为了更好地管理不同环境的配置,常见的做法是将敏感信息和环境特定的配置如数据库连接、第三方服务的 API 密钥、日志级别等单独管理。

2.1 开发环境配置 (application-dev.properties)

开发环境中的配置通常比较宽松,适合进行调试和测试。常见的开发环境配置有:

●数据库连接:使用本地数据库或开发环境的数据库。

●日志级别:通常设置为 DEBUG,以便在开发过程中查看详细的日志信息。

●缓存配置:开发环境可能不需要使用高性能的缓存,或者使用本地缓存。

# application-dev.properties
spring.datasource.url=jdbc:mysql://localhost:3306/devdb
spring.datasource.username=dev_user
spring.datasource.password=dev_password
logging.level.root=DEBUG
2.2 生产环境配置 (application-prod.properties)

生产环境配置需要更加严格和高效,通常包括:

●数据库连接:连接生产数据库,通常使用更高效、稳定的数据库连接池。

●日志级别:生产环境通常设置为 INFO 或 WARN,以减少日志量,避免暴露敏感信息。

●安全配置:生产环境可能需要配置更严格的安全措施,如 HTTPS、API 密钥等。

# application-prod.properties
spring.datasource.url=jdbc:mysql://prod-db-server:3306/proddb
spring.datasource.username=prod_user
spring.datasource.password=prod_password
logging.level.root=INFO
2.3 测试环境配置 (application-test.properties)

测试环境中的配置主要用于单元测试和集成测试,通常包括:

●使用测试数据库(如 H2 数据库)或内存数据库。

●配置测试特定的日志级别和性能参数。

●配置模拟服务或 Mock 数据。

# application-test.properties
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.username=test_user
spring.datasource.password=test_password
logging.level.root=DEBUG

3. 配置的外部化

​ 对于一些敏感数据(如数据库密码、API 密钥等),可以将配置外部化到环境变量、命令行参数或配置服务器中,避免将敏感信息写入配置文件。Spring Boot 支持从环境变量、JNDI、命令行参数、Spring Cloud Config 等多种外部化方式读取配置。

配置文件加密与敏感数据保护

在现代应用程序中,配置文件通常包含敏感数据,如数据库密码、API 密钥、用户名等。如果这些信息被泄露,可能会导致严重的安全问题。因此,如何保护配置文件中的敏感数据,是开发和运维过程中必须关注的重点。Spring Boot 提供了多种方式来加密配置文件中的敏感数据,确保在使用配置文件时,不会暴露敏感信息。

1. 敏感数据保护的需求

在开发和生产环境中,敏感数据的保护尤为重要。常见的敏感数据包括:

● 数据库密码、用户名

● 第三方 API 密钥

● OAuth2 客户端密钥

● 访问令牌(Access Token)

为了防止敏感数据的泄露,我们通常会采取加密手段,确保即使配置文件被非法访问,也无法获取敏感信息。

2. 配置文件加密的策略

加密配置文件中的敏感数据,常见的方式有:

  1. 对称加密:使用相同的密钥对敏感数据进行加密和解密。常见的对称加密算法有 AES(高级加密标准)。这种方式要求在应用程序启动时,通过安全的方式提供解密密钥。

  2. 非对称加密:使用公钥加密,私钥解密。适用于需要更高安全性的场景,通常用于数据交换和密钥管理。

  3. 基于属性的加密:仅对配置文件中的特定属性进行加密。例如,可以只加密数据库连接字符串中的密码部分,而保留其他非敏感信息明文。

3. Spring Boot 配置文件的加密

Spring Boot 并没有直接提供加密配置文件的功能,但可以通过结合第三方库来实现加密。常用的加密方案包括:

● Jasypt(Java Simplified Encryption):这是一个开源的加密工具,可以用来加密配置文件中的敏感数据。它支持对属性进行加密和解密,并提供简单的集成方式。

● Spring Cloud Config + Vault:Spring Cloud Config 提供了集中式配置管理,Vault 是 HashiCorp 提供的安全工具,专门用于存储和保护敏感数据。结合 Vault 和 Spring Cloud Config,可以有效地加密配置文件中的敏感信息。

4. Jasypt 配置文件加密

Jasypt 是 Java 中最常用的加密工具之一,它提供了易于集成的加密方案,适合用来加密 Spring Boot 配置文件中的敏感信息。

4.1 引入 Jasypt 依赖

首先,在 pom.xml 中添加 Jasypt 的依赖:

<dependency><groupId>org.jasypt</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>3.0.3</version>
</dependency>
4.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.password=ENC(1y2l1G0Uht9HgddKxsT8Tg==)
4.4 配置解密

在 Spring Boot 启动时,Jasypt 会自动解密这些加密过的配置项。为此,需要在 application.properties 中配置解密所需的密钥:

jasypt.encryptor.password=secretKey

当 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 password="my-secret-password"
5.2 Spring Cloud Config 集成 Vault

application.properties 中配置 Vault 作为配置源:

spring.cloud.config.uri=http://localhost:8888  # Spring Cloud Config 服务器的地址
spring.cloud.config.server.vault.backend=secret  # 配置 Vault 密钥后端
spring.cloud.config.server.vault.default-context=myapp
5.3 从 Vault 获取配置

​ 当应用程序启动时,Spring Cloud Config 会自动从 Vault 中加载敏感数据,而不会暴露敏感数据在配置文件中。例如,password 就会从 Vault 中安全地加载,而不会被硬编码在配置文件里。

6. 环境变量加密配置

在某些情况下,环境变量是一个比配置文件更安全的存储敏感信息的方式。例如,可以通过 CI/CD 系统或 Docker 等平台将密钥和密码设置为环境变量,这样它们不会出现在配置文件或源代码中。

Spring Boot 支持通过环境变量读取配置:

spring.datasource.password=${DB_PASSWORD}

通过 export DB_PASSWORD=my-secret-password 来设置环境变量,Spring Boot 会在启动时读取该值。

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

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

相关文章

Oracle 变更redo log文件位置

更改Oracle数据库的Redo log文件位置&#xff0c;可以按照以下步骤操作。 1.查询当前Redo log文件信息 select * from v$log; select * from v$logfile;通过查询结果可知Redo log文件放在/oradata/redofile 目录下。 2.拷贝redo log文件到新的位置/Data/redolog $cd /orada…

git代理设置

在 Git 中&#xff0c;可以通过以下命令查看当前设置的代理配置&#xff1a; 查看 HTTP 代理 git config --get http.proxy查看 HTTPS 代理 git config --get https.proxy查看全局代理设置 如果你设置了全局代理&#xff0c;可以通过以下命令查看&#xff1a; git config …

全网多平台媒体内容解析工具使用指南

一、工具特性概述 近期体验了一款基于Web端的多媒体解析服务&#xff0c;该平台通过技术创新实现跨平台内容解析功能&#xff0c;主要特点如下&#xff1a; 1.1 跨平台支持 兼容主流社交媒体&#xff1a;Bilibili、YouTube、Twitter、Instagram等 支持短视频平台&#xff1a…

C# winforms 使用菜单和右键菜单

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…

网工_以太网MAC层

2025.02.05&#xff1a;网工老姜学习笔记 第12节 以太网MAC层 2.1 MAC层的硬件地址2.2 MAC地址特殊位含义2.3 终端适配器&#xff08;网卡&#xff09;具有过滤功能2.4 MAC帧的格式2.4.1 DIX Ethernet V2标准&#xff08;先私有&#xff0c;后开放&#xff0c;用得比较多&#…

一文吃透!DataStage 全面概述与核心知识要点大公开

目录 第一章 DataStage 基础知识 1.1 DataStage 定义及特点 1.2 DataStage 功能模块 1.3 DataStage 应用场景 第二章 DataStage 核心技术 2.1 数据抽取技术 2.2 数据转换技术 2.3 数据加载技术 第三章 DataStage 操作实践 3.1 环境搭建与配置 安装 DataStage 软件 配…

鼠标滚轮冒泡事件@wheel.stop

我有一个页面,是在画布上的组件,但是组件中有一个table,table中数据多了,就会出现滚动条,正常情况下,滚动条用鼠标滚轮就可以滑动,但是这个table是在画布上,滚动滚轮会让画布缩放 在table外层的div上加上 wheel.stop,就生效了 wheel.stop 用途&#xff1a;这个修饰符用于处理鼠…

探索从传统检索增强生成(RAG)到缓存增强生成(CAG)的转变

在人工智能快速发展的当下&#xff0c;大型语言模型&#xff08;LLMs&#xff09;已成为众多应用的核心技术。检索增强生成&#xff08;RAG&#xff09;&#xff08;RAG 系统从 POC 到生产应用&#xff1a;全面解析与实践指南&#xff09;和缓存增强生成&#xff08;CAG&#x…

graphRAG的原理及代码实战(1)基本原理介绍(上)

1、基本介绍 GraphRAG通过利用大模型从原始文本数据中提取知识图谱来满足跨上下文检索的需求。该知识图将信息表示为互连实体和关系的网络&#xff0c;与简单的文本片段相比&#xff0c;提供了更丰富的数据表示。这种结构化表示使 GraphRAG 能够擅长回答需要推理和连接不同信息…

PostgreSQL中级认证价值

PostgreSQL&#xff0c;作为一款开源的关系型数据库管理系统&#xff0c;以其强大的功能、高度的可扩展性和稳定性&#xff0c;赢得了广泛的认可。对于非科班出身、IT知识储备有限的你&#xff0c;选择PostgreSQL中级认证专家的学习路径&#xff0c;不仅是一次技能的提升&#…

论文翻译学习:《DeepSeek-R1: 通过强化学习激励大型语言模型的推理能力》

摘要 我们介绍了我们的第一代推理模型 DeepSeek-R1-Zero 和 DeepSeek-R1。DeepSeek-R1-Zero 是一个通过大规模强化学习&#xff08;RL&#xff09;训练的模型&#xff0c;没有经过监督微调&#xff08;SFT&#xff09;作为初步步骤&#xff0c;展示了卓越的推理能力。通过强化…

Android开发获取缓存,删除缓存

Android开发获取缓存&#xff0c;删除缓存 app设置中往往有清理缓存的功能。会显示当前缓存时多少&#xff0c;然后可以点击清理缓存 直接上代码&#xff1a; object CacheHelper {/*** 获取缓存大小* param context* return* throws Exception*/JvmStaticfun getTotalCache…

使用 Ollama 在腾讯云服务器环境部署 DeepSeek 大模型实战指南

文章目录 前言Ollama核心特性 实战步骤安装 Ollama验证安装结果部署 DeepSeek 模型拉取模型启动模型 交互体验命令行对话调用 REST API 总结个人简介 前言 近年来&#xff0c;大语言模型&#xff08;LLM&#xff09;的应用逐渐成为技术热点&#xff0c;而 DeepSeek 作为国产开…

DeepSeek R1 简单指南:架构、训练、本地部署和硬件要求

DeepSeek 的 LLM 推理新方法 DeepSeek 推出了一种创新方法&#xff0c;通过强化学习 (RL) 来提高大型语言模型 (LLM) 的推理能力&#xff0c;其最新论文 DeepSeek-R1 对此进行了详细介绍。这项研究代表了我们如何通过纯强化学习来增强 LLM 解决复杂问题的能力&#xff0c;而无…

机器学习 —— 深入剖析线性回归模型

一、线性回归模型简介 线性回归是机器学习中最为基础的模型之一&#xff0c;主要用于解决回归问题&#xff0c;即预测一个连续的数值。其核心思想是构建线性方程&#xff0c;描述自变量&#xff08;特征&#xff09;和因变量&#xff08;目标值&#xff09;之间的关系。简单来…

【现代深度学习技术】深度学习计算 | 读写文件

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上&#xff0c;结合当代大数据和大算力的发展而发展出来的。深度学习最重…

计算机三级数据库技术考试大纲

文章目录 基本要求&#xff11;&#xff0e;掌握数据库技术的基本概念、原理、方法和技术。&#xff12;&#xff0e;能够使用 &#xff33;&#xff31;&#xff2c; 语言实现数据库操作。&#xff13;&#xff0e; 具备数据库系统安装、配置及数据库管理与维护的基本技能。 T…

退格法记单词(类似甘特图)

退格法记单词&#xff0c;根据记忆次数或熟练程度退格&#xff0c;以示区分&#xff0c;该方法用于短时高频大量记单词&#xff1a; explosion爆炸&#xff0c;激增 mosquito蚊子granary粮仓&#xff0c;谷仓 offhand漫不经心的 transient短暂的slob懒惰而邋遢的…

【AI应用】免费的文本转语音工具:微软 Edge TTS 和 开源版 ChatTTS 对比

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】【读书与思考】【AI应用】 我试用了下Edge TTS&#xff0c;感觉还不错&#xff0c;不过它不支持克隆声音&#xff08;比如自己的声音&#xff09; 微软 Edge TTS 和 开源版 ChatTTS 都是免费的 文本转语音&…

深入理解 DeepSeek MOE(Mixture of Experts)

1. 什么是 MOE&#xff1f; MOE&#xff08;Mixture of Experts&#xff0c;专家混合&#xff09;是一种模型架构&#xff0c;旨在通过多个专家&#xff08;Experts&#xff09;模型的协同工作来提高计算效率和模型性能。在 MOE 结构中&#xff0c;不是所有的专家都参与计算&a…