网站首页 > 博客文章 正文
技术背景
在开发Spring Boot Web应用程序时,数据库信息(如URL、用户名和密码)通常需要根据不同的环境进行配置,例如本地开发环境、持续集成(CI)环境(如Jenkins)和生产环境(如OpenShift)。为了避免在application.properties文件中硬编码数据库信息,我们可以使用环境变量来实现动态配置。
实现步骤
1. 创建环境变量
在本地和Jenkins虚拟机中创建系统环境变量,名称与OpenShift中的环境变量保持一致,并分别赋予正确的值。示例如下:
export OPENSHIFT_MYSQL_DB_HOST="jdbc:mysql://localhost"
export OPENSHIFT_MYSQL_DB_PORT="3306"
export OPENSHIFT_MYSQL_DB_USERNAME="root"
export OPENSHIFT_MYSQL_DB_PASSWORD="123asd"
2. 在application.properties中引用环境变量
在application.properties文件中,可以使用${}语法来引用环境变量。示例如下:
spring.datasource.url = ${OPENSHIFT_MYSQL_DB_HOST}:${OPENSHIFT_MYSQL_DB_PORT}/"nameofDB"
spring.datasource.username = ${OPENSHIFT_MYSQL_DB_USERNAME}
spring.datasource.password = ${OPENSHIFT_MYSQL_DB_PASSWORD}
3. 使用Spring Profiles(可选)
为不同的环境创建特定的配置文件,例如
application-local.properties、
application-jenkins.properties和
application-openshift.properties。在运行应用程序时,通过设置SPRING_PROFILES_ACTIVE环境变量来指定要使用的配置文件。示例如下:
export SPRING_PROFILES_ACTIVE=jenkins
4. 解决Flyway不识别直接环境变量的问题(可选)
如果使用Flyway且Spring Boot V2.1不识别直接在application.properties中使用的环境变量,可以创建一个.env文件,将环境变量存储在其中,然后将这些变量导出到环境中。示例如下:
# .env文件内容
SPRING_DATASOURCE_URL=jdbc:mysql://127.0.0.1:3306/place
SPRING_DATASOURCE_USERNAME=root
SPRING_DATASOURCE_PASSWORD=root
# 导出环境变量
export $(cat .env | xargs)
核心代码
以下是在Java代码中获取环境变量的示例:
import java.util.Map;
public class EnvVariableExample {
public static void main(String[] args) {
Map<String, String> env = System.getenv();
String password = env.get("OPENSHIFT_MYSQL_DB_PASSWORD");
String userName = env.get("OPENSHIFT_MYSQL_DB_USERNAME");
String sqlURL = env.get("OPENSHIFT_MYSQL_DB_HOST");
String sqlPort = env.get("OPENSHIFT_MYSQL_DB_PORT");
System.out.println("Password: " + password);
System.out.println("Username: " + userName);
System.out.println("SQL URL: " + sqlURL);
System.out.println("SQL Port: " + sqlPort);
}
}
最佳实践
- 使用Spring Profiles:为不同的环境创建特定的配置文件,通过SPRING_PROFILES_ACTIVE环境变量来指定要使用的配置文件,提高配置的灵活性和可维护性。
- 安全存储敏感信息:使用环境变量来存储敏感信息(如数据库密码),避免在代码库中硬编码这些信息,提高安全性。
- 结合使用环境变量和Spring Profiles:在开发环境中使用静态配置信息,在生产环境中使用环境变量,这样开发人员在部署开发配置文件时无需在本地定义环境变量。
常见问题
1. 环境变量未生效
- 检查环境变量是否正确设置:确保环境变量的名称和值正确,并且已经正确导出到环境中。
- 重启IDE或应用程序:某些情况下,IDE或应用程序可能需要重新启动才能读取新的环境变量。
2. Flyway不识别直接环境变量
按照上述步骤创建.env文件,并将环境变量导出到环境中。
3. 无法在运行时更改活动配置文件
Spring在构建应用程序上下文时会确定活动配置文件,一旦应用程序启动,就无法更改活动配置文件。如果需要在运行时更改配置,可以考虑使用其他配置管理工具。
猜你喜欢
- 2025-05-05 Springboot项目中几种跨域的解决方法
- 2025-05-05 快来试试这款一行代码实现多平台文件存储的工具!
- 2025-05-05 Spring Boot3 整合 Redis 实现数据缓存操作全解析
- 2025-05-05 Spring Boot 优雅实现多租户架构(多租户开源框架 java)
- 2025-05-05 手把手教你搭建Spring Boot项目(springboot工程搭建步骤)
- 2025-05-05 详细介绍一下Spring Boot配置文件的加载顺序?
- 2025-05-05 第三章:SpringBoot 配置文件(springboot配置文件详解)
- 2025-05-05 Spring Boot3 整合 Thymeleaf 模板引擎全攻略
- 2025-05-05 震碎认知!将原理融会贯通到顶点的SpringBoot实战项目
- 2025-05-05 Spring Boot3 整合 Nacos 实现配置管理全解析
你 发表评论:
欢迎- 368℃用AI Agent治理微服务的复杂性问题|QCon
- 362℃手把手教程「JavaWeb」优雅的SpringMvc+Mybatis整合之路
- 358℃初次使用IntelliJ IDEA新建Maven项目
- 351℃Maven技术方案最全手册(mavena)
- 348℃安利Touch Bar 专属应用,让闲置的Touch Bar活跃起来!
- 347℃InfoQ 2024 年趋势报告:架构篇(infoq+2024+年趋势报告:架构篇分析)
- 345℃IntelliJ IDEA 2018版本和2022版本创建 Maven 项目对比
- 343℃从头搭建 IntelliJ IDEA 环境(intellij idea建包)
- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)