无法添加spring-dotenv依赖及SpringBoot连接MongoDB失败求助
问题与解决方案
问题概述
使用React、Spring Boot和MongoDB构建项目时,遇到以下问题:
- IDE提示spring-dotenv依赖及spring-boot-maven-plugin插件找不到
- Spring Boot启动时MongoDB连接失败,报错环境变量占位符未解析
错误信息
1. Maven依赖/插件报错
Dependency 'me.paulschwarz:spring-dotenv:2.5.4' not found Dependency 'me.paulschwarz:spring-dotenv:2.5.4' not found Dependency 'me.paulschwarz:spring-dotenv:2.5.4' not found Plugin 'org.springframework.boot:spring-boot-maven-plugin:' not found Plugin 'org.springframework.boot:spring-boot-maven-plugin:' not found
2. Spring Boot启动报错
Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. 2023-06-19T17:04:01.904+05:30 ERROR 20836 --- [ restartedMain] o.s.boot.SpringApplication : Application run failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mongo' defined in class path resource [org/springframework/boot/autoconfigure/mongo/MongoAutoConfiguration.class]: Failed to instantiate [com.mongodb.client.MongoClient]: Factory method 'mongo' threw exception with message: An SRV host name '${env.MONGO_CLUSTER}' was provided that does not contain at least three parts. It must contain a hostname, domain name and a top level domain. ...(省略部分栈追踪) Caused by: java.lang.IllegalArgumentException: An SRV host name '${env.MONGO_CLUSTER}' was provided that does not contain at least three parts. It must contain a hostname, domain name and a top level domain. ...(省略部分栈追踪)
当前配置文件
1. .env文件(resources目录下)
MONGO_DATABASE = "movies-api-db" MONGO_USERNAME = "f20191081" MONGO_PASSWORD = "AshuGunna98" MONGO_CLUSTER = "cluster0.oobowit.mongodb.net"
2. application.properties
spring.data.mongodb.database = ${env.MONGO_DATABASE} spring.data.mongodb.uri = mongodb+srv://${env.MONGO_USER}:${env.MONGO_PASSWORD}@${env.MONGO_CLUSTER}
3. pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.1.0</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>dev.ayushKasara</groupId> <artifactId>movies</artifactId> <version>0.0.1-SNAPSHOT</version> <name>movies</name> <description>A simple API related movies</description> <properties> <java.version>17</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>me.paulschwarz</groupId> <artifactId>spring-dotenv</artifactId> <version>2.5.4</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build> </project>
解决方案
1. 修正spring-dotenv依赖版本
Spring Boot 3.1.0与spring-dotenv 2.5.4存在兼容性问题,将依赖版本升级为适配Spring Boot 3的3.0.0版本:
<dependency> <groupId>me.paulschwarz</groupId> <artifactId>spring-dotenv</artifactId> <version>3.0.0</version> </dependency>
2. 修复环境变量配置错误
.env文件修正:去掉变量值的引号和等号两侧的空格(引号会被解析为值的一部分,空格会导致变量名/值包含冗余字符):
MONGO_DATABASE=movies-api-db MONGO_USERNAME=f20191081 MONGO_PASSWORD=AshuGunna98 MONGO_CLUSTER=cluster0.oobowit.mongodb.net
application.properties修正:将${env.MONGO_USER}改为${env.MONGO_USERNAME}(与.env中的变量名一致),并完善MongoDB连接URI:
spring.data.mongodb.database=${env.MONGO_DATABASE} spring.data.mongodb.uri=mongodb+srv://${env.MONGO_USERNAME}:${env.MONGO_PASSWORD}@${env.MONGO_CLUSTER}/${env.MONGO_DATABASE}?retryWrites=true&w=majority
3. 解决Maven插件报错
spring-boot-maven-plugin可继承parent的版本,若IDE仍提示找不到,手动指定版本与parent一致:
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>3.1.0</version> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin>
4. 验证步骤
- 保存所有修改后的文件
- 执行
mvn clean install清理并构建项目 - 刷新IDEA的Maven依赖(点击右侧Maven面板的刷新按钮)
- 重启Spring Boot应用,检查是否正常连接MongoDB
内容的提问来源于stack exchange,提问作者Ayush Kasara
相关产品推荐
相关产品推荐

