From 02eae22b23c710fa1680bf085c0ef940c5cebd2a Mon Sep 17 00:00:00 2001 From: Sergey Babenko Date: Sat, 25 Jul 2026 14:25:51 +0300 Subject: [PATCH] Add Spring Boot 4 support - Upgrade spring-boot-dependencies to 4.1.0, Gradle wrapper to 8.14.5 - Migrate to relocated auto-configurations (spring-boot-data-mongodb, spring-boot-mongodb, spring-boot-transaction, spring-boot-webflux) - Replace @Configuration + @AutoConfigureAfter with @AutoConfiguration - Replace deprecated ensureIndex with createIndex - Replace @SpyBean with @MockitoSpyBean, migrate to Testcontainers 2 - Add -parameters compiler flag required by Spring Framework 7 - Register test fixtures explicitly in ConcurrentMongrationTest since TestTypeExcludeFilter now applies to SpringApplication started from tests - Bump version to 3.0.0, document Spring Boot compatibility in README --- .github/workflows/gradle.yml | 9 +++++--- .github/workflows/release.yml | 5 ++-- README.md | 8 +++++++ build.gradle | 23 ++++++++++++------- gradle/wrapper/gradle-wrapper.properties | 2 +- .../MongrationActuatorAutoConfiguration.java | 5 ++-- .../MongrationAutoConfiguration.java | 10 ++++---- .../service/impl/IndexCreatorImpl.java | 4 ++-- .../impl/ReactiveIndexCreatorImpl.java | 4 ++-- .../mongration/MongoIntegrationTest.java | 6 ++--- .../mongration/MongrationTest.java | 2 +- .../mongration/NewIndexMongrationTest.java | 8 +++---- .../NewIndexReactiveMongrationTest.java | 8 +++---- .../mongration/ReactiveMongrationTest.java | 2 +- .../ReactiveTransactionalMongrationTest.java | 20 ++++++++-------- .../TransactionalMongrationTest.java | 20 ++++++++-------- .../concurrent/ConcurrentMongrationTest.java | 6 +++-- .../impl/ChangesetServiceIntegrationTest.java | 2 +- .../service/impl/IndexCreatorImplTest.java | 4 ++-- .../service/impl/LockServiceTest.java | 6 ++--- ...activeChangesetServiceIntegrationTest.java | 2 +- .../impl/ReactiveIndexCreatorImplTest.java | 4 ++-- .../service/impl/ReactiveLockServiceTest.java | 6 ++--- 23 files changed, 92 insertions(+), 74 deletions(-) diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 7abd9ba..2297e2d 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -12,14 +12,17 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Set up JDK 17 - uses: actions/setup-java@v1 + uses: actions/setup-java@v4 with: + distribution: temurin java-version: 17 - name: Grant execute permission for gradlew run: chmod +x gradlew - name: Build with Gradle run: ./gradlew build - name: Codecov - uses: codecov/codecov-action@v1 \ No newline at end of file + uses: codecov/codecov-action@v5 + with: + token: ${{ secrets.CODECOV_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 51eb6e2..29ea41c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -16,10 +16,11 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Set up JDK 17 - uses: actions/setup-java@v1 + uses: actions/setup-java@v4 with: + distribution: temurin java-version: 17 - name: Grant execute permission for gradlew run: chmod +x gradlew diff --git a/README.md b/README.md index 87f3a46..5ac8557 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,14 @@ MongoDB data migration tool for Spring Boot projects * Support MongoDB transactions * Support ReactiveMongoTemplate +## Compatibility + +| Mongration | Spring Boot | +|------------|-------------| +| 3.x | 4.x | +| 2.x | 3.x | +| 1.x | 2.x | + ## Getting started ### Add a dependency #### Maven diff --git a/build.gradle b/build.gradle index 314d616..139e40d 100644 --- a/build.gradle +++ b/build.gradle @@ -17,21 +17,22 @@ java { } group = 'com.github.kuliginstepan' -version = '2.0.1' +version = '3.0.0' repositories { mavenCentral() } dependencies { - api platform('org.springframework.boot:spring-boot-dependencies:3.0.4') - annotationProcessor platform('org.springframework.boot:spring-boot-dependencies:3.0.4') - testAnnotationProcessor platform('org.springframework.boot:spring-boot-starter-parent:3.0.4') + api platform('org.springframework.boot:spring-boot-dependencies:4.1.0') + annotationProcessor platform('org.springframework.boot:spring-boot-dependencies:4.1.0') + testAnnotationProcessor platform('org.springframework.boot:spring-boot-dependencies:4.1.0') implementation 'org.springframework.boot:spring-boot-autoconfigure' api 'io.projectreactor:reactor-core' compileOnly 'org.springframework.data:spring-data-mongodb' + compileOnly 'org.springframework.boot:spring-boot-data-mongodb' compileOnly 'org.springframework.boot:spring-boot-actuator-autoconfigure' compileOnly 'org.mongodb:mongodb-driver-reactivestreams' compileOnly 'org.projectlombok:lombok' @@ -41,14 +42,20 @@ dependencies { testAnnotationProcessor 'org.projectlombok:lombok' testCompileOnly 'org.projectlombok:lombok' - testImplementation 'org.springframework.boot:spring-boot-starter-test' - testImplementation 'org.testcontainers:junit-jupiter:1.17.6' - testImplementation 'org.testcontainers:mongodb:1.17.6' - testImplementation 'org.springframework.data:spring-data-mongodb' + testImplementation 'org.springframework.boot:spring-boot-starter-data-mongodb-test' + testImplementation 'org.springframework.boot:spring-boot-starter-data-mongodb-reactive-test' testImplementation 'org.springframework.boot:spring-boot-starter-webflux' + testImplementation 'org.springframework.boot:spring-boot-transaction' + testImplementation 'org.testcontainers:testcontainers-junit-jupiter' + testImplementation 'org.testcontainers:testcontainers-mongodb' testImplementation 'org.mongodb:mongodb-driver-reactivestreams' testImplementation 'org.mongodb:mongodb-driver-sync' testImplementation 'io.projectreactor:reactor-core' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' +} + +tasks.withType(JavaCompile).configureEach { + options.compilerArgs.add('-parameters') } test { diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index bdc9a83..7a04a2d 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.5-bin.zip networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/src/main/java/com/kuliginstepan/mongration/actuator/MongrationActuatorAutoConfiguration.java b/src/main/java/com/kuliginstepan/mongration/actuator/MongrationActuatorAutoConfiguration.java index 651d26d..66fdedc 100644 --- a/src/main/java/com/kuliginstepan/mongration/actuator/MongrationActuatorAutoConfiguration.java +++ b/src/main/java/com/kuliginstepan/mongration/actuator/MongrationActuatorAutoConfiguration.java @@ -3,7 +3,7 @@ import com.kuliginstepan.mongration.configuration.MongrationAutoConfiguration; import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnAvailableEndpoint; import org.springframework.boot.actuate.endpoint.annotation.Endpoint; -import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; @@ -12,9 +12,8 @@ import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.ReactiveMongoTemplate; -@Configuration(proxyBeanMethods = false) +@AutoConfiguration(after = MongrationAutoConfiguration.class) @ConditionalOnClass(Endpoint.class) -@AutoConfigureAfter(MongrationAutoConfiguration.class) public class MongrationActuatorAutoConfiguration { @Configuration(proxyBeanMethods = false) diff --git a/src/main/java/com/kuliginstepan/mongration/configuration/MongrationAutoConfiguration.java b/src/main/java/com/kuliginstepan/mongration/configuration/MongrationAutoConfiguration.java index 746b813..e2c5863 100644 --- a/src/main/java/com/kuliginstepan/mongration/configuration/MongrationAutoConfiguration.java +++ b/src/main/java/com/kuliginstepan/mongration/configuration/MongrationAutoConfiguration.java @@ -1,15 +1,13 @@ package com.kuliginstepan.mongration.configuration; -import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration; -import org.springframework.boot.autoconfigure.data.mongo.MongoReactiveDataAutoConfiguration; +import org.springframework.boot.data.mongodb.autoconfigure.DataMongoAutoConfiguration; +import org.springframework.boot.data.mongodb.autoconfigure.DataMongoReactiveAutoConfiguration; import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; -@Configuration(proxyBeanMethods = false) -@AutoConfigureAfter({MongoDataAutoConfiguration.class, MongoReactiveDataAutoConfiguration.class}) +@AutoConfiguration(after = {DataMongoAutoConfiguration.class, DataMongoReactiveAutoConfiguration.class}) @ConditionalOnProperty(value = MongrationProperties.ENABLED_PROPERTY, matchIfMissing = true) @Import({MongrationConfiguration.class, ReactiveMongrationConfiguration.class}) public class MongrationAutoConfiguration { diff --git a/src/main/java/com/kuliginstepan/mongration/service/impl/IndexCreatorImpl.java b/src/main/java/com/kuliginstepan/mongration/service/impl/IndexCreatorImpl.java index c7a07dd..2bd7336 100644 --- a/src/main/java/com/kuliginstepan/mongration/service/impl/IndexCreatorImpl.java +++ b/src/main/java/com/kuliginstepan/mongration/service/impl/IndexCreatorImpl.java @@ -35,14 +35,14 @@ public Mono createIndexes(Class type) { @Override public Mono createIndexes(Class type, String collection) { return Flux.fromIterable(indexResolver.resolveIndexFor(type)) - .map(index -> indexOperationsProvider.indexOps(collection).ensureIndex(index)) + .map(index -> indexOperationsProvider.indexOps(collection).createIndex(index)) .then(); } @Override public Mono createIndexes(List definitions, String collection) { return Flux.fromIterable(definitions) - .map(index -> indexOperationsProvider.indexOps(collection).ensureIndex(index)) + .map(index -> indexOperationsProvider.indexOps(collection).createIndex(index)) .then(); } diff --git a/src/main/java/com/kuliginstepan/mongration/service/impl/ReactiveIndexCreatorImpl.java b/src/main/java/com/kuliginstepan/mongration/service/impl/ReactiveIndexCreatorImpl.java index 0bff99f..49fab9b 100644 --- a/src/main/java/com/kuliginstepan/mongration/service/impl/ReactiveIndexCreatorImpl.java +++ b/src/main/java/com/kuliginstepan/mongration/service/impl/ReactiveIndexCreatorImpl.java @@ -36,14 +36,14 @@ public Mono createIndexes(Class type) { @Override public Mono createIndexes(Class type, String collection) { return Flux.fromIterable(indexResolver.resolveIndexFor(type)) - .flatMap(index -> indexOperationsProvider.indexOps(collection).ensureIndex(index)) + .flatMap(index -> indexOperationsProvider.indexOps(collection).createIndex(index)) .then(); } @Override public Mono createIndexes(List definitions, String collection) { return Flux.fromIterable(definitions) - .flatMap(index -> indexOperationsProvider.indexOps(collection).ensureIndex(index)) + .flatMap(index -> indexOperationsProvider.indexOps(collection).createIndex(index)) .then(); } diff --git a/src/test/java/com/kuliginstepan/mongration/MongoIntegrationTest.java b/src/test/java/com/kuliginstepan/mongration/MongoIntegrationTest.java index 9bb19a8..cb7ff86 100644 --- a/src/test/java/com/kuliginstepan/mongration/MongoIntegrationTest.java +++ b/src/test/java/com/kuliginstepan/mongration/MongoIntegrationTest.java @@ -6,7 +6,7 @@ import org.springframework.context.ConfigurableApplicationContext; import org.springframework.test.context.DynamicPropertyRegistry; import org.springframework.test.context.DynamicPropertySource; -import org.testcontainers.containers.MongoDBContainer; +import org.testcontainers.mongodb.MongoDBContainer; import org.testcontainers.junit.jupiter.Container; import org.testcontainers.junit.jupiter.Testcontainers; @@ -19,14 +19,14 @@ public class MongoIntegrationTest { @DynamicPropertySource static void mongoProperties(DynamicPropertyRegistry registry) { - registry.add("spring.data.mongodb.uri", MONGO::getReplicaSetUrl); + registry.add("spring.mongodb.uri", MONGO::getReplicaSetUrl); } public static class Initializer implements ApplicationContextInitializer { public void initialize(ConfigurableApplicationContext configurableApplicationContext) { - TestPropertyValues.of("spring.data.mongodb.uri=" + MONGO.getReplicaSetUrl()) + TestPropertyValues.of("spring.mongodb.uri=" + MONGO.getReplicaSetUrl()) .applyTo(configurableApplicationContext.getEnvironment()); } } diff --git a/src/test/java/com/kuliginstepan/mongration/MongrationTest.java b/src/test/java/com/kuliginstepan/mongration/MongrationTest.java index 586a942..01f74b1 100644 --- a/src/test/java/com/kuliginstepan/mongration/MongrationTest.java +++ b/src/test/java/com/kuliginstepan/mongration/MongrationTest.java @@ -15,7 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; -import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest; +import org.springframework.boot.data.mongodb.test.autoconfigure.DataMongoTest; import org.springframework.context.annotation.Import; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.MongoTemplate; diff --git a/src/test/java/com/kuliginstepan/mongration/NewIndexMongrationTest.java b/src/test/java/com/kuliginstepan/mongration/NewIndexMongrationTest.java index 3ac6818..f6ede28 100644 --- a/src/test/java/com/kuliginstepan/mongration/NewIndexMongrationTest.java +++ b/src/test/java/com/kuliginstepan/mongration/NewIndexMongrationTest.java @@ -16,9 +16,9 @@ import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; -import org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration; -import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration; -import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest; +import org.springframework.boot.data.mongodb.autoconfigure.DataMongoAutoConfiguration; +import org.springframework.boot.mongodb.autoconfigure.MongoAutoConfiguration; +import org.springframework.boot.data.mongodb.test.autoconfigure.DataMongoTest; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.context.annotation.Import; import org.springframework.data.annotation.Id; @@ -69,7 +69,7 @@ public static class TestDocument { static void setUp() { new ApplicationContextRunner() .withInitializer(new Initializer()) - .withConfiguration(AutoConfigurations.of(MongoAutoConfiguration.class, MongoDataAutoConfiguration.class)) + .withConfiguration(AutoConfigurations.of(MongoAutoConfiguration.class, DataMongoAutoConfiguration.class)) .withPropertyValues("spring.data.mongodb.auto-index-creation=false") .run(context -> { MongoTemplate template = context.getBean(MongoTemplate.class); diff --git a/src/test/java/com/kuliginstepan/mongration/NewIndexReactiveMongrationTest.java b/src/test/java/com/kuliginstepan/mongration/NewIndexReactiveMongrationTest.java index 1524d71..9b3bc49 100644 --- a/src/test/java/com/kuliginstepan/mongration/NewIndexReactiveMongrationTest.java +++ b/src/test/java/com/kuliginstepan/mongration/NewIndexReactiveMongrationTest.java @@ -16,9 +16,9 @@ import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; -import org.springframework.boot.autoconfigure.data.mongo.MongoReactiveDataAutoConfiguration; -import org.springframework.boot.autoconfigure.mongo.MongoReactiveAutoConfiguration; -import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest; +import org.springframework.boot.data.mongodb.autoconfigure.DataMongoReactiveAutoConfiguration; +import org.springframework.boot.mongodb.autoconfigure.MongoReactiveAutoConfiguration; +import org.springframework.boot.data.mongodb.test.autoconfigure.DataMongoTest; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.context.annotation.Import; import org.springframework.data.annotation.Id; @@ -72,7 +72,7 @@ static void setUp() { new ApplicationContextRunner() .withInitializer(new Initializer()) .withConfiguration( - AutoConfigurations.of(MongoReactiveAutoConfiguration.class, MongoReactiveDataAutoConfiguration.class)) + AutoConfigurations.of(MongoReactiveAutoConfiguration.class, DataMongoReactiveAutoConfiguration.class)) .withPropertyValues("spring.data.mongodb.auto-index-creation=false") .run(context -> { ReactiveMongoTemplate template = context.getBean(ReactiveMongoTemplate.class); diff --git a/src/test/java/com/kuliginstepan/mongration/ReactiveMongrationTest.java b/src/test/java/com/kuliginstepan/mongration/ReactiveMongrationTest.java index d47679a..657be12 100644 --- a/src/test/java/com/kuliginstepan/mongration/ReactiveMongrationTest.java +++ b/src/test/java/com/kuliginstepan/mongration/ReactiveMongrationTest.java @@ -17,7 +17,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; -import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest; +import org.springframework.boot.data.mongodb.test.autoconfigure.DataMongoTest; import org.springframework.context.annotation.Import; import org.springframework.core.annotation.Order; import org.springframework.data.annotation.Id; diff --git a/src/test/java/com/kuliginstepan/mongration/ReactiveTransactionalMongrationTest.java b/src/test/java/com/kuliginstepan/mongration/ReactiveTransactionalMongrationTest.java index 8f8a321..80db1ef 100644 --- a/src/test/java/com/kuliginstepan/mongration/ReactiveTransactionalMongrationTest.java +++ b/src/test/java/com/kuliginstepan/mongration/ReactiveTransactionalMongrationTest.java @@ -14,12 +14,12 @@ import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; -import org.springframework.boot.autoconfigure.data.mongo.MongoReactiveDataAutoConfiguration; -import org.springframework.boot.autoconfigure.mongo.MongoReactiveAutoConfiguration; -import org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration; -import org.springframework.boot.autoconfigure.web.reactive.HttpHandlerAutoConfiguration; -import org.springframework.boot.autoconfigure.web.reactive.ReactiveWebServerFactoryAutoConfiguration; -import org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration; +import org.springframework.boot.data.mongodb.autoconfigure.DataMongoReactiveAutoConfiguration; +import org.springframework.boot.mongodb.autoconfigure.MongoReactiveAutoConfiguration; +import org.springframework.boot.transaction.autoconfigure.TransactionAutoConfiguration; +import org.springframework.boot.webflux.autoconfigure.HttpHandlerAutoConfiguration; +import org.springframework.boot.reactor.netty.autoconfigure.NettyReactiveWebServerAutoConfiguration; +import org.springframework.boot.webflux.autoconfigure.WebFluxAutoConfiguration; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.context.annotation.Bean; @@ -35,10 +35,10 @@ @ImportAutoConfiguration({ TransactionAutoConfiguration.class, MongoReactiveAutoConfiguration.class, - MongoReactiveDataAutoConfiguration.class, + DataMongoReactiveAutoConfiguration.class, PropertyPlaceholderAutoConfiguration.class, MongrationAutoConfiguration.class, - ReactiveWebServerFactoryAutoConfiguration.class, + NettyReactiveWebServerAutoConfiguration.class, HttpHandlerAutoConfiguration.class, WebFluxAutoConfiguration.class }) @@ -62,7 +62,7 @@ void shouldRollbackTransactionalChangeSet() { new ApplicationContextRunner() .withInitializer(new Initializer()) .withConfiguration( - AutoConfigurations.of(MongoReactiveAutoConfiguration.class, MongoReactiveDataAutoConfiguration.class)) + AutoConfigurations.of(MongoReactiveAutoConfiguration.class, DataMongoReactiveAutoConfiguration.class)) .run(context -> { ReactiveMongoTemplate template = context.getBean(ReactiveMongoTemplate.class); assertThat(template.findAll(Document.class, "test").collectList().block().size()).isEqualTo(0); @@ -76,7 +76,7 @@ void tearDown() { new ApplicationContextRunner() .withInitializer(new Initializer()) .withConfiguration( - AutoConfigurations.of(MongoReactiveAutoConfiguration.class, MongoReactiveDataAutoConfiguration.class)) + AutoConfigurations.of(MongoReactiveAutoConfiguration.class, DataMongoReactiveAutoConfiguration.class)) .run(context -> { ReactiveMongoTemplate template = context.getBean(ReactiveMongoTemplate.class); template.dropCollection("test").block(); diff --git a/src/test/java/com/kuliginstepan/mongration/TransactionalMongrationTest.java b/src/test/java/com/kuliginstepan/mongration/TransactionalMongrationTest.java index cf55b82..dccdc36 100644 --- a/src/test/java/com/kuliginstepan/mongration/TransactionalMongrationTest.java +++ b/src/test/java/com/kuliginstepan/mongration/TransactionalMongrationTest.java @@ -14,12 +14,12 @@ import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; -import org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration; -import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration; -import org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration; -import org.springframework.boot.autoconfigure.web.reactive.HttpHandlerAutoConfiguration; -import org.springframework.boot.autoconfigure.web.reactive.ReactiveWebServerFactoryAutoConfiguration; -import org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration; +import org.springframework.boot.data.mongodb.autoconfigure.DataMongoAutoConfiguration; +import org.springframework.boot.mongodb.autoconfigure.MongoAutoConfiguration; +import org.springframework.boot.transaction.autoconfigure.TransactionAutoConfiguration; +import org.springframework.boot.webflux.autoconfigure.HttpHandlerAutoConfiguration; +import org.springframework.boot.reactor.netty.autoconfigure.NettyReactiveWebServerAutoConfiguration; +import org.springframework.boot.webflux.autoconfigure.WebFluxAutoConfiguration; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.context.annotation.Bean; @@ -33,10 +33,10 @@ @ImportAutoConfiguration({ TransactionAutoConfiguration.class, MongoAutoConfiguration.class, - MongoDataAutoConfiguration.class, + DataMongoAutoConfiguration.class, PropertyPlaceholderAutoConfiguration.class, MongrationAutoConfiguration.class, - ReactiveWebServerFactoryAutoConfiguration.class, + NettyReactiveWebServerAutoConfiguration.class, HttpHandlerAutoConfiguration.class, WebFluxAutoConfiguration.class }) @@ -87,7 +87,7 @@ void shouldRollbackTransactionalChangeSet() { }); new ApplicationContextRunner() .withInitializer(new Initializer()) - .withConfiguration(AutoConfigurations.of(MongoAutoConfiguration.class, MongoDataAutoConfiguration.class)) + .withConfiguration(AutoConfigurations.of(MongoAutoConfiguration.class, DataMongoAutoConfiguration.class)) .run(context -> { MongoTemplate template = context.getBean(MongoTemplate.class); assertThat(template.findAll(Document.class, "test").size()).isEqualTo(0); @@ -99,7 +99,7 @@ void shouldRollbackTransactionalChangeSet() { void tearDown() { new ApplicationContextRunner() .withInitializer(new Initializer()) - .withConfiguration(AutoConfigurations.of(MongoAutoConfiguration.class, MongoDataAutoConfiguration.class)) + .withConfiguration(AutoConfigurations.of(MongoAutoConfiguration.class, DataMongoAutoConfiguration.class)) .run(context -> { MongoTemplate template = context.getBean(MongoTemplate.class); template.dropCollection("test"); diff --git a/src/test/java/com/kuliginstepan/mongration/concurrent/ConcurrentMongrationTest.java b/src/test/java/com/kuliginstepan/mongration/concurrent/ConcurrentMongrationTest.java index 6cb97ed..fbc62c0 100644 --- a/src/test/java/com/kuliginstepan/mongration/concurrent/ConcurrentMongrationTest.java +++ b/src/test/java/com/kuliginstepan/mongration/concurrent/ConcurrentMongrationTest.java @@ -29,7 +29,7 @@ import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest; +import org.springframework.boot.data.mongodb.test.autoconfigure.DataMongoTest; import org.springframework.boot.test.context.TestConfiguration; import org.springframework.context.ApplicationContext; import org.springframework.context.ConfigurableApplicationContext; @@ -138,8 +138,10 @@ void shouldGuardMongrationProcessWithLock() { private Mono> runNode(String node) { log.info("Starting app node: {}", node); + // Spring Boot's TestTypeExcludeFilter now applies to every SpringApplication started from a test + // classpath and filters out components nested in test classes, so they are registered explicitly return Mono.fromCallable(() -> - new SpringApplicationBuilder(HighlyScaledApp.class) + new SpringApplicationBuilder(HighlyScaledApp.class, SpyingReactiveMongration.class, TestChangeLog.class) .initializers(new Initializer()) .properties( "mongration.mode=reactive", diff --git a/src/test/java/com/kuliginstepan/mongration/service/impl/ChangesetServiceIntegrationTest.java b/src/test/java/com/kuliginstepan/mongration/service/impl/ChangesetServiceIntegrationTest.java index eb3e85f..02d0e5f 100644 --- a/src/test/java/com/kuliginstepan/mongration/service/impl/ChangesetServiceIntegrationTest.java +++ b/src/test/java/com/kuliginstepan/mongration/service/impl/ChangesetServiceIntegrationTest.java @@ -15,7 +15,7 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest; +import org.springframework.boot.data.mongodb.test.autoconfigure.DataMongoTest; import org.springframework.boot.test.context.TestConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Import; diff --git a/src/test/java/com/kuliginstepan/mongration/service/impl/IndexCreatorImplTest.java b/src/test/java/com/kuliginstepan/mongration/service/impl/IndexCreatorImplTest.java index 2cdc990..9665f56 100644 --- a/src/test/java/com/kuliginstepan/mongration/service/impl/IndexCreatorImplTest.java +++ b/src/test/java/com/kuliginstepan/mongration/service/impl/IndexCreatorImplTest.java @@ -18,8 +18,8 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.autoconfigure.domain.EntityScan; -import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest; +import org.springframework.boot.persistence.autoconfigure.EntityScan; +import org.springframework.boot.data.mongodb.test.autoconfigure.DataMongoTest; import org.springframework.boot.test.context.TestConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Import; diff --git a/src/test/java/com/kuliginstepan/mongration/service/impl/LockServiceTest.java b/src/test/java/com/kuliginstepan/mongration/service/impl/LockServiceTest.java index c395f0d..f44e5a5 100644 --- a/src/test/java/com/kuliginstepan/mongration/service/impl/LockServiceTest.java +++ b/src/test/java/com/kuliginstepan/mongration/service/impl/LockServiceTest.java @@ -17,8 +17,8 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest; -import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.boot.data.mongodb.test.autoconfigure.DataMongoTest; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Query; import org.springframework.test.context.junit.jupiter.SpringExtension; @@ -30,7 +30,7 @@ class LockServiceTest extends MongoIntegrationTest { private static final String COLLECTION_NAME = "test_collection"; - @SpyBean + @MockitoSpyBean private MongoTemplate template; private LockService service; diff --git a/src/test/java/com/kuliginstepan/mongration/service/impl/ReactiveChangesetServiceIntegrationTest.java b/src/test/java/com/kuliginstepan/mongration/service/impl/ReactiveChangesetServiceIntegrationTest.java index a3618ec..6809caf 100644 --- a/src/test/java/com/kuliginstepan/mongration/service/impl/ReactiveChangesetServiceIntegrationTest.java +++ b/src/test/java/com/kuliginstepan/mongration/service/impl/ReactiveChangesetServiceIntegrationTest.java @@ -15,7 +15,7 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest; +import org.springframework.boot.data.mongodb.test.autoconfigure.DataMongoTest; import org.springframework.boot.test.context.TestConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Import; diff --git a/src/test/java/com/kuliginstepan/mongration/service/impl/ReactiveIndexCreatorImplTest.java b/src/test/java/com/kuliginstepan/mongration/service/impl/ReactiveIndexCreatorImplTest.java index 0480bf3..9456d31 100644 --- a/src/test/java/com/kuliginstepan/mongration/service/impl/ReactiveIndexCreatorImplTest.java +++ b/src/test/java/com/kuliginstepan/mongration/service/impl/ReactiveIndexCreatorImplTest.java @@ -16,8 +16,8 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.autoconfigure.domain.EntityScan; -import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest; +import org.springframework.boot.persistence.autoconfigure.EntityScan; +import org.springframework.boot.data.mongodb.test.autoconfigure.DataMongoTest; import org.springframework.boot.test.context.TestConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Import; diff --git a/src/test/java/com/kuliginstepan/mongration/service/impl/ReactiveLockServiceTest.java b/src/test/java/com/kuliginstepan/mongration/service/impl/ReactiveLockServiceTest.java index 36e82ac..d501792 100644 --- a/src/test/java/com/kuliginstepan/mongration/service/impl/ReactiveLockServiceTest.java +++ b/src/test/java/com/kuliginstepan/mongration/service/impl/ReactiveLockServiceTest.java @@ -17,8 +17,8 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest; -import org.springframework.boot.test.mock.mockito.SpyBean; +import org.springframework.boot.data.mongodb.test.autoconfigure.DataMongoTest; +import org.springframework.test.context.bean.override.mockito.MockitoSpyBean; import org.springframework.data.mongodb.core.ReactiveMongoTemplate; import org.springframework.data.mongodb.core.query.Query; import org.springframework.test.context.junit.jupiter.SpringExtension; @@ -31,7 +31,7 @@ class ReactiveLockServiceTest extends MongoIntegrationTest { private static final String COLLECTION_NAME = "test_collection"; - @SpyBean + @MockitoSpyBean private ReactiveMongoTemplate template; private LockService service;