package com.jmfy.utils; import com.mongodb.MongoClient; import com.mongodb.MongoClientURI; import com.mongodb.client.MongoIterable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.mongodb.MongoDbFactory; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.SimpleMongoDbFactory; import org.springframework.data.mongodb.core.convert.DefaultDbRefResolver; import org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper; import org.springframework.data.mongodb.core.convert.MappingMongoConverter; import org.springframework.data.mongodb.core.convert.MongoConverter; import org.springframework.data.mongodb.core.mapping.MongoMappingContext; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * @author Administrator */ @Component public class Connect { private static final Logger LOGGER = LoggerFactory.getLogger(Connect.class); @Value("${spring.data.gameMongodb.uri}") private String oldMongoClient; private Map oldMongomaps = new ConcurrentHashMap<>(); @PostConstruct public void init() { MongoClient mongoClient = new MongoClient(new MongoClientURI(oldMongoClient)); MongoIterable databaseNames = mongoClient.listDatabaseNames(); for (String dbName : databaseNames) { LOGGER.info("gameMongodb-->dbName={}", dbName); MongoDbFactory mongoDbFactory = (new SimpleMongoDbFactory(mongoClient, dbName)); MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory, mappingMongoConverter(mongoDbFactory)); oldMongomaps.put(dbName, mongoTemplate); } } public MongoTemplate getMongoTemplete(String dbName) throws Exception { if (!oldMongomaps.containsKey(dbName)) { throw new Exception(dbName + " does not exist"); } MongoTemplate mongoTemplate = oldMongomaps.get(dbName); return mongoTemplate; } public MappingMongoConverter mappingMongoConverter( MongoDbFactory mongoDbFactory) { DefaultDbRefResolver dbRefResolver = new DefaultDbRefResolver(mongoDbFactory); MappingMongoConverter converter = new MappingMongoConverter(dbRefResolver, new MongoMappingContext()); converter.setTypeMapper(new DefaultMongoTypeMapper(null)); return converter; } }