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

Spring读取application.properties环境变量时出现NullPointerException问题

空指针异常原因及解决方案

根本原因

你遇到空指针的核心原因是 Spring不支持直接对静态变量使用@Autowired进行依赖注入:

  • Spring的依赖注入是基于对象实例层面实现的,而静态变量属于类属性,在类加载阶段就完成初始化,此时Spring容器还未完成相关Bean的实例化和注入逻辑,最终导致env变量始终为null,调用getProperty方法时抛出空指针。
  • 额外排查点:如果你的MailService类没有添加@Component、@Service这类Spring容器托管注解,就算去掉static修饰符也无法完成注入,同样会出现空指针。

解决方案

分两种场景适配:

场景1:不需要强制使用静态send方法(推荐)

去掉所有static修饰,将MailService交给Spring容器托管,使用时通过注入实例调用方法即可:

import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
import org.springframework.beans.factory.annotation.Autowired;

@Component
public class MailService {

    @Autowired
    private Environment env;

    public void send(){
        System.out.println("AWS_ACCESS_KEY_ID:" + env.getProperty("AWS_ACCESS_KEY_ID"));
    }
}

调用示例:

// 其他需要调用发信的Spring管理类中
@Autowired
private MailService mailService;

public void test() {
    mailService.send();
}

场景2:必须使用静态send方法

通过setter注入的方式给静态变量赋值,同时保证MailService被Spring托管:

import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
import org.springframework.beans.factory.annotation.Autowired;

@Component
public class MailService {

    private static Environment env;

    @Autowired
    public void setEnv(Environment env) {
        MailService.env = env;
    }

    public static void send(){
        System.out.println("AWS_ACCESS_KEY_ID:" + env.getProperty("AWS_ACCESS_KEY_ID"));
    }
}

额外配置优化建议

你的application.properties中配置值加了双引号,读取出来的结果会自带双引号,如果你不需要带引号的配置值,可以直接去掉引号:

AWS_ACCESS_KEY_ID=Asdsds
AWS_SECRET_KEY=sdsdsdsdsdsd

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:15:07