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,提问作者אורין אורן
相关产品推荐
相关产品推荐

