Spring Data MongoDB Reactive已配置uri还需实现getDatabaseName吗
Spring Data Reactive MongoDB 重复配置数据库名问题解答
- 核心原因:当你显式继承
AbstractReactiveMongoConfiguration自定义配置类时,Spring Boot 默认的 MongoDB 自动配置会退避,优先使用你自定义的配置逻辑。AbstractReactiveMongoConfiguration作为抽象类强制要求子类重写getDatabaseName方法返回数据库名,该类默认不会自动读取spring.data.mongodb.uri中携带的库名参数,因此需要手动指定。 - 两种配置方式的适用场景:
- 如果你没有自定义MongoDB底层配置的需求(例如自定义连接参数、自定义类型转换器、多数据源配置等),完全不需要编写继承
AbstractReactiveMongoConfiguration的配置类,仅需要在配置文件中填写spring.data.mongodb.uri即可正常访问数据库,uri中携带的用户名、密码、副本集地址、库名等参数都会被自动识别生效。 - 只有当你需要自定义MongoDB底层配置时,才需要手动继承
AbstractReactiveMongoConfiguration。如果不想重复编写数据库名造成配置不一致,可以注入MongoProperties对象直接读取配置文件中的值,示例如下:
@EnableReactiveMongoRepositories public class MongoReactiveApplication extends AbstractReactiveMongoConfiguration { @Autowired private MongoProperties mongoProperties; @Override protected String getDatabaseName() { // 直接读取配置文件uri中携带的数据库名,避免重复配置 return mongoProperties.getMongoClientDatabase(); } // 其他自定义配置逻辑 } - 如果你没有自定义MongoDB底层配置的需求(例如自定义连接参数、自定义类型转换器、多数据源配置等),完全不需要编写继承
- 补充说明:多数技术资料中给出继承
AbstractReactiveMongoConfiguration的配置示例,默认都是基于需要自定义底层配置的场景,如果你没有这类需求,直接使用Spring Boot自动配置即可,不需要额外编写配置类,自然也不存在重复指定库名的问题。
内容的提问来源于stack exchange,提问作者Jordi
相关产品推荐
相关产品推荐

