网站首页 > 博客文章 正文
技术背景
在开发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 实现配置管理全解析
你 发表评论:
欢迎- 07-08Google Cloud Platform 加入支持 Docker 的容器引擎
- 07-08日本KDDI与Google Cloud 签署合作备忘录,共探AI未来
- 07-08美国Infoblox与Google Cloud合作推出云原生网络和安全解决方案
- 07-08GoogleCloud为Spanner数据库引入HDD层,将冷存储成本降低80%
- 07-08谷歌推出Cloud Dataproc,缩短集群启动时间
- 07-08Infovista与Google Cloud携手推进射频网络规划革新
- 07-08比利时Odoo与Google Cloud建立增强合作,扩大全球影响力
- 07-08BT 和 Google Cloud 通过 Global Fabric 加速 AI 网络
- 最近发表
-
- Google Cloud Platform 加入支持 Docker 的容器引擎
- 日本KDDI与Google Cloud 签署合作备忘录,共探AI未来
- 美国Infoblox与Google Cloud合作推出云原生网络和安全解决方案
- GoogleCloud为Spanner数据库引入HDD层,将冷存储成本降低80%
- 谷歌推出Cloud Dataproc,缩短集群启动时间
- Infovista与Google Cloud携手推进射频网络规划革新
- 比利时Odoo与Google Cloud建立增强合作,扩大全球影响力
- BT 和 Google Cloud 通过 Global Fabric 加速 AI 网络
- NCSA和Google Cloud合作开发AI驱动的网络防御系统,加强泰国网络空间的安全性
- SAP将在沙特阿拉伯 Google Cloud 上推出BTP服务
- 标签列表
-
- ifneq (61)
- 字符串长度在线 (61)
- googlecloud (64)
- messagesource (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)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)