private MongoClientOptions createMongoClientOptions(ClientConfig config) { MongoClientOptions.Builder optionsBuilder = new MongoClientOptions.Builder(); optionsBuilder.alwaysUseMBeans(config.alwaysUseMBeans()); optionsBuilder.connectionsPerHost(config.connectionsPerHost()); optionsBuilder.connectTimeout(config.connectTimeout()); optionsBuilder.cursorFinalizerEnabled(config.cursorFinalizerEnabled()); optionsBuilder.description(config.description()); optionsBuilder.heartbeatConnectTimeout(config.heartbeatConnectTimeout()); optionsBuilder.heartbeatFrequency(config.heartbeatFrequency()); optionsBuilder.heartbeatSocketTimeout(config.heartbeatSocketTimeout()); optionsBuilder.localThreshold(config.localThreshold()); optionsBuilder.maxConnectionIdleTime(config.maxConnectionIdleTime()); optionsBuilder.maxConnectionLifeTime(config.maxConnectionLifeTime()); optionsBuilder.maxWaitTime(config.maxWaitTime()); optionsBuilder.minConnectionsPerHost(config.minConnectionsPerHost()); optionsBuilder.minHeartbeatFrequency(config.minHeartbeatFrequency()); optionsBuilder.serverSelectionTimeout(config.serverSelectionTimeout()); optionsBuilder.socketKeepAlive(config.socketKeepAlive()); optionsBuilder.socketTimeout(config.socketTimeout()); optionsBuilder.sslEnabled(config.sslEnabled()); optionsBuilder.sslInvalidHostNameAllowed(config.sslInvalidHostNameAllowed()); optionsBuilder.threadsAllowedToBlockForConnectionMultiplier( config.threadsAllowedToBlockForConnectionMultiplier()); WriteConcern writeConcern = new WriteConcern( config.writeConcernW(), config.writeConcernWtimeout(), config.writeConcernFsync(), config.writeConcernJ()); optionsBuilder.writeConcern(writeConcern); if (!config.requiredReplicaSetName().isEmpty()) optionsBuilder.requiredReplicaSetName(config.requiredReplicaSetName()); List<Tag> tags = new ArrayList<>(); if (config.readPreferenceTags() != null) { for (String tag : config.readPreferenceTags()) { String[] elements = tag.split("="); tags.add(new Tag(elements[0], elements[1])); } } TagSet tagSet = new TagSet(tags); switch (config.readPreferenceType()) { case 1: optionsBuilder.readPreference(ReadPreference.nearest(tagSet)); break; case 2: optionsBuilder.readPreference(ReadPreference.primary()); break; case 3: optionsBuilder.readPreference(ReadPreference.primaryPreferred(tagSet)); break; case 4: optionsBuilder.readPreference(ReadPreference.secondary(tagSet)); break; case 5: optionsBuilder.readPreference(ReadPreference.secondaryPreferred(tagSet)); break; } return optionsBuilder.build(); }