SpringBoot中如何为MongoUserUrlRepository创建Bean?参数无法识别如何解决
问题解答
错误原因
MongoClient无法注入:要么未引入MongoDB相关依赖完成基础配置,导致Spring容器中不存在MongoClient类型的Bean;要么依赖引入后未正确配置MongoDB连接参数,自动初始化MongoClient失败。dataBase、collection两个String类型参数无法注入:Spring容器中默认不存在这两个指定值的String类型Bean,且String为通用类型,存在多个同类型Bean时Spring无法自动匹配到你需要的值,自然注入失败。
解决方案
- 引入MongoDB相关依赖(Spring Boot项目推荐使用starter)
Maven依赖示例:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency>
引入后Spring Boot会自动读取配置文件中的MongoDB连接信息,完成MongoClient Bean的初始化。
- 在配置文件
application.yml(或application.properties)中添加MongoDB连接、业务配置项:
# MongoDB基础连接配置,Spring自动读取用来初始化MongoClient spring: data: mongodb: uri: mongodb://localhost:27017 # 自定义业务配置 custom: mongodb: user-url-db: 实际的数据库名 user-url-collection: 实际的集合名
- 修改@Bean定义方法,用
@Value注解读取自定义配置的字符串值,不要直接作为方法参数等待自动注入:
@Bean public UserUrlRepository getUserUrlRepository(MongoClient mongoClient, @Value("${custom.mongodb.user-url-db}") String dataBase, @Value("${custom.mongodb.user-url-collection}") String collection){ return new MongoUserUrlRepository(mongoClient, dataBase, collection); }
注意:包含上述@Bean方法的类必须标注@Configuration注解,否则@Bean、@Value注解都不会生效。
如果是非Spring Boot项目,需要手动初始化MongoClient Bean:
@Bean public MongoClient mongoClient() { // 替换为实际的MongoDB连接地址 return MongoClients.create("mongodb://localhost:27017"); }
内容的提问来源于stack exchange,提问作者user9347049
相关产品推荐
相关产品推荐

