From 8561929164846ef4b3323a8b3f88a09ea1441785 Mon Sep 17 00:00:00 2001 From: Vedran Pavic Date: Tue, 19 Sep 2017 21:28:12 +0200 Subject: [PATCH 1/2] Improve Spring Session sample This commit improves the Spring Session sample by providing multiple build profiles that make it possible to easily try out different session stores. By default, JDBC session store backed by an in-memory embedded H2 database is used. See gh-10351 --- spring-boot-samples/README.adoc | 4 +- spring-boot-samples/pom.xml | 2 +- .../spring-boot-sample-session-redis/pom.xml | 50 ----------- .../spring-boot-sample-session/README.adoc | 48 ++++++++++ .../spring-boot-sample-session/pom.xml | 90 +++++++++++++++++++ .../sample/session}/HelloRestController.java | 2 +- .../session/SampleSessionApplication.java} | 6 +- .../src/main/resources/application.properties | 0 .../src/main/resources/hazelcast.xml | 20 +++++ .../SampleSessionApplicationTests.java} | 35 ++------ 10 files changed, 173 insertions(+), 84 deletions(-) delete mode 100644 spring-boot-samples/spring-boot-sample-session-redis/pom.xml create mode 100644 spring-boot-samples/spring-boot-sample-session/README.adoc create mode 100644 spring-boot-samples/spring-boot-sample-session/pom.xml rename spring-boot-samples/{spring-boot-sample-session-redis/src/main/java/sample/session/redis => spring-boot-sample-session/src/main/java/sample/session}/HelloRestController.java (95%) rename spring-boot-samples/{spring-boot-sample-session-redis/src/main/java/sample/session/redis/SampleSessionRedisApplication.java => spring-boot-sample-session/src/main/java/sample/session/SampleSessionApplication.java} (83%) rename spring-boot-samples/{spring-boot-sample-session-redis => spring-boot-sample-session}/src/main/resources/application.properties (100%) create mode 100644 spring-boot-samples/spring-boot-sample-session/src/main/resources/hazelcast.xml rename spring-boot-samples/{spring-boot-sample-session-redis/src/test/java/sample/session/redis/SampleSessionRedisApplicationTests.java => spring-boot-sample-session/src/test/java/sample/session/SampleSessionApplicationTests.java} (71%) diff --git a/spring-boot-samples/README.adoc b/spring-boot-samples/README.adoc index 7273c688af8..92c5c4d3f3e 100644 --- a/spring-boot-samples/README.adoc +++ b/spring-boot-samples/README.adoc @@ -158,8 +158,8 @@ The following sample applications are provided: | link:spring-boot-sample-servlet[spring-boot-sample-servlet] | Web application with a "raw" `Servlet` returning plain text content -| link:spring-boot-sample-session-redis[spring-boot-sample-session-redis] -| Web Application that uses Spring Session to store session data in Redis +| link:spring-boot-sample-session[spring-boot-sample-session] +| Web Application that uses Spring Session to manage session data | link:spring-boot-sample-simple[spring-boot-sample-simple] | Simple command line application diff --git a/spring-boot-samples/pom.xml b/spring-boot-samples/pom.xml index 78dfbb838e1..366ad6e29ea 100644 --- a/spring-boot-samples/pom.xml +++ b/spring-boot-samples/pom.xml @@ -71,7 +71,7 @@ spring-boot-sample-secure-oauth2-actuator spring-boot-sample-secure-oauth2-resource spring-boot-sample-servlet - spring-boot-sample-session-redis + spring-boot-sample-session spring-boot-sample-simple spring-boot-sample-test spring-boot-sample-test-nomockito diff --git a/spring-boot-samples/spring-boot-sample-session-redis/pom.xml b/spring-boot-samples/spring-boot-sample-session-redis/pom.xml deleted file mode 100644 index 2eeca2f5ec6..00000000000 --- a/spring-boot-samples/spring-boot-sample-session-redis/pom.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - 4.0.0 - - - org.springframework.boot - spring-boot-samples - 2.0.0.BUILD-SNAPSHOT - - spring-boot-sample-session-redis - Spring Boot Session Redis Sample - Spring Boot Session Redis Sample - http://projects.spring.io/spring-boot/ - - Pivotal Software, Inc. - http://www.spring.io - - - ${basedir}/../.. - - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-data-redis - - - org.springframework.session - spring-session-data-redis - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-boot-samples/spring-boot-sample-session/README.adoc b/spring-boot-samples/spring-boot-sample-session/README.adoc new file mode 100644 index 00000000000..80881ca97d4 --- /dev/null +++ b/spring-boot-samples/spring-boot-sample-session/README.adoc @@ -0,0 +1,48 @@ += Spring Boot Spring Session Sample + +This sample demonstrates the Spring Session auto-configuration support. Spring Session +supports multiple session store types, including: + +* `Redis` +* `JDBC` +* `Hazelcast` + + + +== Using a different session store +Initially, the project uses JDBC session store backed by an in-memory embedded H2 +database. You can try out your favorite session store as explained below. + + + +=== Redis +Add `org.springframework.session:spring-session-data-redis` and +`spring-boot-starter-data-redis` dependencies to the project and make sure it is +configured properly (by default, a Redis instance with the default settings is expected +on your local box). + +TIP: Run sample application using Redis session store using +`$mvn spring-boot:run -Predis`. + + + +=== JDBC +Add `org.springframework.session:spring-session-jdbc`, +`org.springframework.boot:spring-boot-starter-jdbc` and `com.h2database:h2` dependencies +to the project. An in-memory embedded H2 database is automatically configured. + +TIP: Run sample application using JDBC session store with +`$mvn spring-boot:run -Pjdbc`. + +Note that this profile is active by default. + + + +=== Hazelcast +Add `org.springframework.session:spring-session-hazelcast` and `com.hazelcast:hazelcast` +dependencies to the project to enable support for Hazelcast. Since there is a default +`hazelcast.xml` configuration file at the root of the classpath, it is used to +automatically configure the underlying `HazelcastInstance`. + +TIP: Run sample application using Hazelcast session store with +`$mvn spring-boot:run -Phazelcast`. diff --git a/spring-boot-samples/spring-boot-sample-session/pom.xml b/spring-boot-samples/spring-boot-sample-session/pom.xml new file mode 100644 index 00000000000..70b62242f87 --- /dev/null +++ b/spring-boot-samples/spring-boot-sample-session/pom.xml @@ -0,0 +1,90 @@ + + + 4.0.0 + + + org.springframework.boot + spring-boot-samples + 2.0.0.BUILD-SNAPSHOT + + spring-boot-sample-session + Spring Boot Session Sample + Spring Boot Session Sample + http://projects.spring.io/spring-boot/ + + Pivotal Software, Inc. + http://www.spring.io + + + ${basedir}/../.. + + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + redis + + + org.springframework.session + spring-session-data-redis + + + org.springframework.boot + spring-boot-starter-data-redis + + + + + jdbc + + true + + + + org.springframework.session + spring-session-jdbc + + + org.springframework.boot + spring-boot-starter-jdbc + + + com.h2database + h2 + + + + + hazelcast + + + org.springframework.session + spring-session-hazelcast + + + com.hazelcast + hazelcast + + + + + diff --git a/spring-boot-samples/spring-boot-sample-session-redis/src/main/java/sample/session/redis/HelloRestController.java b/spring-boot-samples/spring-boot-sample-session/src/main/java/sample/session/HelloRestController.java similarity index 95% rename from spring-boot-samples/spring-boot-sample-session-redis/src/main/java/sample/session/redis/HelloRestController.java rename to spring-boot-samples/spring-boot-sample-session/src/main/java/sample/session/HelloRestController.java index 437ce436acd..4df85300b1a 100644 --- a/spring-boot-samples/spring-boot-sample-session-redis/src/main/java/sample/session/redis/HelloRestController.java +++ b/spring-boot-samples/spring-boot-sample-session/src/main/java/sample/session/HelloRestController.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2016 the original author or authors. + * Copyright 2012-2017 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. diff --git a/spring-boot-samples/spring-boot-sample-session-redis/src/main/java/sample/session/redis/SampleSessionRedisApplication.java b/spring-boot-samples/spring-boot-sample-session/src/main/java/sample/session/SampleSessionApplication.java similarity index 83% rename from spring-boot-samples/spring-boot-sample-session-redis/src/main/java/sample/session/redis/SampleSessionRedisApplication.java rename to spring-boot-samples/spring-boot-sample-session/src/main/java/sample/session/SampleSessionApplication.java index a0691f7b6f4..31a585fd6b3 100644 --- a/spring-boot-samples/spring-boot-sample-session-redis/src/main/java/sample/session/redis/SampleSessionRedisApplication.java +++ b/spring-boot-samples/spring-boot-sample-session/src/main/java/sample/session/SampleSessionApplication.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2015 the original author or authors. + * Copyright 2012-2017 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. @@ -20,10 +20,10 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication -public class SampleSessionRedisApplication { +public class SampleSessionApplication { public static void main(String[] args) throws Exception { - SpringApplication.run(SampleSessionRedisApplication.class); + SpringApplication.run(SampleSessionApplication.class); } } diff --git a/spring-boot-samples/spring-boot-sample-session-redis/src/main/resources/application.properties b/spring-boot-samples/spring-boot-sample-session/src/main/resources/application.properties similarity index 100% rename from spring-boot-samples/spring-boot-sample-session-redis/src/main/resources/application.properties rename to spring-boot-samples/spring-boot-sample-session/src/main/resources/application.properties diff --git a/spring-boot-samples/spring-boot-sample-session/src/main/resources/hazelcast.xml b/spring-boot-samples/spring-boot-sample-session/src/main/resources/hazelcast.xml new file mode 100644 index 00000000000..0f48adda0d6 --- /dev/null +++ b/spring-boot-samples/spring-boot-sample-session/src/main/resources/hazelcast.xml @@ -0,0 +1,20 @@ + + + + + principalName + + + principalName + + + + + + + + + + diff --git a/spring-boot-samples/spring-boot-sample-session-redis/src/test/java/sample/session/redis/SampleSessionRedisApplicationTests.java b/spring-boot-samples/spring-boot-sample-session/src/test/java/sample/session/SampleSessionApplicationTests.java similarity index 71% rename from spring-boot-samples/spring-boot-sample-session-redis/src/test/java/sample/session/redis/SampleSessionRedisApplicationTests.java rename to spring-boot-samples/spring-boot-sample-session/src/test/java/sample/session/SampleSessionApplicationTests.java index 560e5d8590a..1e4db783cd6 100644 --- a/spring-boot-samples/spring-boot-sample-session-redis/src/test/java/sample/session/redis/SampleSessionRedisApplicationTests.java +++ b/spring-boot-samples/spring-boot-sample-session/src/test/java/sample/session/SampleSessionApplicationTests.java @@ -23,7 +23,6 @@ import org.junit.Test; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.context.ServerPortInfoApplicationContextInitializer; import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.data.redis.RedisConnectionFailureException; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.RequestEntity; @@ -33,31 +32,20 @@ import org.springframework.web.client.RestTemplate; import static org.assertj.core.api.Assertions.assertThat; /** - * Tests for {@link SampleSessionRedisApplication}. + * Tests for {@link SampleSessionApplication}. * * @author Andy Wilkinson */ -public class SampleSessionRedisApplicationTests { +public class SampleSessionApplicationTests { @Test public void sessionExpiry() throws Exception { - - String port = null; - - try { - ConfigurableApplicationContext context = new SpringApplicationBuilder() - .sources(SampleSessionRedisApplication.class) - .properties("server.port:0") - .initializers(new ServerPortInfoApplicationContextInitializer()) - .run(); - port = context.getEnvironment().getProperty("local.server.port"); - } - catch (RuntimeException ex) { - if (!redisServerRunning(ex)) { - return; - } - throw ex; - } + ConfigurableApplicationContext context = new SpringApplicationBuilder() + .sources(SampleSessionApplication.class) + .properties("server.port:0") + .initializers(new ServerPortInfoApplicationContextInitializer()) + .run(); + String port = context.getEnvironment().getProperty("local.server.port"); URI uri = URI.create("http://localhost:" + port + "/"); RestTemplate restTemplate = new RestTemplate(); @@ -79,11 +67,4 @@ public class SampleSessionRedisApplicationTests { assertThat(uuid2).isNotEqualTo(uuid3); } - private boolean redisServerRunning(Throwable ex) { - if (ex instanceof RedisConnectionFailureException) { - return false; - } - return (ex.getCause() == null || redisServerRunning(ex.getCause())); - } - } From efc3188cff50b17d657a487ae98a5c854fd75d29 Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Wed, 20 Sep 2017 11:09:44 +0200 Subject: [PATCH 2/2] Polish "Improve Spring Session sample" Closes gh-10351 --- .../src/main/java/sample/session/HelloRestController.java | 2 +- .../src/main/java/sample/session/SampleSessionApplication.java | 2 +- .../test/java/sample/session/SampleSessionApplicationTests.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/spring-boot-samples/spring-boot-sample-session/src/main/java/sample/session/HelloRestController.java b/spring-boot-samples/spring-boot-sample-session/src/main/java/sample/session/HelloRestController.java index 4df85300b1a..81eab2ff43e 100644 --- a/spring-boot-samples/spring-boot-sample-session/src/main/java/sample/session/HelloRestController.java +++ b/spring-boot-samples/spring-boot-sample-session/src/main/java/sample/session/HelloRestController.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package sample.session.redis; +package sample.session; import java.util.UUID; diff --git a/spring-boot-samples/spring-boot-sample-session/src/main/java/sample/session/SampleSessionApplication.java b/spring-boot-samples/spring-boot-sample-session/src/main/java/sample/session/SampleSessionApplication.java index 31a585fd6b3..a79c96ea6b5 100644 --- a/spring-boot-samples/spring-boot-sample-session/src/main/java/sample/session/SampleSessionApplication.java +++ b/spring-boot-samples/spring-boot-sample-session/src/main/java/sample/session/SampleSessionApplication.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package sample.session.redis; +package sample.session; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; diff --git a/spring-boot-samples/spring-boot-sample-session/src/test/java/sample/session/SampleSessionApplicationTests.java b/spring-boot-samples/spring-boot-sample-session/src/test/java/sample/session/SampleSessionApplicationTests.java index 1e4db783cd6..c842714c129 100644 --- a/spring-boot-samples/spring-boot-sample-session/src/test/java/sample/session/SampleSessionApplicationTests.java +++ b/spring-boot-samples/spring-boot-sample-session/src/test/java/sample/session/SampleSessionApplicationTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package sample.session.redis; +package sample.session; import java.net.URI;