You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Compose配置的自定义环境变量在Spring Boot Kotlin项目中不生效

问题原因与解决方案

核心原因

Spring Boot默认宽松绑定规则 + 环境变量命名规范的双重限制:

  • 你配置的spring_datasource_username符合Spring Boot的环境变量映射规则:Spring会自动将环境变量的下划线_转换为配置属性的点.,所以该变量会被自动映射为Spring Boot内置的spring.datasource.username数据源属性,因此可以正常读取。
  • 自定义变量my-app_env_one包含短横线-,不符合Spring Boot默认的宽松绑定映射逻辑,无法自动映射到代码中的配置属性;同时POSIX标准中环境变量名不推荐使用短横线,部分场景下会导致JVM读取异常。

解决方案

方案1(推荐,符合Spring Boot规范)

修改docker-compose.yml中的环境变量命名,统一使用大写字母+下划线的格式:

environment:
  MY_APP_ENV_ONE: something
  spring_datasource_username: user

代码中直接按Spring Boot常规配置方式读取即可:

  • 用@Value注入:@Value("${my.app.env.one}") lateinit var envOne: String
  • 用@ConfigurationProperties读取:前缀配置为my.app,定义属性envOne即可自动映射

方案2(保留原有变量名)

如果必须保留my-app_env_one的变量名,直接通过完整变量名读取即可:

  • @Value("${my-app_env_one}") lateinit var envOne: String
  • 或直接调用JDK原生方法读取:System.getenv("my-app_env_one")

验证方法

可以先执行以下命令确认容器内的环境变量是否正常传递:
docker exec tomcat printenv my-app_env_one
如果命令输出对应值,说明变量已经正常传入容器,仅为Spring Boot映射问题,按上述方案修改即可。


内容的提问来源于stack exchange,提问作者Fabian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 12:54:02