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

Spring Boot中如何让application.properties正确读取环境变量?

解决Spring Boot读取系统环境变量失效问题及JWT属性配置

一、先排查环境变量本身的有效性

  • 先验证环境变量是否正确设置:
    • Windows(CMD):执行 echo %SPRING_DATASOURCE_URL%,确认输出预期值
    • Linux/macOS:执行 echo $SPRING_DATASOURCE_URL,确认输出预期值
  • 如果是在IDE中运行项目,必须重启IDE——IDE启动时会加载系统环境变量,修改环境变量后不重启不会生效;也可以直接在IDE的「运行配置」中手动添加环境变量,这种方式更可靠,不受系统环境变量的影响。

二、application.properties的正确写法

  • 变量名严格区分大小写,必须和系统环境变量完全一致,比如环境变量是SPRING_DATASOURCE_URL,配置里必须写:
    spring.datasource.url=${SPRING_DATASOURCE_URL}
    spring.datasource.username=${SPRING_DATASOURCE_USERNAME}
    spring.datasource.password=${SPRING_DATASOURCE_PASSWORD}
    
  • 不要使用SpEL的#{}语法(除非需要复杂表达式),直接用${}就是Spring读取环境变量的标准方式。

三、自定义配置类的正确实现(如果需要手动配置DataSource)

如果之前的自定义配置类失效,检查以下几点:

  1. 确保配置类被Spring扫描到(放在主启动类的同包/子包下,或通过@ComponentScan指定扫描路径)
  2. 用@Value正确绑定环境变量,示例:
@Configuration
public class DataSourceConfig {

    @Value("${SPRING_DATASOURCE_URL}")
    private String dbUrl;

    @Value("${SPRING_DATASOURCE_USERNAME}")
    private String dbUsername;

    @Value("${SPRING_DATASOURCE_PASSWORD}")
    private String dbPassword;

    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setUrl(dbUrl);
        dataSource.setUsername(dbUsername);
        dataSource.setPassword(dbPassword);
        return dataSource;
    }
}

四、用环境变量配置JWT属性的方法

和数据源配置逻辑完全一致:

  1. 先在系统中设置对应的环境变量,比如JWT_SECRET、JWT_EXPIRATION_MS
  2. 在application.properties中添加映射:
application.jwt.secret=${JWT_SECRET}
application.jwt.expiration-ms=${JWT_EXPIRATION_MS}
  1. 用@ConfigurationProperties批量绑定(更规范):
@Configuration
@ConfigurationProperties(prefix = "application.jwt")
public class JwtConfig {
    private String secret;
    private Long expirationMs;

    // 生成getter和setter方法
}

Spring会自动将大写下划线格式的环境变量(如JWT_SECRET)映射为驼峰命名的属性(secret)。

额外注意事项

  • 不要给环境变量配置默认值,避免敏感数据意外写入配置文件提交到GitHub;如果环境变量未设置,项目启动会报错,这反而能提醒你配置缺失。
  • 确保.gitignore中包含application-local.properties、application-dev.properties等本地配置文件,只提交作为模板的application.properties(里面只保留${变量名}的占位符)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 02:30:50