Skip to content

Commit b1a1b62

Browse files
quaffmarcusdacoregio
authored andcommitted
Use spring-boot's @Serviceconnection
1 parent 741a292 commit b1a1b62

File tree

8 files changed

+93
-104
lines changed

8 files changed

+93
-104
lines changed

spring-session-samples/spring-session-sample-boot-mongodb-reactive/spring-session-sample-boot-mongodb-reactive.gradle

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
apply plugin: 'io.spring.convention.spring-sample-boot'
22

33
dependencies {
4-
implementation project(':spring-session-data-mongodb')
5-
implementation "org.springframework.boot:spring-boot-starter-webflux"
6-
implementation "org.springframework.boot:spring-boot-starter-thymeleaf"
7-
implementation "org.springframework.boot:spring-boot-starter-data-mongodb-reactive"
8-
implementation "org.testcontainers:mongodb"
4+
implementation project(':spring-session-data-mongodb')
5+
implementation "org.springframework.boot:spring-boot-starter-webflux"
6+
implementation "org.springframework.boot:spring-boot-starter-thymeleaf"
7+
implementation "org.springframework.boot:spring-boot-starter-data-mongodb-reactive"
8+
implementation "org.springframework.boot:spring-boot-testcontainers"
9+
implementation "org.testcontainers:mongodb"
910

1011
testImplementation "org.springframework.boot:spring-boot-starter-test"
1112
testImplementation "org.seleniumhq.selenium:htmlunit-driver"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/*
2+
* Copyright 2023 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.springframework.session.mongodb.examples;
18+
19+
import org.testcontainers.containers.MongoDBContainer;
20+
21+
import org.springframework.boot.testcontainers.service.connection.ServiceConnection;
22+
import org.springframework.context.annotation.Bean;
23+
import org.springframework.context.annotation.Configuration;
24+
25+
/**
26+
* @author Yanming Zhou
27+
*/
28+
@Configuration(proxyBeanMethods = false)
29+
public class MongoDbConfig {
30+
31+
@Bean
32+
@ServiceConnection
33+
MongoDBContainer mongoDbContainer() {
34+
return new MongoDBContainer("mongo:5.0.11");
35+
}
36+
37+
}

spring-session-samples/spring-session-sample-boot-mongodb-reactive/src/main/java/org/springframework/session/mongodb/examples/SpringSessionMongoReactiveApplication.java

Lines changed: 2 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,8 @@
1616

1717
package org.springframework.session.mongodb.examples;
1818

19-
import java.util.HashMap;
20-
import java.util.Map;
21-
22-
import org.testcontainers.containers.MongoDBContainer;
23-
2419
import org.springframework.boot.SpringApplication;
2520
import org.springframework.boot.autoconfigure.SpringBootApplication;
26-
import org.springframework.context.ApplicationContextInitializer;
27-
import org.springframework.context.ConfigurableApplicationContext;
28-
import org.springframework.core.env.ConfigurableEnvironment;
29-
import org.springframework.core.env.MapPropertySource;
3021
import org.springframework.session.data.mongo.config.annotation.web.reactive.EnableMongoWebSession;
3122

3223
/**
@@ -35,44 +26,14 @@
3526
*
3627
* @author Rob Winch
3728
* @author Greg Turnquist
29+
* @author Yanming Zhou
3830
*/
3931
@SpringBootApplication
4032
@EnableMongoWebSession
4133
public class SpringSessionMongoReactiveApplication {
4234

4335
public static void main(String[] args) {
44-
SpringApplication application = new SpringApplication(SpringSessionMongoReactiveApplication.class);
45-
application.addInitializers(new Initializer());
46-
application.run(args);
47-
}
48-
49-
/**
50-
* Use Testcontainers to managed MongoDB through Docker.
51-
* <p>
52-
*
53-
* @see <a href=
54-
* "https://bsideup.github.io/posts/local_development_with_testcontainers/">Local
55-
* Development with Testcontainers</a>
56-
*/
57-
static class Initializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
58-
59-
static MongoDBContainer mongo = new MongoDBContainer("mongo:5.0.11");
60-
61-
private static Map<String, String> getProperties() {
62-
mongo.start();
63-
64-
HashMap<String, String> properties = new HashMap<>();
65-
properties.put("spring.data.mongodb.host", mongo.getHost());
66-
properties.put("spring.data.mongodb.port", mongo.getFirstMappedPort() + "");
67-
return properties;
68-
}
69-
70-
@Override
71-
public void initialize(ConfigurableApplicationContext context) {
72-
ConfigurableEnvironment env = context.getEnvironment();
73-
env.getPropertySources().addFirst(new MapPropertySource("testcontainers", (Map) getProperties()));
74-
}
75-
36+
SpringApplication.run(SpringSessionMongoReactiveApplication.class, args);
7637
}
7738

7839
}

spring-session-samples/spring-session-sample-boot-mongodb-reactive/src/test/java/org/springframework/session/mongodb/examples/AttributeTests.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,26 +21,22 @@
2121
import org.junit.jupiter.api.AfterEach;
2222
import org.junit.jupiter.api.BeforeEach;
2323
import org.junit.jupiter.api.Test;
24-
import org.junit.jupiter.api.extension.ExtendWith;
2524
import org.openqa.selenium.WebDriver;
2625
import org.openqa.selenium.htmlunit.HtmlUnitDriver;
2726

2827
import org.springframework.boot.test.context.SpringBootTest;
2928
import org.springframework.boot.test.web.server.LocalServerPort;
3029
import org.springframework.session.mongodb.examples.pages.HomePage;
3130
import org.springframework.session.mongodb.examples.pages.HomePage.Attribute;
32-
import org.springframework.test.context.ContextConfiguration;
33-
import org.springframework.test.context.junit.jupiter.SpringExtension;
3431

3532
import static org.assertj.core.api.Assertions.assertThat;
3633

3734
/**
3835
* @author Eddú Meléndez
3936
* @author Rob Winch
37+
* @author Yanming Zhou
4038
*/
41-
@ExtendWith(SpringExtension.class)
4239
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
43-
@ContextConfiguration(initializers = SpringSessionMongoReactiveApplication.Initializer.class)
4440
public class AttributeTests {
4541

4642
@LocalServerPort

spring-session-samples/spring-session-sample-boot-mongodb-traditional/spring-session-sample-boot-mongodb-traditional.gradle

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
apply plugin: 'io.spring.convention.spring-sample-boot'
22

33
dependencies {
4-
implementation project(':spring-session-data-mongodb')
5-
implementation "org.springframework.boot:spring-boot-starter-web"
6-
implementation "org.springframework.boot:spring-boot-starter-thymeleaf"
7-
implementation "nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect"
8-
implementation "org.thymeleaf.extras:thymeleaf-extras-springsecurity6"
4+
implementation project(':spring-session-data-mongodb')
5+
implementation "org.springframework.boot:spring-boot-starter-web"
6+
implementation "org.springframework.boot:spring-boot-starter-thymeleaf"
7+
implementation "nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect"
8+
implementation "org.thymeleaf.extras:thymeleaf-extras-springsecurity6"
99
implementation "org.springframework.boot:spring-boot-starter-data-mongodb"
1010
implementation "org.springframework.boot:spring-boot-starter-security"
11+
implementation "org.springframework.boot:spring-boot-testcontainers"
1112
implementation "org.testcontainers:mongodb"
1213

1314

spring-session-samples/spring-session-sample-boot-mongodb-traditional/src/main/java/org/springframework/session/mongodb/examples/SpringSessionMongoTraditionalBoot.java

Lines changed: 2 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -16,57 +16,18 @@
1616

1717
package org.springframework.session.mongodb.examples;
1818

19-
import java.util.HashMap;
20-
import java.util.Map;
21-
22-
import org.testcontainers.containers.MongoDBContainer;
23-
2419
import org.springframework.boot.SpringApplication;
2520
import org.springframework.boot.autoconfigure.SpringBootApplication;
26-
import org.springframework.context.ApplicationContextInitializer;
27-
import org.springframework.context.ConfigurableApplicationContext;
28-
import org.springframework.core.env.ConfigurableEnvironment;
29-
import org.springframework.core.env.MapPropertySource;
3021

3122
/**
3223
* @author Rob Winch
24+
* @author Yanming Zhou
3325
*/
3426
@SpringBootApplication
3527
public class SpringSessionMongoTraditionalBoot {
3628

3729
public static void main(String[] args) {
38-
SpringApplication application = new SpringApplication(SpringSessionMongoTraditionalBoot.class);
39-
application.addInitializers(new Initializer());
40-
application.run(args);
41-
}
42-
43-
/**
44-
* Use Testcontainers to managed MongoDB through Docker.
45-
* <p>
46-
*
47-
* @see <a href=
48-
* "https://bsideup.github.io/posts/local_development_with_testcontainers/">Local
49-
* Developmenet with Testcontainers</a>
50-
*/
51-
static class Initializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
52-
53-
static MongoDBContainer mongo = new MongoDBContainer("mongo:5.0.11");
54-
55-
private static Map<String, String> getProperties() {
56-
mongo.start();
57-
58-
HashMap<String, String> properties = new HashMap<>();
59-
properties.put("spring.data.mongodb.host", mongo.getHost());
60-
properties.put("spring.data.mongodb.port", mongo.getFirstMappedPort() + "");
61-
return properties;
62-
}
63-
64-
@Override
65-
public void initialize(ConfigurableApplicationContext context) {
66-
ConfigurableEnvironment env = context.getEnvironment();
67-
env.getPropertySources().addFirst(new MapPropertySource("testcontainers", (Map) getProperties()));
68-
}
69-
30+
SpringApplication.run(SpringSessionMongoTraditionalBoot.class, args);
7031
}
7132

7233
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/*
2+
* Copyright 2023 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.springframework.session.mongodb.examples.config;
18+
19+
import org.testcontainers.containers.MongoDBContainer;
20+
21+
import org.springframework.boot.testcontainers.service.connection.ServiceConnection;
22+
import org.springframework.context.annotation.Bean;
23+
import org.springframework.context.annotation.Configuration;
24+
25+
/**
26+
* @author Yanming Zhou
27+
*/
28+
@Configuration(proxyBeanMethods = false)
29+
public class MongoDbConfig {
30+
31+
@Bean
32+
@ServiceConnection
33+
MongoDBContainer mongoDbContainer() {
34+
return new MongoDBContainer("mongo:5.0.11");
35+
}
36+
37+
}

spring-session-samples/spring-session-sample-boot-mongodb-traditional/src/test/java/org/springframework/session/mongodb/examples/BootTests.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import org.junit.jupiter.api.AfterEach;
2222
import org.junit.jupiter.api.BeforeEach;
2323
import org.junit.jupiter.api.Test;
24-
import org.junit.jupiter.api.extension.ExtendWith;
2524
import org.openqa.selenium.By;
2625
import org.openqa.selenium.Cookie;
2726
import org.openqa.selenium.WebDriver;
@@ -30,23 +29,19 @@
3029
import org.springframework.beans.factory.annotation.Autowired;
3130
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
3231
import org.springframework.boot.test.context.SpringBootTest;
33-
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
3432
import org.springframework.session.mongodb.examples.pages.HomePage;
3533
import org.springframework.session.mongodb.examples.pages.LoginPage;
36-
import org.springframework.test.context.ContextConfiguration;
37-
import org.springframework.test.context.junit.jupiter.SpringExtension;
3834
import org.springframework.test.web.servlet.MockMvc;
3935
import org.springframework.test.web.servlet.htmlunit.webdriver.MockMvcHtmlUnitDriverBuilder;
4036

4137
import static org.assertj.core.api.Assertions.assertThat;
4238

4339
/**
4440
* @author Pool Dolorier
41+
* @author Yanming Zhou
4542
*/
46-
@ExtendWith(SpringExtension.class)
4743
@AutoConfigureMockMvc
48-
@SpringBootTest(webEnvironment = WebEnvironment.MOCK)
49-
@ContextConfiguration(initializers = SpringSessionMongoTraditionalBoot.Initializer.class)
44+
@SpringBootTest
5045
public class BootTests {
5146

5247
@Autowired

0 commit comments

Comments
 (0)