Skip to content

Commit 54731df

Browse files
committed
add mongo client settings configuration
1 parent 2f63b06 commit 54731df

File tree

1 file changed

+184
-0
lines changed

1 file changed

+184
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,184 @@
1+
package org.minbox.framework.api.boot.autoconfigure.mongo;
2+
3+
import com.mongodb.client.MongoClient;
4+
import org.minbox.framework.mongo.client.setting.*;
5+
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
6+
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
7+
import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
8+
import org.springframework.boot.autoconfigure.mongo.MongoClientSettingsBuilderCustomizer;
9+
import org.springframework.boot.context.properties.EnableConfigurationProperties;
10+
import org.springframework.context.annotation.Bean;
11+
import org.springframework.context.annotation.Configuration;
12+
import org.springframework.core.annotation.Order;
13+
14+
import java.util.Optional;
15+
import java.util.concurrent.TimeUnit;
16+
17+
/**
18+
* Mongo client settings configuration
19+
* <p>
20+
* Execute before {@link MongoAutoConfiguration}
21+
*
22+
* @author 恒宇少年
23+
*/
24+
@Configuration
25+
@EnableConfigurationProperties(ApiBootMongoClientSettingsProperties.class)
26+
@ConditionalOnClass(MongoClient.class)
27+
@AutoConfigureBefore(MongoAutoConfiguration.class)
28+
public class ApiBootMongoClientSettingsAutoConfiguration {
29+
private MongoClientSettingsBean clientSettingsBean;
30+
31+
public ApiBootMongoClientSettingsAutoConfiguration(ApiBootMongoClientSettingsProperties properties) {
32+
this.clientSettingsBean = Optional.ofNullable(properties.getSettings()).orElse(new MongoClientSettingsBean());
33+
}
34+
35+
/**
36+
* The {@link SocketSettings} builder customizer support
37+
* <p>
38+
* Extended configuration parameters come from {@link MongoClientSettingsBean#getSocket()}
39+
*
40+
* @return Build mongo client settings customizer instance
41+
*/
42+
@Bean
43+
@Order(0)
44+
public MongoClientSettingsBuilderCustomizer apiBootMongoSocketSettings() {
45+
return clientSettingsBuilder -> {
46+
Optional.ofNullable(clientSettingsBean.getSocket()).ifPresent(socketSettings -> {
47+
clientSettingsBuilder.applyToSocketSettings(
48+
(socket) ->
49+
socket.readTimeout(Long.valueOf(socketSettings.getReadTimeoutMilliSeconds()).intValue(), TimeUnit.MILLISECONDS)
50+
.connectTimeout(Long.valueOf(socketSettings.getConnectTimeoutMilliSeconds()).intValue(), TimeUnit.MILLISECONDS)
51+
.receiveBufferSize(socketSettings.getReceiveBufferSize())
52+
.sendBufferSize(socketSettings.getSendBufferSize())
53+
);
54+
});
55+
56+
};
57+
}
58+
59+
/**
60+
* The heartbeat {@link SocketSettings} builder customizer support
61+
* <p>
62+
* Extended configuration parameters come from {@link MongoClientSettingsBean#getHeartbeatSocket()}
63+
*
64+
* @return Build mongo client settings customizer instance
65+
*/
66+
@Bean
67+
@Order(1)
68+
public MongoClientSettingsBuilderCustomizer apiBootMongoHeartbeatSocketSettings() {
69+
return clientSettingsBuilder -> {
70+
Optional.ofNullable(clientSettingsBean.getHeartbeatSocket()).ifPresent(heartbeatSocketSettings -> {
71+
clientSettingsBuilder.applyToSocketSettings(
72+
(heartBeatSocket) ->
73+
heartBeatSocket.readTimeout(Long.valueOf(heartbeatSocketSettings.getReadTimeoutMilliSeconds()).intValue(), TimeUnit.MILLISECONDS)
74+
.connectTimeout(Long.valueOf(heartbeatSocketSettings.getConnectTimeoutMilliSeconds()).intValue(), TimeUnit.MILLISECONDS)
75+
.receiveBufferSize(heartbeatSocketSettings.getReceiveBufferSize())
76+
.sendBufferSize(heartbeatSocketSettings.getSendBufferSize())
77+
);
78+
});
79+
};
80+
}
81+
82+
/**
83+
* The {@link ClusterSettings} builder customizer support
84+
* <p>
85+
* Extended configuration parameters come from {@link MongoClientSettingsBean#getCluster()}
86+
*
87+
* @return Build mongo client settings customizer instance
88+
*/
89+
@Bean
90+
@Order(2)
91+
public MongoClientSettingsBuilderCustomizer apiBootMongoClusterSettings() {
92+
return clientSettingsBuilder -> {
93+
Optional.ofNullable(clientSettingsBean.getCluster()).ifPresent(clusterSettings -> {
94+
clientSettingsBuilder.applyToClusterSettings(
95+
(cluster) -> {
96+
// mode
97+
Optional.ofNullable(clusterSettings.getMode()).ifPresent(mode -> cluster.mode(mode));
98+
// requiredClusterType
99+
Optional.ofNullable(clusterSettings.getRequiredClusterType())
100+
.ifPresent(requiredClusterType -> cluster.requiredClusterType(requiredClusterType));
101+
// requiredReplicaSetName
102+
Optional.ofNullable(clusterSettings.getRequiredReplicaSetName())
103+
.ifPresent(requiredReplicaSetName -> cluster.requiredReplicaSetName(requiredReplicaSetName));
104+
105+
cluster.localThreshold(clusterSettings.getLocalThresholdMilliSeconds(), TimeUnit.MILLISECONDS)
106+
.serverSelectionTimeout(clusterSettings.getServerSelectionTimeoutMilliSeconds(), TimeUnit.MILLISECONDS);
107+
}
108+
);
109+
});
110+
111+
};
112+
}
113+
114+
/**
115+
* The {@link ServerSettings} builder customizer support
116+
* <p>
117+
* Extended configuration parameters come from {@link MongoClientSettingsBean#getServer()}
118+
*
119+
* @return Build mongo client settings customizer instance
120+
*/
121+
@Bean
122+
@Order(3)
123+
public MongoClientSettingsBuilderCustomizer apiBootMongoServerSettings() {
124+
return clientSettingsBuilder -> {
125+
Optional.ofNullable(clientSettingsBean.getServer()).ifPresent(serverSettings -> {
126+
clientSettingsBuilder.applyToServerSettings(
127+
(server) ->
128+
server.heartbeatFrequency(serverSettings.getHeartbeatFrequencyMilliSeconds(), TimeUnit.MILLISECONDS)
129+
.minHeartbeatFrequency(serverSettings.getMinHeartbeatFrequencyMilliSeconds(), TimeUnit.MILLISECONDS)
130+
);
131+
});
132+
133+
};
134+
}
135+
136+
/**
137+
* The {@link ConnectionPoolSettings} builder customizer support
138+
* <p>
139+
* Extended configuration parameters come from {@link MongoClientSettingsBean#getConnectionPool()}
140+
*
141+
* @return Build mongo client settings customizer instance
142+
*/
143+
@Bean
144+
@Order(4)
145+
public MongoClientSettingsBuilderCustomizer apiBootMongoConnectionPoolSettings() {
146+
return clientSettingsBuilder -> {
147+
Optional.ofNullable(clientSettingsBean.getConnectionPool()).ifPresent(connectionPoolSettings -> {
148+
clientSettingsBuilder.applyToConnectionPoolSettings(
149+
(pool) ->
150+
pool.maxSize(connectionPoolSettings.getMaxSize())
151+
.minSize(connectionPoolSettings.getMinSize())
152+
.maxWaitTime(connectionPoolSettings.getMaxWaitTimeMilliSeconds(), TimeUnit.MILLISECONDS)
153+
.maxConnectionLifeTime(connectionPoolSettings.getMaxConnectionLifeTimeMilliSeconds(), TimeUnit.MILLISECONDS)
154+
.maxConnectionIdleTime(connectionPoolSettings.getMaxConnectionIdleTimeMilliSeconds(), TimeUnit.MILLISECONDS)
155+
.maintenanceFrequency(connectionPoolSettings.getMaintenanceFrequencyMilliSeconds(), TimeUnit.MILLISECONDS)
156+
.maintenanceInitialDelay(connectionPoolSettings.getMaintenanceInitialDelayMilliSeconds(), TimeUnit.MILLISECONDS)
157+
);
158+
});
159+
160+
};
161+
}
162+
163+
/**
164+
* The {@link SslSettings} builder customizer support
165+
* <p>
166+
* Extended configuration parameters come from {@link MongoClientSettingsBean#getSsl()}
167+
*
168+
* @return Build mongo client settings customizer instance
169+
*/
170+
@Bean
171+
@Order(5)
172+
public MongoClientSettingsBuilderCustomizer apiBootMongoSslSettings() {
173+
return clientSettingsBuilder -> {
174+
Optional.ofNullable(clientSettingsBean.getSsl()).ifPresent(sslSettings -> {
175+
clientSettingsBuilder.applyToSslSettings(
176+
(ssl) ->
177+
ssl.enabled(sslSettings.isEnabled())
178+
.invalidHostNameAllowed(sslSettings.isInvalidHostNameAllowed())
179+
);
180+
});
181+
182+
};
183+
}
184+
}

0 commit comments

Comments
 (0)