如何配置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();
}
}
答案 0 :(得分:1)
您可以使用Qualifier
注释为要使用的bean提供名称。
因此,当您创建MongoTemplate对象时,请为它们指定不同的名称。然后在您想要使用不同版本的地方添加一个限定符注释,提供您想要的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
注释的情况下离开。即如果您在配置类中调用bean userTemplate
,则可以将其自动装入名为userTemplate
的字段中,而不使用@Qualifier
注释