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