MongoDB trying to connect to localhost, Why?

匿名 (未验证) 提交于 2019-12-03 07:47:04

问题:

I am currently developing a Java application connected to a remote MongoDB databse.

I have implemented the authentication methods fallowing the mongo guides:

MongoCredential credential = MongoCredential.createScramSha1Credential(username, credentialDatabase, password.toCharArray()); MongoClient client = new MongoClient(new ServerAddress(hostname, port), Arrays.asList(credential)); mongoDatabase = client.getDatabase(database); 

The app connect properly to the database but there is a thing i can't understand.It connects well to the remote server,but I don't know why it try to connect to localhost:27017.

2016-03-07 16:13:29.662  INFO 12507 --- [*.*.*:25015] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:1, serverValue:29}] to *.*.*.*:25015  2016-03-07 16:13:29.687  INFO 12507 --- [*.*.*:25015] org.mongodb.driver.cluster               : Monitor thread successfully connected to server with description ServerDescription{address=*.*.*.*:25015, type=STANDALONE, state=CONNECTED, ok=true, version=ServerVersion{versionList=[3, 2, 3]}, minWireVersion=0, maxWireVersion=4, maxDocumentSize=16777216, roundTripTimeNanos=24485426}   2016-03-07 16:13:30.062  INFO 12507 --- [           main] org.mongodb.driver.cluster               : Cluster created with settings {hosts=[localhost:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500}   2016-03-07 16:13:30.220  INFO 12507 --- [localhost:27017] org.mongodb.driver.cluster               : Exception in monitor thread while connecting to server localhost:27017  com.mongodb.MongoSocketOpenException: Exception opening socket 

So, how can I tell it I don't want to connect to localhost ?

Thanks

回答1:

You can exclude Mongo auto connect/(localhost:27017) by adding below annotation on spring boot Application.java.

@EnableAutoConfiguration(exclude={MongoAutoConfiguration.class}) public class Application {     // ... } 


回答2:

I'm not sure if this will help.

If you are using SpringBoot 1.4 and you will not have a bean for MongoClient in the context auto configuration will create MongoClient using default configuration.

@Configuration ---->@ConditionalOnClass(MongoClient.class)<---- @EnableConfigurationProperties(MongoProperties.class) @ConditionalOnMissingBean(type = "org.springframework.data.mongodb.MongoDbFactory") public class MongoAutoConfiguration { ...     @Bean     ---->@ConditionalOnMissingBean<----     public MongoClient mongo() throws UnknownHostException {         this.mongo = this.properties.createMongoClient(this.options, this.environment);         return this.mongo;     } ... 

So you have 3 options:

  1. Exclude auto configuration for mongo.
  2. Expose MongoClient as a bean in context.
  3. Use default way of configuration for SpringBoot/Mongo and relay on auto configuration to create MongoClient for you: spring.data.mongodb.host= spring.data.mongodb.port= spring.data.mongodb.database= spring.data.mongodb.username= spring.data.mongodb.password=


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!