我有一个可以与多个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
有人可以指导我自定义配置中做错了什么吗?
答案 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/