春季启动蒙戈多个数据库
问题描述:
我如何配置application.properties使用多个mongoTemplate春季启动蒙戈多个数据库
我目前的配置。
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=user
我的代码:
public class UserRepository
{
@Autowired
private MongoTemplate mongoTemplate;
public UserInfo getUserInfo(){
//i can get user information from user database
mongoTemplate.findAll();
}
}
我想从其他数据库中的数据,如常见的数据库。例如
public class UserRepository
{
@Autowired
private MongoTemplate mongoUserTemplate;
@Autowired
private MongoTemplate mongoCommonTemplate;
public UserInfo getUserInfo(){
//i can get user information from user database
mongoUserTemplate.findAll();
//how can i configure application.properties to use
//mongoCommonTemplate...
mongoCommonTemplate.findAll();
}
}
答
有一个Qualifier
注释,您可以使用您要使用bean提供一个名称。
所以当你创建MongoTemplate对象时,给它们不同的名字。然后在你想使用不同版本的地方添加一个Qualifier注解,提供你想要的bean的名字。
例如:
配置类:
@Configuration
public class AppConfig {
public @Bean Mongo mongo() throws Exception {
return new Mongo("localhost");
}
public @Bean MongoTemplate userTemplate() throws Exception {
return new MongoTemplate(mongo(), "user");
}
public @Bean MongoTemplate commonTemplate() throws Exception {
return new MongoTemplate(mongo(), "common");
}
}
类要自动装配模板:
@Autowired
@Qualifier("userTemplate")
private MongoTemplate userTemplate;
@Autowired
@Qualifier("commonTemplate")
private MongoTemplate commonTemplate;
**如果bean的名称的名称相匹配你自动装入它的字段,那么我认为你甚至可以在不使用Qualifier
注释的情况下离开。即如果您在config类中调用bean userTemplate
,则可以将其自动装入名为userTemplate
的字段,而不需要@Qualifier
注释