在我的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);
}发布于 2019-05-08 11:10:47
MongoDB Boot自动配置提供了一个默认的MongoTemplate,以便于生成Spring存储库。
但是,如果要使用多个MongoDB数据库,则需要
Spring为每个
例如,假设您注册了2个MongoTemplates,即templateAdmin和templateUser,它们显式配置为它们的MongoDB。然后,您可以使用这样的代码来通知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无关,但事实并非如此。
发布于 2019-05-08 15:39:31
尽管已经将问题标记为重复,但仍添加了答案,因为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的副本
https://stackoverflow.com/questions/56017086
复制相似问题