OpenShift4部署Spring Boot应用openshift Profile不生效及oc env异常问题
OpenShift部署Spring Boot Profile不生效问题排查方案
Spring Profile未激活问题原因
- 未配置激活Profile的环境变量
Spring Boot需要通过SPRING_PROFILES_ACTIVE环境变量指定激活的Profile,你本地IDEA中配置了该变量,但OpenShift部署时未给Deployment/DeploymentConfig注入该变量,因此默认加载default Profile。 - 配置文件拼写错误
你给出的配置文件名为applicaton-openshift.yaml,正确拼写应为application-openshift.yaml,少写了字母i会导致Spring Boot无法识别对应Profile的配置文件。 - 配置文件格式错误
你贴出的YAML配置缩进不符合规范,datasource需要是spring的子属性,必须缩进2个空格,否则会解析失败,正确格式如下:
spring: datasource: url: jdbc:oracle:thin:@//${DB_URL} username: ${DB_USERNAME} password: ${DB_PASSWORD}
- 配置文件未打入镜像
打包镜像时未将application-openshift.yaml放入Jar包的BOOT-INF/classes目录下,导致Spring Boot无法读取对应配置。
oc env命令无法使用问题原因
- 命令语法错误
OpenShift 4中旧的oc env命令已整合到oc set env子命令下,直接执行oc env会报错,正确写法如下:- 针对DeploymentConfig资源:
oc set env dc/<资源名称> SPRING_PROFILES_ACTIVE=openshift DB_URL=<数据库地址> DB_USERNAME=<用户名> DB_PASSWORD=<密码> - 针对Deployment资源:
oc set env deploy/<资源名称> SPRING_PROFILES_ACTIVE=openshift DB_URL=<数据库地址> DB_USERNAME=<用户名> DB_PASSWORD=<密码>
- 针对DeploymentConfig资源:
- 账号权限不足
当前使用的OpenShift账号没有对应命名空间下的资源编辑权限,可执行oc auth can-i update deployments/env或者oc auth can-i update deploymentconfigs/env验证权限,权限不足需要联系集群管理员开通。 - 配置未生效
设置环境变量后需要触发重新部署才会加载新配置,执行oc rollout restart deploy/<资源名称>或者oc rollout latest dc/<资源名称>重启Pod即可。
生效验证
Pod启动后执行oc exec <Pod名称> -- printenv | grep SPRING_PROFILES_ACTIVE确认环境变量是否正确注入,也可以查看Pod启动日志,搜索The following profiles are active关键字,确认激活的Profile是否符合预期。
内容的提问来源于stack exchange,提问作者Syed Iftekharuddin
相关产品推荐
相关产品推荐

