在我的spring boot应用程序中,我已经在yml文件中配置了两个数据库。因此,现在我想指定在每个MongoRepository中使用哪个数据库。这可能吗?如果是这样,该怎么办?提前致谢。
yml文件:
spring:
data:
mongodb:
first:
host: 127.0.0.1
port: 27017
database: db_admin
rest:
base-path: /admin
second:
host: 127.0.0.1
port: 27018
database: `user_forms`
rest:
base-path: /users
因此,在用户MongoRepository中,我想使用user_forms
数据库。
用户MongoRepository:
@RepositoryRestResource(collectionResourceRel = "users",path = "users")
public interface UserRepository extends MongoRepository<User, String> {
List<User> findByUserId(String id);
}
答案 0 :(得分:0)
Spring Boot自动配置提供了默认的MongoTemplate,以方便生成MongoDB存储库。
但是,如果要使用多个MongoDB数据库,则需要
例如,假设您注册了2个MongoTemplate,即分别配置为MongoDB的MongoDB和templateUser。然后,您可以使用如下代码来通知Spring Data MongoDB哪些存储库使用哪个模板:
@EnableMongoRepositories(
basePackages = "com.the.base.package.name.of.admin.repositories",
mongoTemplateRef = "adminTemplateBeanName")
@Configuration
public class AdminMongoConfig {
@Bean
public MongoTemplate adminTemplateBeanName() {
//...
}
}
Configure Multiple MongoDB repositories with Spring Data Mongo基本上解释了我所说的所有观点。因此,我的猜测很疯狂,您可能会误以为MongoTemplate与MongoRepository无关,事实并非如此。
答案 1 :(得分:0)
尽管已将问题标记为重复,但仍添加答案,因为MongoRepository
是否使用MongoTemplate
会引起一些混淆。
当您注入MongoRepository时,它由SimpleMongoRepository
类的实例代理。它有一个字段
private final MongoOperations mongoOperations;
MongoOperations
是一个接口,MongoTemplate
是其实现。
现在,问题是此默认mongo模板在Spring Boot应用程序中来自何处。
看MongoDataAutoConfiguration
@Bean
@ConditionalOnMissingBean
public MongoTemplate mongoTemplate(MongoDbFactory mongoDbFactory,
MongoConverter converter) {
return new MongoTemplate(mongoDbFactory, converter);
}
因此,我仍然声称它是Configure Multiple MongoDB repositories with Spring Data Mongo
的副本