Browse Source

Remove JMX support.

Closes #4940
pull/4976/head
Mark Paluch 8 months ago
parent
commit
0c5a908cf4
No known key found for this signature in database
GPG Key ID: 55BC6374BAA9D973
  1. 78
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/MongoJmxParser.java
  2. 1
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/MongoNamespaceHandler.java
  3. 66
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/monitor/AbstractMonitor.java
  4. 74
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/monitor/AssertMetrics.java
  5. 82
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/monitor/BackgroundFlushingMetrics.java
  6. 81
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/monitor/BtreeIndexCounters.java
  7. 60
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/monitor/ConnectionMetrics.java
  8. 85
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/monitor/GlobalLockMetrics.java
  9. 75
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/monitor/MemoryMetrics.java
  10. 78
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/monitor/OperationCounters.java
  11. 83
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/monitor/ServerInfo.java
  12. 7
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/monitor/package-info.java
  13. 6
      spring-data-mongodb/src/main/resources/META-INF/spring.schemas
  14. 935
      spring-data-mongodb/src/main/resources/org/springframework/data/mongodb/config/spring-mongo-5.0.xsd
  15. 38
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/JmxServer.java
  16. 68
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/monitor/MongoMonitorIntegrationTests.java
  17. 27
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/monitor/Resumeable.java
  18. 23
      spring-data-mongodb/src/test/resources/server-jmx.xml

78
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/MongoJmxParser.java

@ -1,78 +0,0 @@ @@ -1,78 +0,0 @@
/*
* Copyright 2011-2025 the original author or authors.
*
* 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
*
* https://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 org.springframework.data.mongodb.config;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.parsing.BeanComponentDefinition;
import org.springframework.beans.factory.parsing.CompositeComponentDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.xml.BeanDefinitionParser;
import org.springframework.beans.factory.xml.ParserContext;
import org.springframework.data.mongodb.core.MongoAdmin;
import org.springframework.data.mongodb.monitor.*;
import org.springframework.util.StringUtils;
import org.w3c.dom.Element;
/**
* @author Mark Pollack
* @author Thomas Risberg
* @author John Brisbin
* @author Oliver Gierke
* @author Christoph Strobl
* @deprecated since 4.5
*/
@Deprecated(since = "4.5", forRemoval = true)
public class MongoJmxParser implements BeanDefinitionParser {
public BeanDefinition parse(Element element, ParserContext parserContext) {
String name = element.getAttribute("mongo-ref");
if (!StringUtils.hasText(name)) {
name = BeanNames.MONGO_BEAN_NAME;
}
registerJmxComponents(name, element, parserContext);
return null;
}
protected void registerJmxComponents(String mongoRefName, Element element, ParserContext parserContext) {
Object eleSource = parserContext.extractSource(element);
CompositeComponentDefinition compositeDef = new CompositeComponentDefinition(element.getTagName(), eleSource);
createBeanDefEntry(AssertMetrics.class, compositeDef, mongoRefName, eleSource, parserContext);
createBeanDefEntry(BackgroundFlushingMetrics.class, compositeDef, mongoRefName, eleSource, parserContext);
createBeanDefEntry(BtreeIndexCounters.class, compositeDef, mongoRefName, eleSource, parserContext);
createBeanDefEntry(ConnectionMetrics.class, compositeDef, mongoRefName, eleSource, parserContext);
createBeanDefEntry(GlobalLockMetrics.class, compositeDef, mongoRefName, eleSource, parserContext);
createBeanDefEntry(MemoryMetrics.class, compositeDef, mongoRefName, eleSource, parserContext);
createBeanDefEntry(OperationCounters.class, compositeDef, mongoRefName, eleSource, parserContext);
createBeanDefEntry(ServerInfo.class, compositeDef, mongoRefName, eleSource, parserContext);
createBeanDefEntry(MongoAdmin.class, compositeDef, mongoRefName, eleSource, parserContext);
parserContext.registerComponent(compositeDef);
}
protected void createBeanDefEntry(Class<?> clazz, CompositeComponentDefinition compositeDef, String mongoRefName,
Object eleSource, ParserContext parserContext) {
BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(clazz);
builder.getRawBeanDefinition().setSource(eleSource);
builder.addConstructorArgReference(mongoRefName);
BeanDefinition assertDef = builder.getBeanDefinition();
String assertName = parserContext.getReaderContext().registerWithGeneratedName(assertDef);
compositeDef.addNestedComponent(new BeanComponentDefinition(assertDef, assertName));
}
}

1
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/MongoNamespaceHandler.java

@ -31,7 +31,6 @@ public class MongoNamespaceHandler extends NamespaceHandlerSupport { @@ -31,7 +31,6 @@ public class MongoNamespaceHandler extends NamespaceHandlerSupport {
registerBeanDefinitionParser("mapping-converter", new MappingMongoConverterParser());
registerBeanDefinitionParser("mongo-client", new MongoClientParser());
registerBeanDefinitionParser("db-factory", new MongoDbFactoryParser());
registerBeanDefinitionParser("jmx", new MongoJmxParser());
registerBeanDefinitionParser("auditing", new MongoAuditingBeanDefinitionParser());
registerBeanDefinitionParser("template", new MongoTemplateParser());
registerBeanDefinitionParser("gridFsTemplate", new GridFsTemplateParser());

66
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/monitor/AbstractMonitor.java

@ -1,66 +0,0 @@ @@ -1,66 +0,0 @@
/*
* Copyright 2002-2025 the original author or authors.
*
* 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
*
* https://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 org.springframework.data.mongodb.monitor;
import java.util.List;
import java.util.stream.Collectors;
import org.bson.Document;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoDatabase;
import com.mongodb.connection.ServerDescription;
/**
* Base class to encapsulate common configuration settings when connecting to a database
*
* @author Mark Pollack
* @author Oliver Gierke
* @author Christoph Strobl
* @deprecated since 4.5
*/
@Deprecated(since = "4.5", forRemoval = true)
public abstract class AbstractMonitor {
private final MongoClient mongoClient;
/**
* @param mongoClient must not be {@literal null}.
* @since 2.2
*/
protected AbstractMonitor(MongoClient mongoClient) {
this.mongoClient = mongoClient;
}
public Document getServerStatus() {
return getDb("admin").runCommand(new Document("serverStatus", 1).append("rangeDeleter", 1).append("repl", 1));
}
public MongoDatabase getDb(String databaseName) {
return mongoClient.getDatabase(databaseName);
}
protected MongoClient getMongoClient() {
return mongoClient;
}
protected List<ServerAddress> hosts() {
return mongoClient.getClusterDescription().getServerDescriptions().stream().map(ServerDescription::getAddress)
.collect(Collectors.toList());
}
}

74
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/monitor/AssertMetrics.java

@ -1,74 +0,0 @@ @@ -1,74 +0,0 @@
/*
* Copyright 2002-2025 the original author or authors.
*
* 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
*
* https://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 org.springframework.data.mongodb.monitor;
import org.bson.Document;
import org.springframework.jmx.export.annotation.ManagedMetric;
import org.springframework.jmx.export.annotation.ManagedResource;
import org.springframework.jmx.support.MetricType;
import com.mongodb.client.MongoClient;
/**
* JMX Metrics for assertions
*
* @author Mark Pollack
* @deprecated since 4.5
*/
@Deprecated(since = "4.5", forRemoval = true)
@ManagedResource(description = "Assertion Metrics")
public class AssertMetrics extends AbstractMonitor {
/**
* @param mongoClient must not be {@literal null}.
* @since 2.2
*/
public AssertMetrics(MongoClient mongoClient) {
super(mongoClient);
}
@ManagedMetric(metricType = MetricType.COUNTER, displayName = "Regular")
public int getRegular() {
return getBtree("regular");
}
@ManagedMetric(metricType = MetricType.COUNTER, displayName = "Warning")
public int getWarning() {
return getBtree("warning");
}
@ManagedMetric(metricType = MetricType.COUNTER, displayName = "Msg")
public int getMsg() {
return getBtree("msg");
}
@ManagedMetric(metricType = MetricType.COUNTER, displayName = "User")
public int getUser() {
return getBtree("user");
}
@ManagedMetric(metricType = MetricType.GAUGE, displayName = "Rollovers")
public int getRollovers() {
return getBtree("rollovers");
}
private int getBtree(String key) {
Document asserts = (Document) getServerStatus().get("asserts");
// Class c = btree.get(key).getClass();
return (Integer) asserts.get(key);
}
}

82
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/monitor/BackgroundFlushingMetrics.java

@ -1,82 +0,0 @@ @@ -1,82 +0,0 @@
/*
* Copyright 2002-2025 the original author or authors.
*
* 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
*
* https://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 org.springframework.data.mongodb.monitor;
import java.util.Date;
import org.bson.Document;
import org.springframework.jmx.export.annotation.ManagedMetric;
import org.springframework.jmx.export.annotation.ManagedResource;
import org.springframework.jmx.support.MetricType;
import com.mongodb.client.MongoClient;
/**
* JMX Metrics for Background Flushing
*
* @author Mark Pollack
* @deprecated since 4.5
*/
@Deprecated(since = "4.5", forRemoval = true)
@ManagedResource(description = "Background Flushing Metrics")
public class BackgroundFlushingMetrics extends AbstractMonitor {
/**
* @param mongoClient must not be {@literal null}.
* @since 2.2
*/
public BackgroundFlushingMetrics(MongoClient mongoClient) {
super(mongoClient);
}
@ManagedMetric(metricType = MetricType.COUNTER, displayName = "Flushes")
public int getFlushes() {
return getFlushingData("flushes", java.lang.Integer.class);
}
@ManagedMetric(metricType = MetricType.COUNTER, displayName = "Total ms", unit = "ms")
public int getTotalMs() {
return getFlushingData("total_ms", java.lang.Integer.class);
}
@ManagedMetric(metricType = MetricType.GAUGE, displayName = "Average ms", unit = "ms")
public double getAverageMs() {
return getFlushingData("average_ms", java.lang.Double.class);
}
@ManagedMetric(metricType = MetricType.GAUGE, displayName = "Last Ms", unit = "ms")
public int getLastMs() {
return getFlushingData("last_ms", java.lang.Integer.class);
}
@ManagedMetric(metricType = MetricType.GAUGE, displayName = "Last finished")
public Date getLastFinished() {
return getLast();
}
@SuppressWarnings("unchecked")
private <T> T getFlushingData(String key, Class<T> targetClass) {
Document mem = (Document) getServerStatus().get("backgroundFlushing");
return (T) mem.get(key);
}
private Date getLast() {
Document bgFlush = (Document) getServerStatus().get("backgroundFlushing");
Date lastFinished = (Date) bgFlush.get("last_finished");
return lastFinished;
}
}

81
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/monitor/BtreeIndexCounters.java

@ -1,81 +0,0 @@ @@ -1,81 +0,0 @@
/*
* Copyright 2002-2025 the original author or authors.
*
* 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
*
* https://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 org.springframework.data.mongodb.monitor;
import org.bson.Document;
import org.springframework.jmx.export.annotation.ManagedMetric;
import org.springframework.jmx.export.annotation.ManagedResource;
import org.springframework.jmx.support.MetricType;
import com.mongodb.client.MongoClient;
/**
* JMX Metrics for B-tree index counters
*
* @author Mark Pollack
* @deprecated since 4.5
*/
@Deprecated(since = "4.5", forRemoval = true)
@ManagedResource(description = "Btree Metrics")
public class BtreeIndexCounters extends AbstractMonitor {
/**
* @param mongoClient must not be {@literal null}.
* @since 2.2
*/
public BtreeIndexCounters(MongoClient mongoClient) {
super(mongoClient);
}
@ManagedMetric(metricType = MetricType.GAUGE, displayName = "Accesses")
public int getAccesses() {
return getBtree("accesses");
}
@ManagedMetric(metricType = MetricType.GAUGE, displayName = "Hits")
public int getHits() {
return getBtree("hits");
}
@ManagedMetric(metricType = MetricType.GAUGE, displayName = "Misses")
public int getMisses() {
return getBtree("misses");
}
@ManagedMetric(metricType = MetricType.GAUGE, displayName = "Resets")
public int getResets() {
return getBtree("resets");
}
@ManagedMetric(metricType = MetricType.GAUGE, displayName = "Miss Ratio")
public int getMissRatio() {
return getBtree("missRatio");
}
private int getBtree(String key) {
Document indexCounters = (Document) getServerStatus().get("indexCounters");
if (indexCounters.get("note") != null) {
String message = (String) indexCounters.get("note");
if (message.contains("not supported")) {
return -1;
}
}
Document btree = (Document) indexCounters.get("btree");
// Class c = btree.get(key).getClass();
return (Integer) btree.get(key);
}
}

60
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/monitor/ConnectionMetrics.java

@ -1,60 +0,0 @@ @@ -1,60 +0,0 @@
/*
* Copyright 2002-2025 the original author or authors.
*
* 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
*
* https://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 org.springframework.data.mongodb.monitor;
import org.bson.Document;
import org.springframework.jmx.export.annotation.ManagedMetric;
import org.springframework.jmx.export.annotation.ManagedResource;
import org.springframework.jmx.support.MetricType;
import com.mongodb.client.MongoClient;
/**
* JMX Metrics for Connections
*
* @author Mark Pollack
* @deprecated since 4.5
*/
@Deprecated(since = "4.5", forRemoval = true)
@ManagedResource(description = "Connection metrics")
public class ConnectionMetrics extends AbstractMonitor {
/**
* @param mongoClient must not be {@literal null}.
* @since 2.2
*/
public ConnectionMetrics(MongoClient mongoClient) {
super(mongoClient);
}
@ManagedMetric(metricType = MetricType.GAUGE, displayName = "Current Connections")
public int getCurrent() {
return getConnectionData("current", java.lang.Integer.class);
}
@ManagedMetric(metricType = MetricType.GAUGE, displayName = "Available Connections")
public int getAvailable() {
return getConnectionData("available", java.lang.Integer.class);
}
@SuppressWarnings("unchecked")
private <T> T getConnectionData(String key, Class<T> targetClass) {
Document mem = (Document) getServerStatus().get("connections");
// Class c = mem.get(key).getClass();
return (T) mem.get(key);
}
}

85
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/monitor/GlobalLockMetrics.java

@ -1,85 +0,0 @@ @@ -1,85 +0,0 @@
/*
* Copyright 2002-2025 the original author or authors.
*
* 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
*
* https://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 org.springframework.data.mongodb.monitor;
import org.bson.Document;
import org.springframework.jmx.export.annotation.ManagedMetric;
import org.springframework.jmx.export.annotation.ManagedResource;
import org.springframework.jmx.support.MetricType;
import com.mongodb.DBObject;
import com.mongodb.client.MongoClient;
/**
* JMX Metrics for Global Locks
*
* @author Mark Pollack
* @deprecated since 4.5
*/
@Deprecated(since = "4.5", forRemoval = true)
@ManagedResource(description = "Global Lock Metrics")
public class GlobalLockMetrics extends AbstractMonitor {
/**
* @param mongoClient must not be {@literal null}.
* @since 2.2
*/
public GlobalLockMetrics(MongoClient mongoClient) {
super(mongoClient);
}
@ManagedMetric(metricType = MetricType.COUNTER, displayName = "Total time")
public double getTotalTime() {
return getGlobalLockData("totalTime", java.lang.Double.class);
}
@ManagedMetric(metricType = MetricType.COUNTER, displayName = "Lock time", unit = "s")
public double getLockTime() {
return getGlobalLockData("lockTime", java.lang.Double.class);
}
@ManagedMetric(metricType = MetricType.GAUGE, displayName = "Lock time")
public double getLockTimeRatio() {
return getGlobalLockData("ratio", java.lang.Double.class);
}
@ManagedMetric(metricType = MetricType.GAUGE, displayName = "Current Queue")
public int getCurrentQueueTotal() {
return getCurrentQueue("total");
}
@ManagedMetric(metricType = MetricType.GAUGE, displayName = "Reader Queue")
public int getCurrentQueueReaders() {
return getCurrentQueue("readers");
}
@ManagedMetric(metricType = MetricType.GAUGE, displayName = "Writer Queue")
public int getCurrentQueueWriters() {
return getCurrentQueue("writers");
}
@SuppressWarnings("unchecked")
private <T> T getGlobalLockData(String key, Class<T> targetClass) {
DBObject globalLock = (DBObject) getServerStatus().get("globalLock");
return (T) globalLock.get(key);
}
private int getCurrentQueue(String key) {
Document globalLock = (Document) getServerStatus().get("globalLock");
Document currentQueue = (Document) globalLock.get("currentQueue");
return (Integer) currentQueue.get(key);
}
}

75
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/monitor/MemoryMetrics.java

@ -1,75 +0,0 @@ @@ -1,75 +0,0 @@
/*
* Copyright 2002-2025 the original author or authors.
*
* 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
*
* https://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 org.springframework.data.mongodb.monitor;
import org.bson.Document;
import org.springframework.jmx.export.annotation.ManagedMetric;
import org.springframework.jmx.export.annotation.ManagedResource;
import org.springframework.jmx.support.MetricType;
import com.mongodb.client.MongoClient;
/**
* JMX Metrics for Memory
*
* @author Mark Pollack
* @deprecated since 4.5
*/
@Deprecated(since = "4.5", forRemoval = true)
@ManagedResource(description = "Memory Metrics")
public class MemoryMetrics extends AbstractMonitor {
/**
* @param mongoClient
* @since 2.2
*/
public MemoryMetrics(MongoClient mongoClient) {
super(mongoClient);
}
@ManagedMetric(metricType = MetricType.COUNTER, displayName = "Memory address size")
public int getBits() {
return getMemData("bits", java.lang.Integer.class);
}
@ManagedMetric(metricType = MetricType.GAUGE, displayName = "Resident in Physical Memory", unit = "MB")
public int getResidentSpace() {
return getMemData("resident", java.lang.Integer.class);
}
@ManagedMetric(metricType = MetricType.GAUGE, displayName = "Virtual Address Space", unit = "MB")
public int getVirtualAddressSpace() {
return getMemData("virtual", java.lang.Integer.class);
}
@ManagedMetric(metricType = MetricType.GAUGE, displayName = "Is memory info supported on this platform")
public boolean getMemoryInfoSupported() {
return getMemData("supported", java.lang.Boolean.class);
}
@ManagedMetric(metricType = MetricType.GAUGE, displayName = "Memory Mapped Space", unit = "MB")
public int getMemoryMappedSpace() {
return getMemData("mapped", java.lang.Integer.class);
}
@SuppressWarnings("unchecked")
private <T> T getMemData(String key, Class<T> targetClass) {
Document mem = (Document) getServerStatus().get("mem");
// Class c = mem.get(key).getClass();
return (T) mem.get(key);
}
}

78
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/monitor/OperationCounters.java

@ -1,78 +0,0 @@ @@ -1,78 +0,0 @@
/*
* Copyright 2002-2025 the original author or authors.
*
* 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
*
* https://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 org.springframework.data.mongodb.monitor;
import org.bson.Document;
import org.springframework.jmx.export.annotation.ManagedMetric;
import org.springframework.jmx.export.annotation.ManagedResource;
import org.springframework.jmx.support.MetricType;
import org.springframework.util.NumberUtils;
import com.mongodb.client.MongoClient;
/**
* JMX Metrics for Operation counters
*
* @author Mark Pollack
* @deprecated since 4.5
*/
@Deprecated(since = "4.5", forRemoval = true)
@ManagedResource(description = "Operation Counters")
public class OperationCounters extends AbstractMonitor {
/**
* @param mongoClient
* @since 2.2
*/
public OperationCounters(MongoClient mongoClient) {
super(mongoClient);
}
@ManagedMetric(metricType = MetricType.COUNTER, displayName = "Insert operation count")
public int getInsertCount() {
return getOpCounter("insert");
}
@ManagedMetric(metricType = MetricType.COUNTER, displayName = "Query operation count")
public int getQueryCount() {
return getOpCounter("query");
}
@ManagedMetric(metricType = MetricType.COUNTER, displayName = "Update operation count")
public int getUpdateCount() {
return getOpCounter("update");
}
@ManagedMetric(metricType = MetricType.COUNTER, displayName = "Delete operation count")
public int getDeleteCount() {
return getOpCounter("delete");
}
@ManagedMetric(metricType = MetricType.COUNTER, displayName = "GetMore operation count")
public int getGetMoreCount() {
return getOpCounter("getmore");
}
@ManagedMetric(metricType = MetricType.COUNTER, displayName = "Command operation count")
public int getCommandCount() {
return getOpCounter("command");
}
private int getOpCounter(String key) {
Document opCounters = (Document) getServerStatus().get("opcounters");
return NumberUtils.convertNumberToTargetClass((Number) opCounters.get(key), Integer.class);
}
}

83
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/monitor/ServerInfo.java

@ -1,83 +0,0 @@ @@ -1,83 +0,0 @@
/*
* Copyright 2012-2025 the original author or authors.
*
* 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
*
* https://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 org.springframework.data.mongodb.monitor;
import java.net.UnknownHostException;
import org.springframework.jmx.export.annotation.ManagedMetric;
import org.springframework.jmx.export.annotation.ManagedOperation;
import org.springframework.jmx.export.annotation.ManagedResource;
import org.springframework.jmx.support.MetricType;
import org.springframework.util.StringUtils;
import com.mongodb.client.MongoClient;
/**
* Expose basic server information via JMX
*
* @author Mark Pollack
* @author Thomas Darimont
* @author Christoph Strobl
* @deprecated since 4.5
*/
@Deprecated(since = "4.5", forRemoval = true)
@ManagedResource(description = "Server Information")
public class ServerInfo extends AbstractMonitor {
/**
* @param mongoClient
* @since 2.2
*/
protected ServerInfo(MongoClient mongoClient) {
super(mongoClient);
}
/**
* Returns the hostname of the used server reported by MongoDB.
*
* @return the reported hostname can also be an IP address.
* @throws UnknownHostException
*/
@ManagedOperation(description = "Server host name")
public String getHostName() throws UnknownHostException {
/*
* UnknownHostException is not necessary anymore, but clients could have
* called this method in a try..catch(UnknownHostException) already
*/
return StringUtils.collectionToDelimitedString(hosts(), ",");
}
@ManagedMetric(displayName = "Uptime Estimate")
public double getUptimeEstimate() {
return (Double) getServerStatus().get("uptimeEstimate");
}
@ManagedOperation(description = "MongoDB Server Version")
public String getVersion() {
return (String) getServerStatus().get("version");
}
@ManagedOperation(description = "Local Time")
public String getLocalTime() {
return (String) getServerStatus().get("localTime");
}
@ManagedMetric(metricType = MetricType.COUNTER, displayName = "Server uptime in seconds", unit = "seconds")
public double getUptime() {
return (Double) getServerStatus().get("uptime");
}
}

7
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/monitor/package-info.java

@ -1,7 +0,0 @@ @@ -1,7 +0,0 @@
/**
* MongoDB specific JMX monitoring support.
*/
@Deprecated(since = "4.5", forRemoval = true)
@org.springframework.lang.NonNullApi
package org.springframework.data.mongodb.monitor;

6
spring-data-mongodb/src/main/resources/META-INF/spring.schemas

@ -13,7 +13,8 @@ http\://www.springframework.org/schema/data/mongo/spring-mongo-2.2.xsd=org/sprin @@ -13,7 +13,8 @@ http\://www.springframework.org/schema/data/mongo/spring-mongo-2.2.xsd=org/sprin
http\://www.springframework.org/schema/data/mongo/spring-mongo-3.0.xsd=org/springframework/data/mongodb/config/spring-mongo-3.0.xsd
http\://www.springframework.org/schema/data/mongo/spring-mongo-3.3.xsd=org/springframework/data/mongodb/config/spring-mongo-3.3.xsd
http\://www.springframework.org/schema/data/mongo/spring-mongo-4.0.xsd=org/springframework/data/mongodb/config/spring-mongo-4.0.xsd
http\://www.springframework.org/schema/data/mongo/spring-mongo.xsd=org/springframework/data/mongodb/config/spring-mongo-4.0.xsd
http\://www.springframework.org/schema/data/mongo/spring-mongo-5.0.xsd=org/springframework/data/mongodb/config/spring-mongo-5.0.xsd
http\://www.springframework.org/schema/data/mongo/spring-mongo.xsd=org/springframework/data/mongodb/config/spring-mongo-5.0.xsd
https\://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd=org/springframework/data/mongodb/config/spring-mongo-1.0.xsd
https\://www.springframework.org/schema/data/mongo/spring-mongo-1.1.xsd=org/springframework/data/mongodb/config/spring-mongo-1.1.xsd
https\://www.springframework.org/schema/data/mongo/spring-mongo-1.2.xsd=org/springframework/data/mongodb/config/spring-mongo-1.2.xsd
@ -29,4 +30,5 @@ https\://www.springframework.org/schema/data/mongo/spring-mongo-2.2.xsd=org/spri @@ -29,4 +30,5 @@ https\://www.springframework.org/schema/data/mongo/spring-mongo-2.2.xsd=org/spri
https\://www.springframework.org/schema/data/mongo/spring-mongo-3.0.xsd=org/springframework/data/mongodb/config/spring-mongo-3.0.xsd
https\://www.springframework.org/schema/data/mongo/spring-mongo-3.3.xsd=org/springframework/data/mongodb/config/spring-mongo-3.3.xsd
https\://www.springframework.org/schema/data/mongo/spring-mongo-4.0.xsd=org/springframework/data/mongodb/config/spring-mongo-4.0.xsd
https\://www.springframework.org/schema/data/mongo/spring-mongo.xsd=org/springframework/data/mongodb/config/spring-mongo-4.0.xsd
https\://www.springframework.org/schema/data/mongo/spring-mongo-5.0.xsd=org/springframework/data/mongodb/config/spring-mongo-5.0.xsd
https\://www.springframework.org/schema/data/mongo/spring-mongo.xsd=org/springframework/data/mongodb/config/spring-mongo-5.0.xsd

935
spring-data-mongodb/src/main/resources/org/springframework/data/mongodb/config/spring-mongo-5.0.xsd

@ -0,0 +1,935 @@ @@ -0,0 +1,935 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!--
~ Copyright 2019-2025 the original author or authors.
~
~ 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
~
~ https://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.
-->
<xsd:schema xmlns="http://www.springframework.org/schema/data/mongo"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:tool="http://www.springframework.org/schema/tool"
xmlns:repository="http://www.springframework.org/schema/data/repository"
targetNamespace="http://www.springframework.org/schema/data/mongo"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<xsd:import namespace="http://www.springframework.org/schema/beans"/>
<xsd:import namespace="http://www.springframework.org/schema/tool"/>
<xsd:import namespace="http://www.springframework.org/schema/context"/>
<xsd:import namespace="http://www.springframework.org/schema/data/repository"
schemaLocation="https://www.springframework.org/schema/data/repository/spring-repository.xsd"/>
<xsd:element name="mongo-client" type="mongoClientType">
<xsd:annotation>
<xsd:documentation
source="org.springframework.data.mongodb.core.MongoClientFactoryBean">
<![CDATA[
Defines a com.mongodb.client.MongoClient instance used for accessing MongoDB.
]]></xsd:documentation>
<xsd:appinfo>
<tool:annotation>
<tool:exports type="com.mongodb.client.MongoClient"/>
</tool:annotation>
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="db-factory">
<xsd:annotation>
<xsd:documentation><![CDATA[
Defines a MongoDbFactory for connecting to a specific database
]]></xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:attribute name="id" type="xsd:string" use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
The name of the MongoDatabaseFactory definition (by default "mongoDbFactory").]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="mongo-client-ref" type="mongoRef" use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
The reference to a com.mongodb.client.MongoClient instance.
]]>
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="dbname" type="xsd:string" use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
The name of the database to connect to. Default is 'db'.
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="client-uri" type="xsd:string" use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
The MongoClientURI string.
@Deprecated since 3.0 - Use connection-string instead.
]]>
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="connection-string" type="xsd:string" use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
The MongoDB Connection String. Supersedes client-uri.
See https://docs.mongodb.com/manual/reference/connection-string/ for full documentation.
@Since 3.0
]]>
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="write-concern">
<xsd:annotation>
<xsd:documentation>
The WriteConcern that will be the default value used when asking
the MongoDatabaseFactory for a DB object
</xsd:documentation>
</xsd:annotation>
<xsd:simpleType>
<xsd:union memberTypes="writeConcernEnumeration xsd:string"/>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>
</xsd:element>
<xsd:attributeGroup name="mongo-repository-attributes">
<xsd:attribute name="mongo-template-ref" type="mongoTemplateRef"
default="mongoTemplate">
<xsd:annotation>
<xsd:documentation>
The reference to a MongoTemplate. Will default to 'mongoTemplate'.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="create-query-indexes" default="false">
<xsd:annotation>
<xsd:documentation>
Enables creation of indexes for queries that get derived from the
method name
and thus reference domain class properties. Defaults to false.
</xsd:documentation>
</xsd:annotation>
<xsd:simpleType>
<xsd:union memberTypes="booleanType xsd:string"/>
</xsd:simpleType>
</xsd:attribute>
</xsd:attributeGroup>
<xsd:element name="repositories">
<xsd:complexType>
<xsd:complexContent>
<xsd:extension base="repository:repositories">
<xsd:attributeGroup ref="mongo-repository-attributes"/>
<xsd:attributeGroup ref="repository:repository-attributes"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="mapping-converter">
<xsd:annotation>
<xsd:documentation>
<![CDATA[Defines a MongoConverter for getting rich mapping functionality.]]></xsd:documentation>
<xsd:appinfo>
<tool:exports
type="org.springframework.data.mongodb.core.convert.MappingMongoConverter"/>
</xsd:appinfo>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="custom-converters" minOccurs="0">
<xsd:annotation>
<xsd:documentation><![CDATA[
Top-level element that contains one or more custom converters to be used for mapping
domain objects to and from Mongo's Document]]>
</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="converter" type="customConverterType"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute name="base-package" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="id" type="xsd:string" use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
The name of the MappingMongoConverter instance (by default "mappingConverter").]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="base-package" type="xsd:string" use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
The base package in which to scan for entities annotated with @Document
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="db-factory-ref" type="xsd:string" use="optional">
<xsd:annotation>
<xsd:documentation>
The reference to a MongoDatabaseFactory.
</xsd:documentation>
<xsd:appinfo>
<tool:annotation kind="ref">
<tool:assignable-to
type="org.springframework.data.mongodb.MongoDatabaseFactory"/>
</tool:annotation>
</xsd:appinfo>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="type-mapper-ref" type="typeMapperRef" use="optional">
<xsd:annotation>
<xsd:documentation>
The reference to a MongoTypeMapper to be used by this
MappingMongoConverter.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="mapping-context-ref" type="mappingContextRef"
use="optional">
<xsd:annotation>
<xsd:documentation
source="org.springframework.data.mapping.model.MappingContext">
The reference to a MappingContext. Will default to
'mappingContext'.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="disable-validation" use="optional">
<xsd:annotation>
<xsd:documentation
source="org.springframework.data.mongodb.core.mapping.event.ValidatingMongoEventListener">
Disables JSR-303 validation on MongoDB documents before they are
saved. By default it is set to false.
</xsd:documentation>
</xsd:annotation>
<xsd:simpleType>
<xsd:union memberTypes="xsd:boolean xsd:string"/>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="abbreviate-field-names" use="optional">
<xsd:annotation>
<xsd:documentation
source="org.springframework.data.mongodb.core.mapping.CamelCaseAbbreviatingFieldNamingStrategy">
Enables abbreviating the field names for domain class properties
to the
first character of their camel case names, e.g. fooBar -> fb.
Defaults to false.
</xsd:documentation>
</xsd:annotation>
<xsd:simpleType>
<xsd:union memberTypes="xsd:boolean xsd:string"/>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="field-naming-strategy-ref" type="fieldNamingStrategyRef"
use="optional">
<xsd:annotation>
<xsd:documentation
source="org.springframework.data.mongodb.core.mapping.FieldNamingStrategy">
The reference to a FieldNamingStrategy.
</xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="auto-index-creation" use="optional">
<xsd:annotation>
<xsd:documentation>
Enable/Disable index creation for annotated properties/entities.
</xsd:documentation>
</xsd:annotation>
<xsd:simpleType>
<xsd:union memberTypes="xsd:boolean xsd:string"/>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>
</xsd:element>
<xsd:element name="auditing">
<xsd:annotation>
<xsd:appinfo>
<tool:annotation>
<tool:exports
type="org.springframework.data.mongodb.core.mapping.event.AuditingEntityCallback"/>
<tool:exports
type="org.springframework.data.auditing.IsNewAwareAuditingHandler"/>
</tool:annotation>
</xsd:appinfo>
</xsd:annotation>
<xsd:complexType>
<xsd:attributeGroup ref="repository:auditing-attributes"/>
<xsd:attribute name="mapping-context-ref" type="mappingContextRef"/>
<xsd:attribute name="mongo-converter-ref" type="mongoConverterRef"/>
</xsd:complexType>
</xsd:element>
<xsd:simpleType name="typeMapperRef">
<xsd:annotation>
<xsd:appinfo>
<tool:annotation kind="ref">
<tool:assignable-to
type="org.springframework.data.mongodb.core.convert.MongoTypeMapper"/>
</tool:annotation>
</xsd:appinfo>
</xsd:annotation>
<xsd:union memberTypes="xsd:string"/>
</xsd:simpleType>
<xsd:simpleType name="mappingContextRef">
<xsd:annotation>
<xsd:appinfo>
<tool:annotation kind="ref">
<tool:assignable-to
type="org.springframework.data.mapping.model.MappingContext"/>
</tool:annotation>
</xsd:appinfo>
</xsd:annotation>
<xsd:union memberTypes="xsd:string"/>
</xsd:simpleType>
<xsd:simpleType name="mongoConverterRef">
<xsd:annotation>
<xsd:appinfo>
<tool:annotation kind="ref">
<tool:assignable-to
type="org.springframework.data.mongodb.core.convert.MongoConverter"/>
</tool:annotation>
</xsd:appinfo>
</xsd:annotation>
<xsd:union memberTypes="xsd:string"/>
</xsd:simpleType>
<xsd:simpleType name="fieldNamingStrategyRef">
<xsd:annotation>
<xsd:appinfo>
<tool:annotation kind="ref">
<tool:assignable-to
type="org.springframework.data.mongodb.core.mapping.FieldNamingStrategy"/>
</tool:annotation>
</xsd:appinfo>
</xsd:annotation>
<xsd:union memberTypes="xsd:string"/>
</xsd:simpleType>
<xsd:simpleType name="mongoTemplateRef">
<xsd:annotation>
<xsd:appinfo>
<tool:annotation kind="ref">
<tool:assignable-to
type="org.springframework.data.mongodb.core.MongoTemplate"/>
</tool:annotation>
</xsd:appinfo>
</xsd:annotation>
<xsd:union memberTypes="xsd:string"/>
</xsd:simpleType>
<xsd:simpleType name="mongoRef">
<xsd:annotation>
<xsd:appinfo>
<tool:annotation kind="ref">
<tool:assignable-to
type="org.springframework.data.mongodb.core.MongoClientFactoryBean"/>
</tool:annotation>
</xsd:appinfo>
</xsd:annotation>
<xsd:union memberTypes="xsd:string"/>
</xsd:simpleType>
<xsd:simpleType name="sslSocketFactoryRef">
<xsd:annotation>
<xsd:appinfo>
<tool:annotation kind="ref">
<tool:assignable-to type="javax.net.ssl.SSLSocketFactory"/>
</tool:annotation>
</xsd:appinfo>
</xsd:annotation>
<xsd:union memberTypes="xsd:string"/>
</xsd:simpleType>
<xsd:simpleType name="encryptionSettingsRef">
<xsd:annotation>
<xsd:documentation><![CDATA[
Reference to FactoryBean for com.mongodb.AutoEncryptionSettings - @since 2.2
]]></xsd:documentation>
<xsd:appinfo>
<tool:annotation kind="ref">
<tool:assignable-to
type="org.springframework.data.mongodb.core.MongoEncryptionSettingsFactoryBean"/>
</tool:annotation>
</xsd:appinfo>
</xsd:annotation>
<xsd:union memberTypes="xsd:string"/>
</xsd:simpleType>
<xsd:simpleType name="serverApiRef">
<xsd:annotation>
<xsd:documentation><![CDATA[
Reference to FactoryBean for com.mongodb.MongoServerApiFactoryBean - @since 3.3
]]></xsd:documentation>
<xsd:appinfo>
<tool:annotation kind="ref">
<tool:assignable-to
type="org.springframework.data.mongodb.core.MongoServerApiFactoryBean"/>
</tool:annotation>
</xsd:appinfo>
</xsd:annotation>
<xsd:union memberTypes="xsd:string"/>
</xsd:simpleType>
<xsd:simpleType name="readConcernEnumeration">
<xsd:restriction base="xsd:token">
<xsd:enumeration value="DEFAULT"/>
<xsd:enumeration value="LOCAL"/>
<xsd:enumeration value="MAJORITY"/>
<xsd:enumeration value="LINEARIZABLE"/>
<xsd:enumeration value="AVAILABLE"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="writeConcernEnumeration">
<xsd:restriction base="xsd:token">
<xsd:enumeration value="ACKNOWLEDGED"/>
<xsd:enumeration value="W1"/>
<xsd:enumeration value="W2"/>
<xsd:enumeration value="W3"/>
<xsd:enumeration value="UNACKNOWLEDGED"/>
<xsd:enumeration value="JOURNALED"/>
<xsd:enumeration value="MAJORITY"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="readPreferenceEnumeration">
<xsd:restriction base="xsd:token">
<xsd:enumeration value="PRIMARY"/>
<xsd:enumeration value="PRIMARY_PREFERRED"/>
<xsd:enumeration value="SECONDARY"/>
<xsd:enumeration value="SECONDARY_PREFERRED"/>
<xsd:enumeration value="NEAREST"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="uuidRepresentationEnumeration">
<xsd:restriction base="xsd:token">
<xsd:enumeration value="UNSPECIFIED"/>
<xsd:enumeration value="STANDARD"/>
<xsd:enumeration value="C_SHARP_LEGACY"/>
<xsd:enumeration value="JAVA_LEGACY"/>
<xsd:enumeration value="PYTHON_LEGACY"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="clusterConnectionModeEnumeration">
<xsd:restriction base="xsd:token">
<xsd:enumeration value="SINGLE"/>
<xsd:enumeration value="MULTIPLE"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="clusterTypeEnumeration">
<xsd:restriction base="xsd:token">
<xsd:enumeration value="STANDALONE"/>
<xsd:enumeration value="REPLICA_SET"/>
<xsd:enumeration value="SHARDED"/>
<xsd:enumeration value="UNKNOWN"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="booleanType">
<xsd:restriction base="xsd:token">
<xsd:enumeration value="true"/>
<xsd:enumeration value="false"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:complexType name="mongoClientType">
<xsd:annotation>
<xsd:documentation><![CDATA[
Configuration options for 'com.mongodb.client.MongoClient'
]]></xsd:documentation>
</xsd:annotation>
<xsd:sequence minOccurs="0" maxOccurs="1">
<xsd:element name="client-settings" type="clientSettingsType">
<xsd:annotation>
<xsd:documentation><![CDATA[
The Mongo driver settings
]]></xsd:documentation>
<xsd:appinfo>
<tool:annotation>
<tool:exports type="com.mongodb.MongoClientSettings"/>
</tool:annotation>
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="id" type="xsd:string" use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
The name of the MongoClient definition (by default "mongoClient").]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="connection-string" type="xsd:string" use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
The mongodb connection string. E.g. 'mongodb://localhost:27017?replicaSet=rs0'
See https://docs.mongodb.com/manual/reference/connection-string/ for full documentation.
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="port" type="xsd:string" use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
The port to connect to MongoDB server. Default is 27017
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="host" type="xsd:string" use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
The host to connect to a MongoDB server. Default is localhost
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="replica-set" type="xsd:string" use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
The replica set name when connecting to a cluster.
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="credential" type="xsd:string" use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
NOTE: Best way of setting up a connection is by providing the 'connection-string'.
The comma delimited list of username:password@database entries to use for authentication. Appending ?uri.authMechanism allows to specify the authentication challenge mechanism. If the credential you're trying to pass contains a comma itself, quote it with single quotes: '…'.
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:complexType name="clientSettingsType">
<xsd:annotation>
<xsd:documentation><![CDATA[
Configuration options for 'MongoClientSettings' - @since 3.0
]]></xsd:documentation>
</xsd:annotation>
<xsd:attribute name="application-name" type="xsd:string" use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
The application name to use when connecting to MongoDB. Mainly used to identify an operation in server logs, query logs and other profiling features.
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="uuid-representation" use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
The storage format of UUID types.
]]></xsd:documentation>
</xsd:annotation>
<xsd:simpleType>
<xsd:union memberTypes="uuidRepresentationEnumeration xsd:string"/>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="read-preference" use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
The read preference to use for quries, map-reduce, aggregation and count operations.
]]></xsd:documentation>
</xsd:annotation>
<xsd:simpleType>
<xsd:union memberTypes="readPreferenceEnumeration xsd:string"/>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="read-concern" use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
Set the global read isolation level.
]]></xsd:documentation>
</xsd:annotation>
<xsd:simpleType>
<xsd:union memberTypes="readConcernEnumeration xsd:string"/>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="write-concern">
<xsd:annotation>
<xsd:documentation><![CDATA[
Set the default 'WriteConcern' that is controls the acknowledgment of write operations.
]]></xsd:documentation>
</xsd:annotation>
<xsd:simpleType>
<xsd:union memberTypes="writeConcernEnumeration xsd:string"/>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="retry-reads" use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
Sets whether reads should be retried if they fail due to a network error.
]]></xsd:documentation>
</xsd:annotation>
<xsd:simpleType>
<xsd:union memberTypes="booleanType xsd:string"/>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="retry-writes" use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
Sets whether writes should be retried if they fail due to a network error.
]]></xsd:documentation>
</xsd:annotation>
<xsd:simpleType>
<xsd:union memberTypes="booleanType xsd:string"/>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="socket-connect-timeout" type="xsd:string" use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
Sets the socket connect timeout (msec).
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="socket-read-timeout" type="xsd:string" use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
Sets the socket read timeoutn (msec).
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="socket-receive-buffer-size" type="xsd:string" use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
Sets the receive buffer size.
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="socket-send-buffer-size" type="xsd:string" use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
Sets the send buffer size.
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="server-heartbeat-frequency" type="xsd:string" use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
This is the frequency that the driver will attempt to determine the current state of each server in the cluster.
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="server-min-heartbeat-frequency" type="xsd:string"
use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
In the event that the driver has to frequently re-check a server's availability, it will wait at least this long since the previous check to avoid wasted effort.
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="cluster-srv-host" type="xsd:string" use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
Sets the host name to use in order to look up an SRV DNS record to find the MongoDB hosts.
NOTE: do not use along with cluster-hosts.
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="cluster-hosts" type="xsd:string" use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
Sets the hosts for the cluster. Any duplicate server addresses are removed from the list.
NOTE: do not use along with cluster-srv-host
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="cluster-connection-mode" use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
Sets the cluster connection mode to either single node direct or multiple servers.
]]></xsd:documentation>
</xsd:annotation>
<xsd:simpleType>
<xsd:union memberTypes="clusterConnectionModeEnumeration xsd:string"/>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="cluster-type" use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
Sets the cluster type (eg. SHARDED, REPLICA_SET,...).
]]></xsd:documentation>
</xsd:annotation>
<xsd:simpleType>
<xsd:union memberTypes="clusterTypeEnumeration xsd:string"/>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="cluster-local-threshold" type="xsd:string" use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
Sets the local threshold when selecting a server based on fastes ping time.
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="cluster-server-selection-timeout" type="xsd:string"
use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
Sets the timeout to apply when selecting a server.
Zero indicates an immediate timeout while a negative value means indefinitely wait.
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="connection-pool-max-size" type="xsd:string" use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
Sets the maximum number of connections allowed.
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="connection-pool-min-size" type="xsd:string" use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
Sets the minimum number of connections.
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="connection-pool-max-wait-time" type="xsd:string"
use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
Sets the maximum time a thread may wait for a connection to become available.
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="connection-pool-max-connection-life-time" type="xsd:string"
use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
The maximum time a pooled connection can live for.
Zero indicates no limit.
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="connection-pool-max-connection-idle-time" type="xsd:string"
use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
Sets the maximum idle time of a pooled connection.
Zero indicates no limit.
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="connection-pool-maintenance-initial-delay" type="xsd:string"
use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
Sets the period of time to wait before running the first maintenance job on the connection pool.
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="connection-pool-maintenance-frequency" type="xsd:string"
use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
Sets the time period between runs of the maintenance job.
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="ssl-enabled" default="false">
<xsd:annotation>
<xsd:documentation><![CDATA[
Set whether SSL should be enabled or not.
]]></xsd:documentation>
</xsd:annotation>
<xsd:simpleType>
<xsd:union memberTypes="booleanType xsd:string"/>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="ssl-invalid-host-name-allowed" type="xsd:string"
use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
Set whether invalid host names should be allowed.
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="ssl-provider" type="xsd:string" use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
Set the SSL Context instance provider.
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="encryption-settings-ref" type="encryptionSettingsRef"
use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
AutoEncryptionSettings for MongoDB 4.2+
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="server-api-version" type="xsd:string" use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
Set the server API version for MongoDB 5.0+. Use server-api-ref if required to set additional modes like 'strict',...
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="server-api-ref" type="serverApiRef" use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
ServerAPI for MongoDB 5.0+
]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:group name="beanElementGroup">
<xsd:choice>
<xsd:element ref="beans:bean"/>
<xsd:element ref="beans:ref"/>
</xsd:choice>
</xsd:group>
<xsd:complexType name="customConverterType">
<xsd:annotation>
<xsd:documentation><![CDATA[
Element defining a custom converter.
]]></xsd:documentation>
</xsd:annotation>
<xsd:group ref="beanElementGroup" minOccurs="0" maxOccurs="1"/>
<xsd:attribute name="ref" type="xsd:string">
<xsd:annotation>
<xsd:documentation>
A reference to a custom converter.
</xsd:documentation>
<xsd:appinfo>
<tool:annotation kind="ref"/>
</xsd:appinfo>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
<xsd:simpleType name="converterRef">
<xsd:annotation>
<xsd:appinfo>
<tool:annotation kind="ref">
<tool:assignable-to
type="org.springframework.data.mongodb.core.convert.MongoConverter"/>
</tool:annotation>
</xsd:appinfo>
</xsd:annotation>
<xsd:union memberTypes="xsd:string"/>
</xsd:simpleType>
<xsd:element name="template">
<xsd:annotation>
<xsd:documentation><![CDATA[
Defines a MongoTemplate.
]]></xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:attribute name="id" type="xsd:string" use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
The name of the MongoTemplate definition (by default "mongoTemplate").]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="converter-ref" type="converterRef" use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
The reference to a MappingMongoConverter instance.
]]>
</xsd:documentation>
<xsd:appinfo>
<tool:annotation kind="ref">
<tool:assignable-to
type="org.springframework.data.mongodb.core.convert.MongoConverter"/>
</tool:annotation>
</xsd:appinfo>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="db-factory-ref" type="xsd:string"
use="optional">
<xsd:annotation>
<xsd:documentation>
The reference to a MongoDatabaseFactory.
</xsd:documentation>
<xsd:appinfo>
<tool:annotation kind="ref">
<tool:assignable-to
type="org.springframework.data.mongodb.MongoDatabaseFactory"/>
</tool:annotation>
</xsd:appinfo>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="write-concern">
<xsd:annotation>
<xsd:documentation>
The WriteConcern that will be the default value used when asking
the MongoDatabaseFactory for a DB object
</xsd:documentation>
</xsd:annotation>
<xsd:simpleType>
<xsd:union memberTypes="writeConcernEnumeration xsd:string"/>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>
</xsd:element>
<xsd:element name="gridFsTemplate">
<xsd:annotation>
<xsd:documentation><![CDATA[
Defines a GridFsTemplate.
]]></xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:attribute name="id" type="xsd:string" use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
The name of the GridFsTemplate definition (by default "gridFsTemplate").]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="converter-ref" type="converterRef" use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
The reference to a MappingMongoConverter instance.
]]>
</xsd:documentation>
<xsd:appinfo>
<tool:annotation kind="ref">
<tool:assignable-to
type="org.springframework.data.mongodb.core.convert.MongoConverter"/>
</tool:annotation>
</xsd:appinfo>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="db-factory-ref" type="xsd:string" use="optional">
<xsd:annotation>
<xsd:documentation>
The reference to a MongoDatabaseFactory.
</xsd:documentation>
<xsd:appinfo>
<tool:annotation kind="ref">
<tool:assignable-to
type="org.springframework.data.mongodb.MongoDatabaseFactory"/>
</tool:annotation>
</xsd:appinfo>
</xsd:annotation>
</xsd:attribute>
<xsd:attribute name="bucket" type="xsd:string" use="optional">
<xsd:annotation>
<xsd:documentation><![CDATA[
The GridFs bucket string.]]></xsd:documentation>
</xsd:annotation>
</xsd:attribute>
</xsd:complexType>
</xsd:element>
</xsd:schema>

38
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/JmxServer.java

@ -1,38 +0,0 @@ @@ -1,38 +0,0 @@
/*
* Copyright 2002-2025 the original author or authors.
*
* 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
*
* https://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 org.springframework.data.mongodb.core;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* Server application than can be run as an app or unit test.
*
* @author Mark Pollack
* @author Oliver Gierke
* @deprecated since 4.5.
*/
@Deprecated(since = "4.5", forRemoval = true)
public class JmxServer {
public static void main(String[] args) {
new JmxServer().run();
}
@SuppressWarnings("resource")
public void run() {
new ClassPathXmlApplicationContext(new String[] { "infrastructure.xml", "server-jmx.xml" });
}
}

68
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/monitor/MongoMonitorIntegrationTests.java

@ -1,68 +0,0 @@ @@ -1,68 +0,0 @@
/*
* Copyright 2002-2025 the original author or authors.
*
* 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
*
* https://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 org.springframework.data.mongodb.monitor;
import static org.assertj.core.api.Assertions.*;
import java.net.UnknownHostException;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.data.mongodb.test.util.Client;
import org.springframework.data.mongodb.test.util.MongoClientExtension;
import com.mongodb.client.MongoClient;
/**
* This test class assumes that you are already running the MongoDB server.
*
* @author Mark Pollack
* @author Thomas Darimont
* @author Mark Paluch
*/
@ExtendWith(MongoClientExtension.class)
public class MongoMonitorIntegrationTests {
static @Client MongoClient mongoClient;
@Test
public void serverInfo() {
ServerInfo serverInfo = new ServerInfo(mongoClient);
serverInfo.getVersion();
}
@Test // DATAMONGO-685
public void getHostNameShouldReturnServerNameReportedByMongo() throws UnknownHostException {
ServerInfo serverInfo = new ServerInfo(mongoClient);
String hostName = null;
try {
hostName = serverInfo.getHostName();
} catch (UnknownHostException e) {
throw e;
}
assertThat(hostName).isNotNull();
assertThat(hostName).isEqualTo("127.0.0.1:27017");
}
@Test
public void operationCounters() {
OperationCounters operationCounters = new OperationCounters(mongoClient);
operationCounters.getInsertCount();
}
}

27
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/monitor/Resumeable.java

@ -1,27 +0,0 @@ @@ -1,27 +0,0 @@
/*
* Copyright 2018-2025 the original author or authors.
*
* 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
*
* https://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 org.springframework.data.mongodb.monitor;
import java.util.function.Supplier;
/**
* @author Christoph Strobl
* @since 2018/01
*/
interface Resumeable<T> {
void resumeAt(Supplier<T> token);
}

23
spring-data-mongodb/src/test/resources/server-jmx.xml

@ -1,23 +0,0 @@ @@ -1,23 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:mongo="http://www.springframework.org/schema/data/mongo"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/data/mongo https://www.springframework.org/schema/data/mongo/spring-mongo.xsd
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<mongo:jmx/>
<context:mbean-export/>
<bean id="registry" class="org.springframework.remoting.rmi.RmiRegistryFactoryBean"
p:port="1099"/>
<!-- Expose JMX over RMI -->
<bean id="serverConnector" class="org.springframework.jmx.support.ConnectorServerFactoryBean" depends-on="registry"
p:objectName="connector:name=rmi"
p:serviceUrl="service:jmx:rmi://localhost/jndi/rmi://localhost:1099/myconnector"/>
</beans>
Loading…
Cancel
Save