diff --git a/spring-session-samples/spring-session-sample-boot-mongodb-reactive/spring-session-sample-boot-mongodb-reactive.gradle b/spring-session-samples/spring-session-sample-boot-mongodb-reactive/spring-session-sample-boot-mongodb-reactive.gradle index cfca69a5..7cf2b428 100644 --- a/spring-session-samples/spring-session-sample-boot-mongodb-reactive/spring-session-sample-boot-mongodb-reactive.gradle +++ b/spring-session-samples/spring-session-sample-boot-mongodb-reactive/spring-session-sample-boot-mongodb-reactive.gradle @@ -1,11 +1,12 @@ apply plugin: 'io.spring.convention.spring-sample-boot' dependencies { - implementation project(':spring-session-data-mongodb') - implementation "org.springframework.boot:spring-boot-starter-webflux" - implementation "org.springframework.boot:spring-boot-starter-thymeleaf" - implementation "org.springframework.boot:spring-boot-starter-data-mongodb-reactive" - implementation "org.testcontainers:mongodb" + implementation project(':spring-session-data-mongodb') + implementation "org.springframework.boot:spring-boot-starter-webflux" + implementation "org.springframework.boot:spring-boot-starter-thymeleaf" + implementation "org.springframework.boot:spring-boot-starter-data-mongodb-reactive" + implementation "org.springframework.boot:spring-boot-testcontainers" + implementation "org.testcontainers:mongodb" testImplementation "org.springframework.boot:spring-boot-starter-test" testImplementation "org.seleniumhq.selenium:htmlunit-driver" diff --git a/spring-session-samples/spring-session-sample-boot-mongodb-reactive/src/main/java/org/springframework/session/mongodb/examples/MongoDbConfig.java b/spring-session-samples/spring-session-sample-boot-mongodb-reactive/src/main/java/org/springframework/session/mongodb/examples/MongoDbConfig.java new file mode 100644 index 00000000..14bab6d1 --- /dev/null +++ b/spring-session-samples/spring-session-sample-boot-mongodb-reactive/src/main/java/org/springframework/session/mongodb/examples/MongoDbConfig.java @@ -0,0 +1,37 @@ +/* + * Copyright 2023 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.session.mongodb.examples; + +import org.testcontainers.containers.MongoDBContainer; + +import org.springframework.boot.testcontainers.service.connection.ServiceConnection; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @author Yanming Zhou + */ +@Configuration(proxyBeanMethods = false) +public class MongoDbConfig { + + @Bean + @ServiceConnection + MongoDBContainer mongoDbContainer() { + return new MongoDBContainer("mongo:5.0.11"); + } + +} diff --git a/spring-session-samples/spring-session-sample-boot-mongodb-reactive/src/main/java/org/springframework/session/mongodb/examples/SpringSessionMongoReactiveApplication.java b/spring-session-samples/spring-session-sample-boot-mongodb-reactive/src/main/java/org/springframework/session/mongodb/examples/SpringSessionMongoReactiveApplication.java index f1c55a26..fb8fca91 100644 --- a/spring-session-samples/spring-session-sample-boot-mongodb-reactive/src/main/java/org/springframework/session/mongodb/examples/SpringSessionMongoReactiveApplication.java +++ b/spring-session-samples/spring-session-sample-boot-mongodb-reactive/src/main/java/org/springframework/session/mongodb/examples/SpringSessionMongoReactiveApplication.java @@ -16,17 +16,8 @@ package org.springframework.session.mongodb.examples; -import java.util.HashMap; -import java.util.Map; - -import org.testcontainers.containers.MongoDBContainer; - import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.context.ApplicationContextInitializer; -import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.core.env.ConfigurableEnvironment; -import org.springframework.core.env.MapPropertySource; import org.springframework.session.data.mongo.config.annotation.web.reactive.EnableMongoWebSession; /** @@ -35,44 +26,14 @@ import org.springframework.session.data.mongo.config.annotation.web.reactive.Ena * * @author Rob Winch * @author Greg Turnquist + * @author Yanming Zhou */ @SpringBootApplication @EnableMongoWebSession public class SpringSessionMongoReactiveApplication { public static void main(String[] args) { - SpringApplication application = new SpringApplication(SpringSessionMongoReactiveApplication.class); - application.addInitializers(new Initializer()); - application.run(args); - } - - /** - * Use Testcontainers to managed MongoDB through Docker. - *

- * - * @see Local - * Development with Testcontainers - */ - static class Initializer implements ApplicationContextInitializer { - - static MongoDBContainer mongo = new MongoDBContainer("mongo:5.0.11"); - - private static Map getProperties() { - mongo.start(); - - HashMap properties = new HashMap<>(); - properties.put("spring.data.mongodb.host", mongo.getHost()); - properties.put("spring.data.mongodb.port", mongo.getFirstMappedPort() + ""); - return properties; - } - - @Override - public void initialize(ConfigurableApplicationContext context) { - ConfigurableEnvironment env = context.getEnvironment(); - env.getPropertySources().addFirst(new MapPropertySource("testcontainers", (Map) getProperties())); - } - + SpringApplication.run(SpringSessionMongoReactiveApplication.class, args); } } diff --git a/spring-session-samples/spring-session-sample-boot-mongodb-reactive/src/test/java/org/springframework/session/mongodb/examples/AttributeTests.java b/spring-session-samples/spring-session-sample-boot-mongodb-reactive/src/test/java/org/springframework/session/mongodb/examples/AttributeTests.java index 00468e15..b5aed7dc 100644 --- a/spring-session-samples/spring-session-sample-boot-mongodb-reactive/src/test/java/org/springframework/session/mongodb/examples/AttributeTests.java +++ b/spring-session-samples/spring-session-sample-boot-mongodb-reactive/src/test/java/org/springframework/session/mongodb/examples/AttributeTests.java @@ -21,7 +21,6 @@ import java.util.List; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; import org.openqa.selenium.WebDriver; import org.openqa.selenium.htmlunit.HtmlUnitDriver; @@ -29,18 +28,15 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.web.server.LocalServerPort; import org.springframework.session.mongodb.examples.pages.HomePage; import org.springframework.session.mongodb.examples.pages.HomePage.Attribute; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit.jupiter.SpringExtension; import static org.assertj.core.api.Assertions.assertThat; /** * @author EddĂș MelĂ©ndez * @author Rob Winch + * @author Yanming Zhou */ -@ExtendWith(SpringExtension.class) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) -@ContextConfiguration(initializers = SpringSessionMongoReactiveApplication.Initializer.class) public class AttributeTests { @LocalServerPort diff --git a/spring-session-samples/spring-session-sample-boot-mongodb-traditional/spring-session-sample-boot-mongodb-traditional.gradle b/spring-session-samples/spring-session-sample-boot-mongodb-traditional/spring-session-sample-boot-mongodb-traditional.gradle index d9ea2e90..5e91bbcd 100644 --- a/spring-session-samples/spring-session-sample-boot-mongodb-traditional/spring-session-sample-boot-mongodb-traditional.gradle +++ b/spring-session-samples/spring-session-sample-boot-mongodb-traditional/spring-session-sample-boot-mongodb-traditional.gradle @@ -1,13 +1,14 @@ apply plugin: 'io.spring.convention.spring-sample-boot' dependencies { - implementation project(':spring-session-data-mongodb') - implementation "org.springframework.boot:spring-boot-starter-web" - implementation "org.springframework.boot:spring-boot-starter-thymeleaf" - implementation "nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect" - implementation "org.thymeleaf.extras:thymeleaf-extras-springsecurity6" + implementation project(':spring-session-data-mongodb') + implementation "org.springframework.boot:spring-boot-starter-web" + implementation "org.springframework.boot:spring-boot-starter-thymeleaf" + implementation "nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect" + implementation "org.thymeleaf.extras:thymeleaf-extras-springsecurity6" implementation "org.springframework.boot:spring-boot-starter-data-mongodb" implementation "org.springframework.boot:spring-boot-starter-security" + implementation "org.springframework.boot:spring-boot-testcontainers" implementation "org.testcontainers:mongodb" diff --git a/spring-session-samples/spring-session-sample-boot-mongodb-traditional/src/main/java/org/springframework/session/mongodb/examples/SpringSessionMongoTraditionalBoot.java b/spring-session-samples/spring-session-sample-boot-mongodb-traditional/src/main/java/org/springframework/session/mongodb/examples/SpringSessionMongoTraditionalBoot.java index a63334dd..686c9746 100644 --- a/spring-session-samples/spring-session-sample-boot-mongodb-traditional/src/main/java/org/springframework/session/mongodb/examples/SpringSessionMongoTraditionalBoot.java +++ b/spring-session-samples/spring-session-sample-boot-mongodb-traditional/src/main/java/org/springframework/session/mongodb/examples/SpringSessionMongoTraditionalBoot.java @@ -16,57 +16,18 @@ package org.springframework.session.mongodb.examples; -import java.util.HashMap; -import java.util.Map; - -import org.testcontainers.containers.MongoDBContainer; - import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.context.ApplicationContextInitializer; -import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.core.env.ConfigurableEnvironment; -import org.springframework.core.env.MapPropertySource; /** * @author Rob Winch + * @author Yanming Zhou */ @SpringBootApplication public class SpringSessionMongoTraditionalBoot { public static void main(String[] args) { - SpringApplication application = new SpringApplication(SpringSessionMongoTraditionalBoot.class); - application.addInitializers(new Initializer()); - application.run(args); - } - - /** - * Use Testcontainers to managed MongoDB through Docker. - *

- * - * @see Local - * Developmenet with Testcontainers - */ - static class Initializer implements ApplicationContextInitializer { - - static MongoDBContainer mongo = new MongoDBContainer("mongo:5.0.11"); - - private static Map getProperties() { - mongo.start(); - - HashMap properties = new HashMap<>(); - properties.put("spring.data.mongodb.host", mongo.getHost()); - properties.put("spring.data.mongodb.port", mongo.getFirstMappedPort() + ""); - return properties; - } - - @Override - public void initialize(ConfigurableApplicationContext context) { - ConfigurableEnvironment env = context.getEnvironment(); - env.getPropertySources().addFirst(new MapPropertySource("testcontainers", (Map) getProperties())); - } - + SpringApplication.run(SpringSessionMongoTraditionalBoot.class, args); } } diff --git a/spring-session-samples/spring-session-sample-boot-mongodb-traditional/src/main/java/org/springframework/session/mongodb/examples/config/MongoDbConfig.java b/spring-session-samples/spring-session-sample-boot-mongodb-traditional/src/main/java/org/springframework/session/mongodb/examples/config/MongoDbConfig.java new file mode 100644 index 00000000..67330bfd --- /dev/null +++ b/spring-session-samples/spring-session-sample-boot-mongodb-traditional/src/main/java/org/springframework/session/mongodb/examples/config/MongoDbConfig.java @@ -0,0 +1,37 @@ +/* + * Copyright 2023 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.session.mongodb.examples.config; + +import org.testcontainers.containers.MongoDBContainer; + +import org.springframework.boot.testcontainers.service.connection.ServiceConnection; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @author Yanming Zhou + */ +@Configuration(proxyBeanMethods = false) +public class MongoDbConfig { + + @Bean + @ServiceConnection + MongoDBContainer mongoDbContainer() { + return new MongoDBContainer("mongo:5.0.11"); + } + +} diff --git a/spring-session-samples/spring-session-sample-boot-mongodb-traditional/src/test/java/org/springframework/session/mongodb/examples/BootTests.java b/spring-session-samples/spring-session-sample-boot-mongodb-traditional/src/test/java/org/springframework/session/mongodb/examples/BootTests.java index c91e193b..c208098a 100644 --- a/spring-session-samples/spring-session-sample-boot-mongodb-traditional/src/test/java/org/springframework/session/mongodb/examples/BootTests.java +++ b/spring-session-samples/spring-session-sample-boot-mongodb-traditional/src/test/java/org/springframework/session/mongodb/examples/BootTests.java @@ -21,7 +21,6 @@ import java.util.Set; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; import org.openqa.selenium.By; import org.openqa.selenium.Cookie; import org.openqa.selenium.WebDriver; @@ -30,11 +29,8 @@ import org.openqa.selenium.WebElement; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; import org.springframework.session.mongodb.examples.pages.HomePage; import org.springframework.session.mongodb.examples.pages.LoginPage; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.htmlunit.webdriver.MockMvcHtmlUnitDriverBuilder; @@ -42,11 +38,10 @@ import static org.assertj.core.api.Assertions.assertThat; /** * @author Pool Dolorier + * @author Yanming Zhou */ -@ExtendWith(SpringExtension.class) @AutoConfigureMockMvc -@SpringBootTest(webEnvironment = WebEnvironment.MOCK) -@ContextConfiguration(initializers = SpringSessionMongoTraditionalBoot.Initializer.class) +@SpringBootTest public class BootTests { @Autowired