I'm trying to connect my Spring Boot Java Application (Running on EKS - AWS Kubernetes) on Atlas MongoDB Cluster. Sometimes my application can connect on Atlas and sometimes i can't connect and give me stack trace bellow (intermittent issue).
INFO 1 --- [nio-8060-exec-8] org.mongodb.driver.cluster : No server chosen by ReadPreferenceServerSelector{readPreference=primary} from cluster description ClusterDescription{type=REPLICA_SET, connectionMode=MULTIPLE, serverDescriptions=[ServerDescription{address=primary-shard.yyyy.mongodb.net:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketException: primary-shard.yyyy.mongodb.net}, caused by {java.net.UnknownHostException: primary-shard.yyyy.mongodb.net}}, ServerDescription{address=secondary-shard.yyyy.mongodb.net:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketException: secondary-shard.yyyy.mongodb.net}, caused by {java.net.UnknownHostException: secondary-shard.yyyy.mongodb.net}}, ServerDescription{address=third-shard.yyyy.mongodb.net:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketException: third-shard.yyyy.mongodb.net}, caused by {java.net.UnknownHostException: third-shard.yyyy.mongodb.net}}]}. Waiting for 30000 ms before timing out
INFO 1 --- [ngodb.net:27017] org.mongodb.driver.cluster : Exception in monitor thread while connecting to server secondary-shard.yyyy.mongodb.net:27017
com.mongodb.MongoSocketException: secondary-shard.yyyy.mongodb.net: Try again at com.mongodb.ServerAddress.getSocketAddress(ServerAddress.java:188) ~[mongo-java-driver-3.4.3.jar!/:na]
at com.mongodb.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:57) ~[mongo-java-driver-3.4.3.jar!/:na]
at com.mongodb.connection.SocketStream.open(SocketStream.java:58) ~[mongo-java-driver-3.4.3.jar!/:na]
at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:115) ~[mongo-java-driver-3.4.3.jar!/:na]
at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:113) ~[mongo-java-driver-3.4.3.jar!/:na]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_151]
Caused by: java.net.UnknownHostException: secondary-shard.yyyy.mongodb.net: Try again
at java.net.Inet4AddressImpl.lookupAllHostAddr(Native Method) ~[na:1.8.0_151]
at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:928) ~[na:1.8.0_151]
at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1323) ~[na:1.8.0_151]
at java.net.InetAddress.getAllByName0(InetAddress.java:1276) ~[na:1.8.0_151]
at java.net.InetAddress.getAllByName(InetAddress.java:1192) ~[na:1.8.0_151]
at java.net.InetAddress.getAllByName(InetAddress.java:1126) ~[na:1.8.0_151]
at java.net.InetAddress.getByName(InetAddress.java:1076) ~[na:1.8.0_151]
at com.mongodb.ServerAddress.getSocketAddress(ServerAddress.java:186) ~[mongo-java-driver-3.4.3.jar!/:na]
... 5 common frames omitted
pom.xml:
<dependency>
<groupId>dev.morphia.morphia</groupId>
<artifactId>core</artifactId>
<version>1.5.3</version>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.4.3</version>
</dependency>
Connection string (suggested by Atlas MongoDB):
mongodb://<username>:<password>@secondary-shard.yyyy.mongodb.net:27017,third-shard.yyyy.mongodb.net:27017,primary-shard.yyyy.mongodb.net:27017/<database>?ssl=true&replicaSet=RSNAME-shard-X&authSource=admin&retryWrites=true&w=majority
Note: I'm try to apply changes bellow but didn't work
- insert (exclude = { MongoAutoConfiguration.class, MongoDataAutoConfiguration.class }) on @EnableAutoConfiguration
- insert -Djava.net.preferIPv4Stack=true
- change my mongo-db-driver to latest version
- check whitelist cluster mongodb but is ok
Thanks!