Mongo 自定义配置未连接到 Mongo 实例

Mongo Custom Configuration Is not connecting to Mongo instance

我有一个与多个 mongo 实例和数据库通信的应用程序。我创建每个 MongoTemplate 以连接到单独的 DB

这是我的属性

my.dburi=mongodb://user_name:password@mongo-instance01,mongo-instance02,mongo-instance03/database_appname?authSource=admin&replicaSet=mongoappinstance&ssl=false&w=majority&readPreference=primaryPreferred
my.dbname=database_appname

这里是配置class

@Configuration
public class MyMongoConfigs extends AbstractMongoConfiguration {

  protected static final Logger logger_c = LoggerFactory.getLogger(MyMongoConfigs.class);

  @Value("${my.dburi}")
  private String host;

   @Value("${my.dbname}")
  private String dbName;

  @Override
  protected String getDatabaseName() {
    return dbName;
  }

  @Override
  public MongoClient mongoClient() {
    return   new MongoClient(host);
  }

  @Bean
  public MongoTemplate myMongoTemplate() throws Exception {
    MongoTemplate myTemp = new MongoTemplate(mongoDbFactory(), mappingMongoConverter());
    return myTemp;
  }



  @Bean
  public MongoCustomConversions customConversions(){
    return createCustomConversions();
  }

  @Bean
  public MappingMongoConverter mappingMongoConverter() throws Exception{
    DbRefResolver dbRefResolver = new DefaultDbRefResolver(mongoDbFactory());
    MappingMongoConverter converter = new MappingMongoConverter(dbRefResolver, mongoMappingContext());
    converter.setCustomConversions(customConversions());
    // This line removes the _class field from all Spring Mongo records
    converter.setTypeMapper( new DefaultMongoTypeMapper(null) );
    return converter;
  }


}

但我收到套接字异常

com.mongodb.MongoSocketException: mongodb:......

Caused by: java.net.UnknownHostException:

同时,当我尝试使用 spring-boot 默认配置时,它工作正常

使用默认 spring 数据 属性

spring.data.mongodb.uri=mongodb://user_name:password@mongo-instance01,mongo-instance02,mongo-instance03/database_appname?authSource=admin&replicaSet=mongoappinstance&ssl=false&w=majority&readPreference=primaryPreferred

这是日志

019-09-16 09:11:41.162  INFO 39908 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2019-09-16 09:11:42.466  INFO 39908 --- [           main] org.mongodb.driver.cluster               : Cluster created with settings {hosts=[mongo-instance01:27017, mongo-instance02:27017, mongo-instance03:27017], mode=MULTIPLE, requiredClusterType=REPLICA_SET, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500, requiredReplicaSetName='mongoappinstance'}
2019-09-16 09:11:42.467  INFO 39908 --- [           main] org.mongodb.driver.cluster               : Adding discovered server mongo-instance02:27017 to client view of cluster
2019-09-16 09:11:42.495  INFO 39908 --- [           main] org.mongodb.driver.cluster               : Adding discovered server mongo-instance02:27017 to client view of cluster
2019-09-16 09:11:42.497  INFO 39908 --- [           main] org.mongodb.driver.cluster               : Adding discovered server mongo-instance02:27017 to client view of cluster
2019-09-16 09:11:42.622  INFO 39908 --- [line02:27017] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:3, serverValue:4897703}] to mongo-instance02:27017
2019-09-16 09:11:42.632  INFO 39908 --- [line01:27017] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:1, serverValue:4393722}] to mongo-instance01:27017
2019-09-16 09:11:42.632  INFO 39908 --- [line03:27017] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:2, serverValue:4915793}] to mongo-instance03:27017
2019-09-16 09:11:42.641  INFO 39908 --- [line02:27017] org.mongodb.driver.cluster               : Monitor thread successfully connected to server with description ServerDescription{address=mongo-instance02:27017, type=REPLICA_SET_SECONDARY, state=CONNECTED, ok=true, version=ServerVersion{versionList=[3, 4, 16]}, minWireVersion=0, maxWireVersion=5, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=null, roundTripTimeNanos=17769877, setName='mongoappinstance', canonicalAddress=mongo-instance02:27017, hosts=[mongo-instance01:27017, mongo-instance03:27017, mongo-instance02:27017], passives=[], arbiters=[], primary='mongo-instance03:27017', tagSet=TagSet{[]}, electionId=null, setVersion=3, lastWriteDate=Mon Sep 16 09:08:18 BST 2019, lastUpdateTimeNanos=2416622912401383}
2019-09-16 09:11:42.656  INFO 39908 --- [line01:27017] org.mongodb.driver.cluster               : Monitor thread successfully connected to server with description ServerDescription{address=mongo-instance01:27017, type=REPLICA_SET_SECONDARY, state=CONNECTED, ok=true, version=ServerVersion{versionList=[3, 4, 16]}, minWireVersion=0, maxWireVersion=5, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=null, roundTripTimeNanos=23522766, setName='mongoappinstance', canonicalAddress=mongo-instance01:27017, hosts=[mongo-instance01:27017, mongo-instance03:27017, mongo-instance02:27017], passives=[], arbiters=[], primary='mongo-instance03:27017', tagSet=TagSet{[]}, electionId=null, setVersion=3, lastWriteDate=Mon Sep 16 09:08:18 BST 2019, lastUpdateTimeNanos=2416622927444543}
2019-09-16 09:11:42.656  INFO 39908 --- [line03:27017] org.mongodb.driver.cluster               : Monitor thread successfully connected to server with description ServerDescription{address=mongo-instance03:27017, type=REPLICA_SET_PRIMARY, state=CONNECTED, ok=true, version=ServerVersion{versionList=[3, 4, 16]}, minWireVersion=0, maxWireVersion=5, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=null, roundTripTimeNanos=23504988, setName='mongoappinstance', canonicalAddress=mongo-instance03:27017, hosts=[mongo-instance01:27017, mongo-instance03:27017, mongo-instance02:27017], passives=[], arbiters=[], primary='mongo-instance03:27017', tagSet=TagSet{[]}, electionId=5ca1d2f4d7f06c38b0ee8b03, setVersion=3, lastWriteDate=Mon Sep 16 09:08:18 BST 2019, lastUpdateTimeNanos=2416622927444543}
2019-09-16 09:11:42.657  INFO 39908 --- [line03:27017] org.mongodb.driver.cluster               : Setting max election id to 5ca1d2f4d7f06c38b0ee8b03 from replica set primary mongo-instance03:27017
2019-09-16 09:11:42.657  INFO 39908 --- [line03:27017] org.mongodb.driver.cluster               : Setting max set version to 3 from replica set primary mongo-instance03:27017
2019-09-16 09:11:42.657  INFO 39908 --- [line03:27017] org.mongodb.driver.cluster               : Discovered replica set primary mongo-instance03:27017

有人可以指导我在自定义配置中做错了什么吗??

mongoClient() 方法更新为以下内容,
您需要将连接字符串包装到 MongoClientURI 并将 MongoClientURI 传递给 MongoClient.

@Override
  public MongoClient mongoClient() {
    MongoClientURI uri = new MongoClientURI(host);
    return new MongoClient(uri);
  }

参考:https://mongodb.github.io/mongo-java-driver/3.11/driver/tutorials/connect-to-mongodb/