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

Maven无法识别环境变量导致Spring Boot测试时数据库连接被拒绝

报错的核心原因是Maven默认的测试执行插件maven-surefire-plugin会对执行环境做隔离,默认不会继承当前系统的环境变量,导致Spring配置文件中的${DB_USERNAME}、${DB_PASSWORD}占位符无法被正确解析,直接将占位符字符串作为数据库账号密码发起连接,因此抛出权限拒绝错误。

你可以选择以下任意一种方案解决:

方案1:修改pom.xml配置让Surefire插件继承系统环境变量

在项目的pom.xml中添加/修改maven-surefire-plugin的配置,指定需要传递的环境变量即可:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.22.2</version> <!-- 替换为你项目实际使用的插件版本即可 -->
            <configuration>
                <environmentVariables>
                    <!-- 读取系统环境变量传递给测试进程 -->
                    <DB_USERNAME>${env.DB_USERNAME}</DB_USERNAME>
                    <DB_PASSWORD>${env.DB_PASSWORD}</DB_PASSWORD>
                </environmentVariables>
            </configuration>
        </plugin>
    </plugins>
</build>

配置完成后重新执行mvn test即可正常读取环境变量。

方案2:执行测试命令时临时传递参数

如果不想修改pom文件,也可以在执行测试命令时直接传入配置参数覆盖原有占位符:

mvn test -Dspring.datasource.username=你的数据库账号 -Dspring.datasource.password=你的数据库密码

方案3:本地测试专用配置(仅适合本地开发场景)

在src/test/resources目录下新建application.properties配置文件,直接写入测试用的固定数据库配置,避免依赖环境变量:

spring.datasource.username=你的本地数据库账号
spring.datasource.password=你的本地数据库密码

测试目录下的配置文件优先级高于主资源目录的配置,会自动覆盖主配置中的对应项。

方案4:IDE运行测试时手动配置环境变量

如果是在IDEA等IDE中直接运行单元测试,可以打开对应测试的运行配置,在「Environment variables」栏添加如下配置后再运行测试:

DB_USERNAME=你的账号;DB_PASSWORD=你的密码

内容的提问来源于stack exchange,提问作者אורין אורן

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 19:24:06