diff --git a/Jenkinsfile b/Jenkinsfile
index ce2f272334..c4374cc651 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -20,10 +20,10 @@ pipeline {
stages {
stage("Docker images") {
parallel {
- stage('Publish JDK (Java 24) + MongoDB 8.0') {
+ stage('Publish JDK (Java 25) + MongoDB 8.0') {
when {
anyOf {
- changeset "ci/openjdk24-mongodb-8.0/**"
+ changeset "ci/openjdk25-mongodb-8.0/**"
changeset "ci/pipeline.properties"
}
}
@@ -32,7 +32,7 @@ pipeline {
steps {
script {
- def image = docker.build("springci/spring-data-with-mongodb-8.0:${p['java.main.tag']}", "--build-arg BASE=${p['docker.java.main.image']} --build-arg MONGODB=${p['docker.mongodb.7.0.version']} ci/openjdk24-mongodb-8.0/")
+ def image = docker.build("springci/spring-data-with-mongodb-8.0:${p['java.main.tag']}", "--build-arg BASE=${p['docker.java.main.image']} --build-arg MONGODB=${p['docker.mongodb.7.0.version']} ci/openjdk25-mongodb-8.0/")
docker.withRegistry(p['docker.registry'], p['docker.credentials']) {
image.push()
}
@@ -42,7 +42,7 @@ pipeline {
stage('Publish JDK (Java.next) + MongoDB 8.0') {
when {
anyOf {
- changeset "ci/openjdk24-mongodb-8.0/**"
+ changeset "ci/openjdk25-mongodb-8.0/**"
changeset "ci/pipeline.properties"
}
}
@@ -51,7 +51,7 @@ pipeline {
steps {
script {
- def image = docker.build("springci/spring-data-with-mongodb-8.0:${p['java.next.tag']}", "--build-arg BASE=${p['docker.java.next.image']} --build-arg MONGODB=${p['docker.mongodb.8.0.version']} ci/openjdk24-mongodb-8.0/")
+ def image = docker.build("springci/spring-data-with-mongodb-8.0:${p['java.next.tag']}", "--build-arg BASE=${p['docker.java.next.image']} --build-arg MONGODB=${p['docker.mongodb.8.0.version']} ci/openjdk25-mongodb-8.0/")
docker.withRegistry(p['docker.registry'], p['docker.credentials']) {
image.push()
}
diff --git a/ci/openjdk24-mongodb-8.0/Dockerfile b/ci/openjdk25-mongodb-8.0/Dockerfile
similarity index 100%
rename from ci/openjdk24-mongodb-8.0/Dockerfile
rename to ci/openjdk25-mongodb-8.0/Dockerfile
diff --git a/pom.xml b/pom.xml
index a0beb607ea..c09c242537 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
org.springframework.data
spring-data-mongodb-parent
- 5.0.0-SNAPSHOT
+ 5.0.0-GH-4852-SNAPSHOT
pom
Spring Data MongoDB
diff --git a/spring-data-mongodb-distribution/pom.xml b/spring-data-mongodb-distribution/pom.xml
index fc88571622..02d03b0db3 100644
--- a/spring-data-mongodb-distribution/pom.xml
+++ b/spring-data-mongodb-distribution/pom.xml
@@ -15,7 +15,7 @@
org.springframework.data
spring-data-mongodb-parent
- 5.0.0-SNAPSHOT
+ 5.0.0-GH-4852-SNAPSHOT
../pom.xml
diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml
index 595e5a4250..09b004fa5a 100644
--- a/spring-data-mongodb/pom.xml
+++ b/spring-data-mongodb/pom.xml
@@ -13,7 +13,7 @@
org.springframework.data
spring-data-mongodb-parent
- 5.0.0-SNAPSHOT
+ 5.0.0-GH-4852-SNAPSHOT
../pom.xml
diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/Meta.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/Meta.java
index 66c9bd786d..e64a6f25a0 100644
--- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/Meta.java
+++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/Meta.java
@@ -21,9 +21,9 @@
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
-import org.springframework.data.annotation.QueryAnnotation;
-
/**
+ * Annotation to declare meta-information (execution time, cursor size, disk usage) for query methods.
+ *
* @author Christoph Strobl
* @author Mark Paluch
* @since 1.6
@@ -31,7 +31,6 @@
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.METHOD, ElementType.ANNOTATION_TYPE })
@Documented
-@QueryAnnotation
public @interface Meta {
/**
diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/Near.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/Near.java
index f0da9965a3..68ba73834d 100644
--- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/Near.java
+++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/Near.java
@@ -25,8 +25,8 @@
import org.springframework.data.geo.Point;
/**
- * Annotation to be used for disambiguing method parameters that shall be used to trigger geo near queries. By default
- * those parameters are found without the need for additional annotation if they are the only parameters of the
+ * Annotation to be used for disambiguating method parameters that shall be used to trigger geo near queries. By
+ * default, those parameters are found without the need for additional annotation if they are the only parameters of the
* according type (e.g. {@link Point}, {@code double[]}, {@link Distance}).
*
* @author Oliver Gierke
diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/PersonRepository.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/PersonRepository.java
index a9f694e200..dc1dbe2a92 100644
--- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/PersonRepository.java
+++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/PersonRepository.java
@@ -63,6 +63,7 @@ public interface PersonRepository extends MongoRepository, Query
* @param lastname
* @return
*/
+ @Meta
List findByLastname(String lastname);
List findByLastnameStartsWith(String prefix);
diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/PartTreeMongoQueryUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/PartTreeMongoQueryUnitTests.java
index 07c10592d9..d88fc75fa1 100644
--- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/PartTreeMongoQueryUnitTests.java
+++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/PartTreeMongoQueryUnitTests.java
@@ -38,6 +38,7 @@
import org.springframework.data.mongodb.core.convert.NoOpDbRefResolver;
import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
import org.springframework.data.mongodb.core.query.TextCriteria;
+import org.springframework.data.mongodb.repository.Meta;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.mongodb.repository.Person;
import org.springframework.data.mongodb.repository.Person.Sex;
@@ -127,6 +128,12 @@ void doesNotDeriveFieldSpecForNormalDomainType() {
assertThat(deriveQueryFromMethod("findPersonBy", new Object[0]).getFieldsObject()).isEmpty();
}
+ @Test // GH-4852
+ void appliesMetaToPartTreeQuery() {
+ assertThat(deriveQueryFromMethod("findPersonBy", new Object[0]).getMeta()
+ .getMaxTimeMsec()).isEqualTo(1234L);
+ }
+
@Test // DATAMONGO-1345
void restrictsQueryToFieldsRequiredForProjection() {
@@ -193,7 +200,10 @@ private org.springframework.data.mongodb.core.query.Query deriveQueryFromMethod(
PartTreeMongoQuery partTreeQuery = createQueryForMethod(method, types);
MongoParameterAccessor accessor = new MongoParametersParameterAccessor(partTreeQuery.getQueryMethod(), args);
- return partTreeQuery.createQuery(new ConvertingParameterAccessor(mongoOperationsMock.getConverter(), accessor));
+
+ org.springframework.data.mongodb.core.query.Query query = partTreeQuery.createQuery(new ConvertingParameterAccessor(mongoOperationsMock.getConverter(), accessor));
+ partTreeQuery.applyQueryMetaAttributesWhenPresent(query);
+ return query;
}
private PartTreeMongoQuery createQueryForMethod(String methodName, Class>... paramTypes) {
@@ -230,6 +240,7 @@ interface Repo extends MongoRepository {
@Query(fields = "{ 'firstname }")
Person findByAge(Integer age);
+ @Meta(maxExecutionTimeMs = 1234)
Person findPersonBy();
PersonProjection findPersonProjectedBy();
diff --git a/src/main/antora/modules/ROOT/pages/mongodb/repositories/query-methods.adoc b/src/main/antora/modules/ROOT/pages/mongodb/repositories/query-methods.adoc
index 8ae5065152..67ccb94e5d 100644
--- a/src/main/antora/modules/ROOT/pages/mongodb/repositories/query-methods.adoc
+++ b/src/main/antora/modules/ROOT/pages/mongodb/repositories/query-methods.adoc
@@ -205,6 +205,9 @@ lower / upper bounds (`$gt` / `$gte` & `$lt` / `$lte`) according to `Range`
NOTE: If the property criterion compares a document, the order of the fields and exact equality in the document matters.
+NOTE: In some scenarios, you might require additional options, such as a maximum run time, additional log comments, or the permission to temporarily write data to disk.
+Use the `@Meta` annotation to set those options via `maxExecutionTimeMs`, `comment` or `allowDiskUse`. `@Meta` can only be used on repository query methods, not on base interface or fragment interface methods.
+
[[mongodb.repositories.queries.geo-spatial]]
== Geo-spatial Queries
@@ -443,7 +446,7 @@ public interface PersonRepository extends ReactiveMongoRepository