1.mongo-order.xml
<?xml version="1.0" encoding="utf-8"?>
<config>
<value>{"maxConnectionIdleTime":60000,"connectionsPerHost":20,"threadsAllowedToBlockForConnectionMultiplier":15,"maxWaitTime":5000, "connectTimeout":3000,"socketTimeout":3000,"serverSelectionTimeout":3000,"standalone":false,"readPreference":"secondaryPreferred","servers":["mongo-replic-r1-car-all-test-db.01zhuanche.com:27017","mongo-replic-r2-car-all-test-db.01zhuanche.com:27017","mongo-replic-r3-car-all-test-db.01zhuanche.com:27017"]}</value>
</config>
2.MongoEnum
public enum MongoEnum implements IMongo {
OrderMongo("mongo-order"),
DriverMongoMaster("mongo-driver-master"),
DriverMongoSlave("mongo-driver-slave"),
DispatcherOrderMongo("mongo-disp-order"),
;
MongoEnum(String configName) {
this.configName = configName;
}
@Override
public String configKey() {
return configName;
}
private String configName;
}
3.MongoConfig
@Configuration
public class MongoConfig {
@Bean(name = "driverMongoTemplate" )
public MongoTemplate getDriverMongoTemplate() {
return new MongoTemplate( new SqMongoDbFactory(MongoEnum.DriverMongoSlave.get(), "DriverDB" ));
}
@Bean(name = "driverMongoTemplateMaster" )
public MongoTemplate getDriverMasterMongoTemplate() {
return new MongoTemplate( new SqMongoDbFactory(MongoEnum.DriverMongoMaster.get(), "DriverDB" ));
}
@Bean(name = "operatingMongoTemplate" )
public MongoTemplate getMongoTemplate() {
return new MongoTemplate( new SqMongoDbFactory(MongoEnum.DriverMongoSlave.get(), "OperatingDB" ));
}
@Bean(name = "orderDispatcherMongoTemplate" )
public MongoTemplate getOrderDispatcherMongoTemplate() {
return new MongoTemplate( new SqMongoDbFactory(MongoEnum.DispatcherOrderMongo.get(), "OrderDB" ));
}
}
4.SqMongoDbFactory
public class SqMongoDbFactory implements DisposableBean, MongoDbFactory {
private final MongoClientHolder holder;
private final String databaseName;
private final PersistenceExceptionTranslator exceptionTranslator;
private WriteConcern writeConcern;
public SqMongoDbFactory(MongoClientHolder holder, String databaseName) {
Assert.hasText(databaseName, "Database name must not be empty");
Assert.isTrue(databaseName.matches("[\\w-]+"),
"Database name must only contain letters, numbers, underscores and dashes!");
this.holder = holder;
this.databaseName = databaseName;
this.exceptionTranslator = new MongoExceptionTranslator();
}
public void setWriteConcern(WriteConcern writeConcern) {
this.writeConcern = writeConcern;
}
@Override
public void destroy() throws Exception {
holder.getClient().close();
}
@Override
public DB getDb() throws DataAccessException {
return getDb(databaseName);
}
@Override
public DB getDb(String dbName) throws DataAccessException {
Assert.hasText(dbName, "Database name must not be empty.");
DB db = holder.getDB(dbName);
if (writeConcern != null) {
db.setWriteConcern(writeConcern);
}
return db;
}
@Override
public PersistenceExceptionTranslator getExceptionTranslator() {
return this.exceptionTranslator;
}
}
5.IMongo
public int