Polish 'Allow multiple hosts to be set in MongoProperties'
See gh-32125
This commit is contained in:
parent
e0d40009f3
commit
6db88e12c8
|
@ -61,6 +61,13 @@ public class MongoProperties {
|
|||
*/
|
||||
private Integer port = null;
|
||||
|
||||
/**
|
||||
* Additional server hosts. Cannot be set with URI or if 'host' is not specified.
|
||||
* Additional hosts will use the default mongo port of 27017, if you want to use a
|
||||
* different port you can use the "host:port" syntax.
|
||||
*/
|
||||
private List<String> additionalHosts;
|
||||
|
||||
/**
|
||||
* Mongo database URI. Overrides host, port, username, password, and database.
|
||||
*/
|
||||
|
@ -108,11 +115,6 @@ public class MongoProperties {
|
|||
*/
|
||||
private Boolean autoIndexCreation;
|
||||
|
||||
/**
|
||||
* List of additional hosts to connect with different hosts in a replica set.
|
||||
*/
|
||||
private List<String> additionalHosts;
|
||||
|
||||
public String getHost() {
|
||||
return this.host;
|
||||
}
|
||||
|
|
|
@ -25,6 +25,7 @@ import com.mongodb.MongoCredential;
|
|||
import com.mongodb.ServerAddress;
|
||||
|
||||
import org.springframework.core.Ordered;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
/**
|
||||
* A {@link MongoClientSettingsBuilderCustomizer} that applies properties from a
|
||||
|
@ -64,22 +65,17 @@ public class MongoPropertiesClientSettingsBuilderCustomizer implements MongoClie
|
|||
if (this.properties.getHost() != null || this.properties.getPort() != null) {
|
||||
String host = getOrDefault(this.properties.getHost(), "localhost");
|
||||
int port = getOrDefault(this.properties.getPort(), MongoProperties.DEFAULT_PORT);
|
||||
ServerAddress serverAddress = new ServerAddress(host, port);
|
||||
List<ServerAddress> serverAddressList = new ArrayList<>(List.of(serverAddress));
|
||||
applyAdditionalHosts(serverAddressList);
|
||||
settings.applyToClusterSettings((cluster) -> cluster.hosts(serverAddressList));
|
||||
List<ServerAddress> serverAddresses = new ArrayList<>();
|
||||
serverAddresses.add(new ServerAddress(host, port));
|
||||
if (!CollectionUtils.isEmpty(this.properties.getAdditionalHosts())) {
|
||||
this.properties.getAdditionalHosts().stream().map(ServerAddress::new).forEach(serverAddresses::add);
|
||||
}
|
||||
settings.applyToClusterSettings((cluster) -> cluster.hosts(serverAddresses));
|
||||
return;
|
||||
}
|
||||
settings.applyConnectionString(new ConnectionString(MongoProperties.DEFAULT_URI));
|
||||
}
|
||||
|
||||
private void applyAdditionalHosts(List<ServerAddress> serverAddressList) {
|
||||
if (this.properties.getAdditionalHosts() != null && !this.properties.getAdditionalHosts().isEmpty()) {
|
||||
this.properties.getAdditionalHosts()
|
||||
.forEach((additionalHost) -> serverAddressList.add(new ServerAddress(additionalHost)));
|
||||
}
|
||||
}
|
||||
|
||||
private void applyCredentials(MongoClientSettings.Builder builder) {
|
||||
if (this.properties.getUri() == null && this.properties.getUsername() != null
|
||||
&& this.properties.getPassword() != null) {
|
||||
|
|
|
@ -80,7 +80,7 @@ You can set the configprop:spring.data.mongodb.uri[] property to change the URL
|
|||
spring:
|
||||
data:
|
||||
mongodb:
|
||||
uri: "mongodb://user:secret@mongo1.example.com:12345,mongo2.example.com:23456/test"
|
||||
uri: "mongodb://user:secret@mongoserver1.example.com:27017,mongoserver2.example.com:23456/test"
|
||||
----
|
||||
|
||||
Alternatively, you can specify connection details using discrete properties.
|
||||
|
@ -91,16 +91,24 @@ For example, you might declare the following settings in your `application.prope
|
|||
spring:
|
||||
data:
|
||||
mongodb:
|
||||
host: "mongoserver.example.com"
|
||||
host: "mongoserver1.example.com"
|
||||
port: 27017
|
||||
additional-hosts:
|
||||
- "mongoserver2.example.com:23456"
|
||||
database: "test"
|
||||
username: "user"
|
||||
password: "secret"
|
||||
----
|
||||
|
||||
TIP: If `spring.data.mongodb.port` is not specified, the default of `27017` is used.
|
||||
[TIP]
|
||||
====
|
||||
If `spring.data.mongodb.port` is not specified, the default of `27017` is used.
|
||||
You could delete this line from the example shown earlier.
|
||||
|
||||
You can also specify the port as part of the host address by using the `host:port` syntax.
|
||||
This format should be used if you need to change the port of an `additional-hosts` entry.
|
||||
====
|
||||
|
||||
TIP: If you do not use Spring Data MongoDB, you can inject a `MongoClient` bean instead of using `MongoDatabaseFactory`.
|
||||
If you want to take complete control of establishing the MongoDB connection, you can also declare your own `MongoDatabaseFactory` or `MongoClient` bean.
|
||||
|
||||
|
|
Loading…
Reference in New Issue