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

时间:2019-09-16 08:58:01

标签: mongodb spring-boot spring-data spring-data-mongodb

我有一个可以与多个mongo实例和数据库对话的应用程序。我创建了每个MongoTemplate来连接到单独的数据库

这是我的财产

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

在这里配置类

@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:......

     

原因:java.net.UnknownHostException:

同时尝试使用spring-boot默认配置,效果很好

使用的默认弹簧数据属性

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

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

1 个答案:

答案 0 :(得分:2)

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/