All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.mongodb.MongoClientOptions Maven / Gradle / Ivy

Go to download

The MongoDB Java Driver uber-artifact, containing mongodb-driver, mongodb-driver-core, and bson

There is a newer version: 3.9.1
Show newest version
/*
 * Copyright (c) 2008-2014 MongoDB, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.mongodb;

import org.bson.util.annotations.Immutable;

import javax.net.SocketFactory;

/**
 * Various settings to control the behavior of a MongoClient.
 * 

* Note: This class is a replacement for {@code MongoOptions}, to be used with {@code MongoClient}. The main difference * in behavior is that the default write concern is {@code WriteConcern.ACKNOWLEDGED}. * * @see MongoClient * @since 2.10.0 */ @Immutable public class MongoClientOptions { /** * A builder for MongoClientOptions so that MongoClientOptions can be immutable, and to support easier * construction through chaining. * * @since 2.10.0 */ public static class Builder { private String description; private int minConnectionsPerHost; private int connectionsPerHost = 100; private int threadsAllowedToBlockForConnectionMultiplier = 5; private int maxWaitTime = 1000 * 60 * 2; private int maxConnectionIdleTime; private int maxConnectionLifeTime; private int connectTimeout = 1000 * 10; private int socketTimeout = 0; private boolean socketKeepAlive = false; private boolean autoConnectRetry = false; private long maxAutoConnectRetryTime = 0; private ReadPreference readPreference = ReadPreference.primary(); private DBDecoderFactory dbDecoderFactory = DefaultDBDecoder.FACTORY; private DBEncoderFactory dbEncoderFactory = DefaultDBEncoder.FACTORY; private WriteConcern writeConcern = WriteConcern.ACKNOWLEDGED; private SocketFactory socketFactory = SocketFactory.getDefault(); private boolean cursorFinalizerEnabled = true; private boolean alwaysUseMBeans = false; private int heartbeatFrequency = Integer.parseInt(System.getProperty("com.mongodb.updaterIntervalMS", "5000")); private int heartbeatConnectRetryFrequency = Integer.parseInt(System.getProperty("com.mongodb.updaterIntervalNoMasterMS", "10")); private int heartbeatConnectTimeout = Integer.parseInt(System.getProperty("com.mongodb.updaterConnectTimeoutMS", "20000")); private int heartbeatSocketTimeout = Integer.parseInt(System.getProperty("com.mongodb.updaterSocketTimeoutMS", "20000")); private int heartbeatThreadCount; private int acceptableLatencyDifference = Integer.parseInt(System.getProperty("com.mongodb.slaveAcceptableLatencyMS", "15")); private String requiredReplicaSetName; /** * Sets the heartbeat frequency. * * @param heartbeatFrequency the heartbeat frequency, in milliseconds * @return {@code this} * @throws IllegalArgumentException if heartbeatFrequency < 1 * @see com.mongodb.MongoClientOptions#getHeartbeatFrequency() * @since 2.12.0 */ public Builder heartbeatFrequency(final int heartbeatFrequency) { if (heartbeatFrequency < 1) { throw new IllegalArgumentException("heartbeatFrequency must be greater than 0"); } this.heartbeatFrequency = heartbeatFrequency; return this; } /** * Sets the heartbeat connect retry frequency. * * @param heartbeatConnectRetryFrequency the heartbeat connect retry frequency, in milliseconds * @return {@code this} * @throws IllegalArgumentException if heartbeatConnectRetryFrequency < 1 * @see com.mongodb.MongoClientOptions#getHeartbeatConnectRetryFrequency() * @since 2.12.0 */ public Builder heartbeatConnectRetryFrequency(final int heartbeatConnectRetryFrequency) { if (heartbeatConnectRetryFrequency < 1) { throw new IllegalArgumentException("heartbeatConnectRetryFrequency must be greater than 0"); } this.heartbeatConnectRetryFrequency = heartbeatConnectRetryFrequency; return this; } /** * Sets the heartbeat connect timeout. * * @param heartbeatConnectTimeout the heartbeat connect timeout, in milliseconds * @return {@code this} * @throws IllegalArgumentException if heartbeatConnectTimeout < 0 * @see com.mongodb.MongoClientOptions#getHeartbeatConnectTimeout() * @since 2.12.0 */ public Builder heartbeatConnectTimeout(final int heartbeatConnectTimeout) { if (heartbeatConnectTimeout < 0) { throw new IllegalArgumentException("heartbeatConnectTimeout must be greater than or equal to 0"); } this.heartbeatConnectTimeout = heartbeatConnectTimeout; return this; } /** * Sets the heartbeat connect socket timeout. * * @param heartbeatSocketTimeout the heartbeat socket timeout, in milliseconds * @return {@code this} * @throws IllegalArgumentException if heartbeatSocketTimeout < 0 * @see com.mongodb.MongoClientOptions#getHeartbeatSocketTimeout() * @since 2.12.0 */ public Builder heartbeatSocketTimeout(final int heartbeatSocketTimeout) { if (heartbeatSocketTimeout < 0) { throw new IllegalArgumentException("heartbeatSocketTimeout must be greater than or equal to 0"); } this.heartbeatSocketTimeout = heartbeatSocketTimeout; return this; } /** * Sets the heartbeat thread count. * * @param heartbeatThreadCount the heartbeat thread count * @return {@code this} * @throws IllegalArgumentException if heartbeatThreadCount < 1 * @see MongoClientOptions#getHeartbeatThreadCount() * @since 2.12.0 */ public Builder heartbeatThreadCount(final int heartbeatThreadCount) { if (heartbeatThreadCount < 1) { throw new IllegalArgumentException("heartbeatThreadCount must be greater than 0"); } this.heartbeatThreadCount = heartbeatThreadCount; return this; } /** * Sets the acceptable latency difference. * * @param acceptableLatencyDifference the acceptable latency different, in milliseconds * @return {@code this} * @throws IllegalArgumentException if acceptableLatencyDifference < 0 * @see com.mongodb.MongoClientOptions#getAcceptableLatencyDifference() * @since 2.12.0 */ public Builder acceptableLatencyDifference(final int acceptableLatencyDifference) { if (acceptableLatencyDifference < 0) { throw new IllegalArgumentException("acceptableLatencyDifference must be greater than or equal to 0"); } this.acceptableLatencyDifference = acceptableLatencyDifference; return this; } /** * Sets the description. * * @param description the description of this MongoClient * @return {@code this} * @see com.mongodb.MongoClientOptions#getDescription() */ public Builder description(final String description) { this.description = description; return this; } /** * Sets the minimum number of connections per host. * * @param minConnectionsPerHost minimum number of connections * @return {@code this} * @throws IllegalArgumentException if {@code minConnectionsPerHost < 0} * @see MongoClientOptions#getMinConnectionsPerHost() * @since 2.12 */ public Builder minConnectionsPerHost(final int minConnectionsPerHost) { if (minConnectionsPerHost < 0) { throw new IllegalArgumentException("Minimum value is 0"); } this.minConnectionsPerHost = minConnectionsPerHost; return this; } /** * Sets the maximum number of connections per host. * * @param connectionsPerHost maximum number of connections * @return {@code this} * @throws IllegalArgumentException if connnectionsPerHost < 1 * @see com.mongodb.MongoClientOptions#getConnectionsPerHost() */ public Builder connectionsPerHost(final int connectionsPerHost) { if (connectionsPerHost < 1) { throw new IllegalArgumentException("Minimum value is 1"); } this.connectionsPerHost = connectionsPerHost; return this; } /** * Sets the multiplier for number of threads allowed to block waiting for a connection. * * @param threadsAllowedToBlockForConnectionMultiplier * the multiplier * @return {@code this} * @throws IllegalArgumentException if threadsAllowedToBlockForConnectionMultiplier < 1 * @see com.mongodb.MongoClientOptions#getThreadsAllowedToBlockForConnectionMultiplier() */ public Builder threadsAllowedToBlockForConnectionMultiplier(final int threadsAllowedToBlockForConnectionMultiplier) { if (threadsAllowedToBlockForConnectionMultiplier < 1) { throw new IllegalArgumentException("Minimum value is 1"); } this.threadsAllowedToBlockForConnectionMultiplier = threadsAllowedToBlockForConnectionMultiplier; return this; } /** * Sets the maximum time that a thread will block waiting for a connection. * * @param maxWaitTime the maximum wait time (in milliseconds) * @return {@code this} * @throws IllegalArgumentException if maxWaitTime < 0 * @see com.mongodb.MongoClientOptions#getMaxWaitTime() */ public Builder maxWaitTime(final int maxWaitTime) { if (maxWaitTime < 0) { throw new IllegalArgumentException("Minimum value is 0"); } this.maxWaitTime = maxWaitTime; return this; } /** * Sets the maximum idle time for a pooled connection. * * @param maxConnectionIdleTime the maximum idle time * @return {@code this} * @throws IllegalArgumentException if {@code maxConnectionIdleTime < 0} * @see com.mongodb.MongoClientOptions#getMaxConnectionIdleTime() * @since 2.12 */ public Builder maxConnectionIdleTime(final int maxConnectionIdleTime) { if (maxConnectionIdleTime < 0) { throw new IllegalArgumentException("Minimum value is 0"); } this.maxConnectionIdleTime = maxConnectionIdleTime; return this; } /** * Sets the maximum life time for a pooled connection. * * @param maxConnectionLifeTime the maximum life time * @return {@code this} * @throws IllegalArgumentException if {@code maxConnectionIdleTime < 0} * @see MongoClientOptions#getMaxConnectionIdleTime() * @since 2.12 */ public Builder maxConnectionLifeTime(final int maxConnectionLifeTime) { if (maxConnectionLifeTime < 0) { throw new IllegalArgumentException("Minimum value is 0"); } this.maxConnectionLifeTime = maxConnectionLifeTime; return this; } /** * Sets the connection timeout. * * @param connectTimeout the connection timeout (in milliseconds) * @return {@code this} * @see com.mongodb.MongoClientOptions#getConnectTimeout() */ public Builder connectTimeout(final int connectTimeout) { if (connectTimeout < 0) { throw new IllegalArgumentException("Minimum value is 0"); } this.connectTimeout = connectTimeout; return this; } /** * Sets the socket timeout. * * @param socketTimeout the socket timeout (in milliseconds) * @return {@code this} * @see com.mongodb.MongoClientOptions#getSocketTimeout() */ public Builder socketTimeout(final int socketTimeout) { if (socketTimeout < 0) { throw new IllegalArgumentException("Minimum value is 0"); } this.socketTimeout = socketTimeout; return this; } /** * Sets whether socket keep alive is enabled. * * @param socketKeepAlive keep alive * @return {@code this} * @see com.mongodb.MongoClientOptions#isSocketKeepAlive() */ public Builder socketKeepAlive(final boolean socketKeepAlive) { this.socketKeepAlive = socketKeepAlive; return this; } /** * Sets whether auto connect retry is enabled. * * @param autoConnectRetry auto connect retry * @return {@code this} * @see MongoClientOptions#isAutoConnectRetry() * @deprecated There is no replacement for this method. Use the connectTimeout property to control connection timeout. */ @Deprecated public Builder autoConnectRetry(final boolean autoConnectRetry) { this.autoConnectRetry = autoConnectRetry; return this; } /** * Sets the maximum auto connect retry time. * * @param maxAutoConnectRetryTime the maximum auto connect retry time * @return {@code this} * @see MongoClientOptions#getMaxAutoConnectRetryTime() * @deprecated There is no replacement for this method. Use the connectTimeout property to control connection timeout. */ @Deprecated public Builder maxAutoConnectRetryTime(final long maxAutoConnectRetryTime) { if (maxAutoConnectRetryTime < 0) { throw new IllegalArgumentException("Minimum value is 0"); } this.maxAutoConnectRetryTime = maxAutoConnectRetryTime; return this; } /** * Sets the read preference. * * @param readPreference read preference * @return {@code this} * @see MongoClientOptions#getReadPreference() */ public Builder readPreference(final ReadPreference readPreference) { if (readPreference == null) { throw new IllegalArgumentException("null is not a legal value"); } this.readPreference = readPreference; return this; } /** * Sets the decoder factory. * * @param dbDecoderFactory the decoder factory * @return {@code this} * @see MongoClientOptions#getDbDecoderFactory() */ public Builder dbDecoderFactory(final DBDecoderFactory dbDecoderFactory) { if (dbDecoderFactory == null) { throw new IllegalArgumentException("null is not a legal value"); } this.dbDecoderFactory = dbDecoderFactory; return this; } /** * Sets the encoder factory. * * @param dbEncoderFactory the encoder factory * @return {@code this} * @see MongoClientOptions#getDbEncoderFactory() */ public Builder dbEncoderFactory(final DBEncoderFactory dbEncoderFactory) { if (dbEncoderFactory == null) { throw new IllegalArgumentException("null is not a legal value"); } this.dbEncoderFactory = dbEncoderFactory; return this; } /** * Sets the write concern. * * @param writeConcern the write concern * @return {@code this} * @see MongoClientOptions#getWriteConcern() */ public Builder writeConcern(final WriteConcern writeConcern) { if (writeConcern == null) { throw new IllegalArgumentException("null is not a legal value"); } this.writeConcern = writeConcern; return this; } /** * Sets the socket factory. * * @param socketFactory the socket factory * @return {@code this} * @see MongoClientOptions#getSocketFactory() */ public Builder socketFactory(final SocketFactory socketFactory) { if (socketFactory == null) { throw new IllegalArgumentException("null is not a legal value"); } this.socketFactory = socketFactory; return this; } /** * Sets whether cursor finalizers are enabled. * * @param cursorFinalizerEnabled whether cursor finalizers are enabled. * @return {@code this} * @see MongoClientOptions#isCursorFinalizerEnabled() */ public Builder cursorFinalizerEnabled(final boolean cursorFinalizerEnabled) { this.cursorFinalizerEnabled = cursorFinalizerEnabled; return this; } /** * Sets whether JMX beans registered by the driver should always be MBeans, regardless of whether the VM is * Java 6 or greater. If false, the driver will use MXBeans if the VM is Java 6 or greater, and use MBeans if * the VM is Java 5. * * @param alwaysUseMBeans true if driver should always use MBeans, regardless of VM version * @return this * @see MongoClientOptions#isAlwaysUseMBeans() */ public Builder alwaysUseMBeans(final boolean alwaysUseMBeans) { this.alwaysUseMBeans = alwaysUseMBeans; return this; } /** * Sets the required replica set name for the cluster. * * @param requiredReplicaSetName the required replica set name for the replica set. * @return this * @see MongoClientOptions#getRequiredReplicaSetName() * @since 2.12 */ public Builder requiredReplicaSetName(final String requiredReplicaSetName) { this.requiredReplicaSetName = requiredReplicaSetName; return this; } /** * Sets defaults to be what they are in {@code MongoOptions}. * * @return {@code this} * @see MongoOptions */ public Builder legacyDefaults() { connectionsPerHost = 10; writeConcern = WriteConcern.NORMAL; return this; } /** * Build an instance of MongoClientOptions. * * @return the options from this builder */ public MongoClientOptions build() { return new MongoClientOptions(this); } } /** * Create a new Builder instance. This is a convenience method, equivalent to {@code new MongoClientOptions.Builder()}. * * @return a new instance of a Builder */ public static Builder builder() { return new Builder(); } /** * Gets the description for this MongoClient, which is used in various places like logging and JMX. *

* Default is null. * * @return the description */ public String getDescription() { return description; } /** * The minimum number of connections per host for this MongoClient instance. Those connections will be kept in a pool when idle, and the * pool will ensure over time that it contains at least this minimum number. *

* Default is 0. * * @return the minimum size of the connection pool per host * @since 2.12 */ public int getMinConnectionsPerHost() { return minConnectionsPerHost; } /** * The maximum number of connections allowed per host for this MongoClient instance. * Those connections will be kept in a pool when idle. * Once the pool is exhausted, any operation requiring a connection will block waiting for an available connection. *

* Default is 100. * * @return the maximum size of the connection pool per host * @see MongoClientOptions#getThreadsAllowedToBlockForConnectionMultiplier() */ public int getConnectionsPerHost() { return connectionsPerHost; } /** * this multiplier, multiplied with the connectionsPerHost setting, gives the maximum number of threads that * may be waiting for a connection to become available from the pool. All further threads will get an exception right * away. For example if connectionsPerHost is 10 and threadsAllowedToBlockForConnectionMultiplier is 5, then up to 50 * threads can wait for a connection. *

* Default is 5. * * @return the multiplier */ public int getThreadsAllowedToBlockForConnectionMultiplier() { return threadsAllowedToBlockForConnectionMultiplier; } /** * The maximum wait time in milliseconds that a thread may wait for a connection to become available. *

* Default is 120,000. A value of 0 means that it will not wait. A negative value means to wait indefinitely. * * @return the maximum wait time. */ public int getMaxWaitTime() { return maxWaitTime; } /** * The maximum idle time of a pooled connection. A zero value indicates no limit to the idle time. A pooled connection that has * exceeded its idle time will be closed and replaced when necessary by a new connection. * * @return the maximum idle time, in milliseconds * @since 2.12 */ public int getMaxConnectionIdleTime() { return maxConnectionIdleTime; } /** * The maximum life time of a pooled connection. A zero value indicates no limit to the life time. A pooled connection that has * exceeded its life time will be closed and replaced when necessary by a new connection. * * @return the maximum life time, in milliseconds * @since 2.12 */ public int getMaxConnectionLifeTime() { return maxConnectionLifeTime; } /** * The connection timeout in milliseconds. A value of 0 means no timeout. * It is used solely when establishing a new connection {@link java.net.Socket#connect(java.net.SocketAddress, int) } *

* Default is 10,000. * * @return the socket connect timeout */ public int getConnectTimeout() { return connectTimeout; } /** * The socket timeout in milliseconds. * It is used for I/O socket read and write operations {@link java.net.Socket#setSoTimeout(int)} *

* Default is 0 and means no timeout. * * @return the socket timeout */ public int getSocketTimeout() { return socketTimeout; } /** * This flag controls the socket keep alive feature that keeps a connection alive through firewalls {@link java.net.Socket#setKeepAlive(boolean)} *

* * Default is false. * * @return whether keep-alive is enabled on each socket */ public boolean isSocketKeepAlive() { return socketKeepAlive; } /** * If true, the driver will keep trying to connect to the server in case that the socket cannot be established within the {code * connectTimeout} period. There is maximum amount of time to keep retrying, which is 15s by default. Note that use of this flag does * not prevent exceptions from being thrown from read/write operations, and they must be handled by the application. The default * value is false. * * @return whether socket connect is retried * @deprecated There is no replacement for this method. Use the connectTimeout property to control connection timeout. */ @Deprecated public boolean isAutoConnectRetry() { return autoConnectRetry; } /** * The maximum amount of time in MS to spend trying to open connection to the same server. The default is 0, * which means to use the default 15s if autoConnectRetry is on. * * @return the maximum socket connect retry time. * @deprecated There is no replacement for this method. Use the connectTimeout property to control connection timeout. */ @Deprecated public long getMaxAutoConnectRetryTime() { return maxAutoConnectRetryTime; } /** * The read preference to use for queries, map-reduce, aggregation, and count. *

* Default is {@code ReadPreference.primary()}. * * @return the read preference * @see com.mongodb.ReadPreference#primary() */ public ReadPreference getReadPreference() { return readPreference; } /** * Override the decoder factory. Default is for the standard Mongo Java driver configuration. * * @return the decoder factory */ public DBDecoderFactory getDbDecoderFactory() { return dbDecoderFactory; } /** * Override the encoder factory. Default is for the standard Mongo Java driver configuration. * * @return the encoder factory */ public DBEncoderFactory getDbEncoderFactory() { return dbEncoderFactory; } /** * The write concern to use. *

* Default is {@code WriteConcern.ACKNOWLEDGED}. * * @return the write concern * @see WriteConcern#ACKNOWLEDGED */ public WriteConcern getWriteConcern() { return writeConcern; } /** * The socket factory for creating sockets to the mongo server. *

* Default is SocketFactory.getDefault() * * @return the socket factory */ public SocketFactory getSocketFactory() { return socketFactory; } /** * Gets whether there is a a finalize method created that cleans up instances of DBCursor that the client * does not close. If you are careful to always call the close method of DBCursor, then this can safely be set to false. *

* Default is true. * * @return whether finalizers are enabled on cursors * @see DBCursor * @see com.mongodb.DBCursor#close() */ public boolean isCursorFinalizerEnabled() { return cursorFinalizerEnabled; } /** * Gets whether JMX beans registered by the driver should always be MBeans, regardless of whether the VM is * Java 6 or greater. If false, the driver will use MXBeans if the VM is Java 6 or greater, and use MBeans if * the VM is Java 5. *

* Default is false. *

*/ public boolean isAlwaysUseMBeans() { return alwaysUseMBeans; } /** * Gets the heartbeat frequency. This is the frequency that a background thread will attempt to connect to each MongoDB server that * the MongoClient is connected to. *

* The default value is 5,000 milliseconds. *

* * @return the heartbeat frequency, in milliseconds * @since 2.12.0 */ public int getHeartbeatFrequency() { return heartbeatFrequency; } /** * Gets the heartbeat connect retry frequency. This is the frequency that a background thread will attempt to connect to each MongoDB * server that the MongoClient is connected to, when that server is currently unreachable. *

* The default value is 10 milliseconds. *

* * @return the heartbeat connect retry frequency, in milliseconds * @since 2.12.0 */ public int getHeartbeatConnectRetryFrequency() { return heartbeatConnectRetryFrequency; } /** * Gets the heartbeat connect timeout. This is the socket connect timeout for sockets used by the background thread that is * monitoring each MongoDB server that the MongoClient is connected to. *

* The default value is 20,000 milliseconds. *

* * @return the heartbeat connect timeout, in milliseconds * @since 2.12.0 */ public int getHeartbeatConnectTimeout() { return heartbeatConnectTimeout; } /** * Gets the heartbeat socket timeout. This is the socket timeout for sockets used by the background thread that is monitoring each * MongoDB server that the MongoClient is connected to. *

* The default value is 20,000 milliseconds. *

* @return the heartbeat socket timeout, in milliseconds * @since 2.12.0 */ public int getHeartbeatSocketTimeout() { return heartbeatSocketTimeout; } /** * Gets the heartbeat thread count. This is the number of threads that will be used to monitor the MongoDB servers that the * MongoClient is connected to. * *

* The default value is the number of servers in the seed list. *

* @return the heartbeat thread count * @since 2.12.0 */ public int getHeartbeatThreadCount() { return heartbeatThreadCount; } /** * Gets the acceptable latency difference. When choosing among multiple MongoDB servers to send a request, * the MongoClient will only send that request to a server whose ping time is less than or equal to the server with the fastest ping * time plus the acceptable latency difference. *

* For example, let's say that the client is choosing a server to send a query when * the read preference is {@code ReadPreference.secondary()}, and that there are three secondaries, server1, server2, and server3, * whose ping times are 10, 15, and 16 milliseconds, respectively. With an acceptable latency difference of 5 milliseconds, * the client will send the query to either server1 or server2 (randomly selecting between the two). *

*

* The default value is 15 milliseconds. *

* * @return the acceptable latency difference, in milliseconds * @since 2.12.0 */ public int getAcceptableLatencyDifference() { return acceptableLatencyDifference; } /** * Gets the required replica set name. With this option set, the MongoClient instance will *

1. Connect in replica set mode, and discover all members of the set based on the given servers *

*

2. Make sure that the set name reported by all members matches the required set name. *

*

3. Refuse to service any requests if any member of the seed list is not part of a replica set with the required name. *

* * @return the required replica set name * @since 2.12 */ public String getRequiredReplicaSetName() { return requiredReplicaSetName; } @Override public boolean equals(final Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } final MongoClientOptions that = (MongoClientOptions) o; if (acceptableLatencyDifference != that.acceptableLatencyDifference) { return false; } if (alwaysUseMBeans != that.alwaysUseMBeans) { return false; } if (autoConnectRetry != that.autoConnectRetry) { return false; } if (connectTimeout != that.connectTimeout) { return false; } if (connectionsPerHost != that.connectionsPerHost) { return false; } if (cursorFinalizerEnabled != that.cursorFinalizerEnabled) { return false; } if (heartbeatConnectRetryFrequency != that.heartbeatConnectRetryFrequency) { return false; } if (heartbeatConnectTimeout != that.heartbeatConnectTimeout) { return false; } if (heartbeatFrequency != that.heartbeatFrequency) { return false; } if (heartbeatSocketTimeout != that.heartbeatSocketTimeout) { return false; } if (heartbeatThreadCount != that.heartbeatThreadCount) { return false; } if (maxAutoConnectRetryTime != that.maxAutoConnectRetryTime) { return false; } if (maxConnectionIdleTime != that.maxConnectionIdleTime) { return false; } if (maxConnectionLifeTime != that.maxConnectionLifeTime) { return false; } if (maxWaitTime != that.maxWaitTime) { return false; } if (minConnectionsPerHost != that.minConnectionsPerHost) { return false; } if (socketKeepAlive != that.socketKeepAlive) { return false; } if (socketTimeout != that.socketTimeout) { return false; } if (threadsAllowedToBlockForConnectionMultiplier != that.threadsAllowedToBlockForConnectionMultiplier) { return false; } if (!dbDecoderFactory.equals(that.dbDecoderFactory)) { return false; } if (!dbEncoderFactory.equals(that.dbEncoderFactory)) { return false; } if (description != null ? !description.equals(that.description) : that.description != null) { return false; } if (!readPreference.equals(that.readPreference)) { return false; } if (!socketFactory.getClass().equals(that.socketFactory.getClass())) { return false; } if (!writeConcern.equals(that.writeConcern)) { return false; } if (requiredReplicaSetName != null ? !requiredReplicaSetName.equals(that.requiredReplicaSetName) : that.requiredReplicaSetName != null) { return false; } return true; } @Override public int hashCode() { int result = description != null ? description.hashCode() : 0; result = 31 * result + minConnectionsPerHost; result = 31 * result + connectionsPerHost; result = 31 * result + threadsAllowedToBlockForConnectionMultiplier; result = 31 * result + maxWaitTime; result = 31 * result + maxConnectionIdleTime; result = 31 * result + maxConnectionLifeTime; result = 31 * result + connectTimeout; result = 31 * result + socketTimeout; result = 31 * result + (socketKeepAlive ? 1 : 0); result = 31 * result + (autoConnectRetry ? 1 : 0); result = 31 * result + (int) (maxAutoConnectRetryTime ^ (maxAutoConnectRetryTime >>> 32)); result = 31 * result + readPreference.hashCode(); result = 31 * result + dbDecoderFactory.hashCode(); result = 31 * result + dbEncoderFactory.hashCode(); result = 31 * result + writeConcern.hashCode(); result = 31 * result + (socketFactory != null ? socketFactory.getClass().hashCode() : 0); result = 31 * result + (cursorFinalizerEnabled ? 1 : 0); result = 31 * result + (alwaysUseMBeans ? 1 : 0); result = 31 * result + heartbeatFrequency; result = 31 * result + heartbeatConnectRetryFrequency; result = 31 * result + heartbeatConnectTimeout; result = 31 * result + heartbeatSocketTimeout; result = 31 * result + heartbeatThreadCount; result = 31 * result + acceptableLatencyDifference; result = 31 * result + (requiredReplicaSetName != null ? requiredReplicaSetName.hashCode() : 0); return result; } @Override public String toString() { return "MongoClientOptions{" + "description='" + description + '\'' + ", connectionsPerHost=" + connectionsPerHost + ", threadsAllowedToBlockForConnectionMultiplier=" + threadsAllowedToBlockForConnectionMultiplier + ", maxWaitTime=" + maxWaitTime + ", connectTimeout=" + connectTimeout + ", socketTimeout=" + socketTimeout + ", socketKeepAlive=" + socketKeepAlive + ", autoConnectRetry=" + autoConnectRetry + ", maxAutoConnectRetryTime=" + maxAutoConnectRetryTime + ", readPreference=" + readPreference + ", dbDecoderFactory=" + dbDecoderFactory + ", dbEncoderFactory=" + dbEncoderFactory + ", writeConcern=" + writeConcern + ", socketFactory=" + socketFactory + ", cursorFinalizerEnabled=" + cursorFinalizerEnabled + ", alwaysUseMBeans=" + alwaysUseMBeans + ", heartbeatFrequency=" + heartbeatFrequency + ", heartbeatConnectRetryFrequency=" + heartbeatConnectRetryFrequency + ", heartbeatConnectTimeout=" + heartbeatConnectTimeout + ", heartbeatSocketTimeout=" + heartbeatSocketTimeout + ", heartbeatThreadCount=" + heartbeatThreadCount + ", acceptableLatencyDifference=" + acceptableLatencyDifference + ", requiredReplicaSetName=" + requiredReplicaSetName + '}'; } private MongoClientOptions(final Builder builder) { description = builder.description; minConnectionsPerHost = builder.minConnectionsPerHost; connectionsPerHost = builder.connectionsPerHost; threadsAllowedToBlockForConnectionMultiplier = builder.threadsAllowedToBlockForConnectionMultiplier; maxWaitTime = builder.maxWaitTime; maxConnectionIdleTime = builder.maxConnectionIdleTime; maxConnectionLifeTime = builder.maxConnectionLifeTime; connectTimeout = builder.connectTimeout; socketTimeout = builder.socketTimeout; autoConnectRetry = builder.autoConnectRetry; socketKeepAlive = builder.socketKeepAlive; maxAutoConnectRetryTime = builder.maxAutoConnectRetryTime; readPreference = builder.readPreference; dbDecoderFactory = builder.dbDecoderFactory; dbEncoderFactory = builder.dbEncoderFactory; writeConcern = builder.writeConcern; socketFactory = builder.socketFactory; cursorFinalizerEnabled = builder.cursorFinalizerEnabled; alwaysUseMBeans = builder.alwaysUseMBeans; heartbeatFrequency = builder.heartbeatFrequency; heartbeatConnectRetryFrequency = builder.heartbeatConnectRetryFrequency; heartbeatConnectTimeout = builder.heartbeatConnectTimeout; heartbeatSocketTimeout = builder.heartbeatSocketTimeout; heartbeatThreadCount = builder.heartbeatThreadCount; acceptableLatencyDifference = builder.acceptableLatencyDifference; requiredReplicaSetName = builder.requiredReplicaSetName; } private final String description; private final int minConnectionsPerHost; private final int connectionsPerHost; private final int threadsAllowedToBlockForConnectionMultiplier; private final int maxWaitTime; private final int maxConnectionIdleTime; private final int maxConnectionLifeTime; private final int connectTimeout; private final int socketTimeout; private final boolean socketKeepAlive; private final boolean autoConnectRetry; private final long maxAutoConnectRetryTime; private final ReadPreference readPreference; private final DBDecoderFactory dbDecoderFactory; private final DBEncoderFactory dbEncoderFactory; private final WriteConcern writeConcern; private final SocketFactory socketFactory; private final boolean cursorFinalizerEnabled; private final boolean alwaysUseMBeans; private final int heartbeatFrequency; private final int heartbeatConnectRetryFrequency; private final int heartbeatConnectTimeout; private final int heartbeatSocketTimeout; private final int heartbeatThreadCount; private final int acceptableLatencyDifference; private final String requiredReplicaSetName; }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy