Spring Boot支持應用程序中建立多個Mongo模板鏈接到兩個不一樣的mongo服務器。java
建立多個Mongo鏈接mongodb
application.properties/yml服務器
properties:
primary.mongodb.host=<primary_mongodb_host>
primary.mongodb.port=<primary_mongodb_port>
primary.mongodb.database=<primary_mongodb_database>
secondary.mongodb.host=<secondary_mongodb_host>
secondary.mongodb.port=<secondary_mongodb_port>
secondary.mongodb.database=<secondary_mongodb_database>
yml:
primary:
mongodb:
host:<primary_mongodb_host>
port:<primary_mongodb_port>
database:<primary_mongodb_database>
secondary:
mongodb:
host:<secondary_mongodb_host>
port:<primary_mongodb_port>
database:<secondary_mongodb_database>
複製代碼
建立配置類:app
public abstract class AbstractMongoConfig {
//mongodb配置屬性
private String host, database;
private int port;
//Setter methods go here..
/* * 建立MongoDBFactory的方法 * 兩個MongoDB鏈接共用 */
public MongoDbFactory mongoDbFactory() throws Exception {
return new SimpleMongoDbFactory(new MongoClient(host, port), database);
}
/* * Factory method to create the MongoTemplate */
abstract public MongoTemplate getMongoTemplate() throws Exception;
}複製代碼
鏈接配置: ide
//Master-MongoTemplate
@Configuration
@ConfigurationProperties(prefix = "primary.mongodb") //前綴指向
public class CommonMongoConfig extends AbstractMongoConfig {
/** * MongoTemplate實現 * @Bean爲建立的mongotemplate實例提供一個名稱(primarymongotemplate) * @Primary 設爲默認 */
@Primary
@Override
public @Bean(name = "primaryMongoTemplate") MongoTemplate getMongoTemplate() throws Exception {
return new MongoTemplate(mongoDbFactory());
}
}複製代碼
// Slave-mongoTempalte
@Configuration
class @ConfigurationProperties(prefix = "secondary.mongodb") //前綴映射
public class SecondaryMongoConfig extends AbstractMongoConfig {
@Override public @Bean(name = "secondaryMongoTemplate")
MongoTemplate getMongoTemplate() throws Exception {
return new MongoTemplate(mongoDbFactory());
}
}複製代碼
使用lua
//Using MongoTemplate for primary database
@Autowired
@Qualifier(value = "primaryMongoTemplate") //primarymongotemplate爲默認的mongotemplate
protected MongoTemplate mongoTemplate;
//Using mongoTemplate for secondary database
@Autowired
@Qualifier(value = "secondaryMongoTemplate")
protected MongoTemplate mongoTemplate;複製代碼