diff --git a/spring-session/spring-session-jdbc/pom.xml b/spring-session/spring-session-jdbc/pom.xml
index ce119b3c74..ce6b5f5908 100644
--- a/spring-session/spring-session-jdbc/pom.xml
+++ b/spring-session/spring-session-jdbc/pom.xml
@@ -10,6 +10,10 @@
spring-session-jdbc
Spring Session with JDBC tutorial
+
+ 1.4.197
+
+
parent-boot-2
com.baeldung
@@ -18,25 +22,18 @@
-
- org.springframework.boot
- spring-boot-starter-data-jpa
-
-
- org.springframework.boot
- spring-boot-starter-thymeleaf
-
org.springframework.boot
spring-boot-starter-web
org.springframework.session
- spring-session-core
+ spring-session-jdbc
com.h2database
h2
+ ${h2.version}
runtime
@@ -44,14 +41,6 @@
spring-boot-starter-test
test
-
- org.springframework.session
- spring-session-jdbc
-
-
-
-
-
diff --git a/spring-session/spring-session-jdbc/src/main/java/com/baeldung/springsessionjdbc/SpringSessionJdbcApplication.java b/spring-session/spring-session-jdbc/src/main/java/com/baeldung/springsessionjdbc/SpringSessionJdbcApplication.java
index 727fa653ff..a3bc17aa49 100644
--- a/spring-session/spring-session-jdbc/src/main/java/com/baeldung/springsessionjdbc/SpringSessionJdbcApplication.java
+++ b/spring-session/spring-session-jdbc/src/main/java/com/baeldung/springsessionjdbc/SpringSessionJdbcApplication.java
@@ -6,7 +6,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringSessionJdbcApplication {
- public static void main(String[] args) {
- SpringApplication.run(SpringSessionJdbcApplication.class, args);
- }
+ public static void main(String[] args) {
+ SpringApplication.run(SpringSessionJdbcApplication.class, args);
+ }
}
diff --git a/spring-session/spring-session-jdbc/src/main/java/com/baeldung/springsessionjdbc/controller/SpringSessionJdbcController.java b/spring-session/spring-session-jdbc/src/main/java/com/baeldung/springsessionjdbc/controller/SpringSessionJdbcController.java
index 0a68bbbfba..509a5f292b 100644
--- a/spring-session/spring-session-jdbc/src/main/java/com/baeldung/springsessionjdbc/controller/SpringSessionJdbcController.java
+++ b/spring-session/spring-session-jdbc/src/main/java/com/baeldung/springsessionjdbc/controller/SpringSessionJdbcController.java
@@ -24,20 +24,19 @@ public class SpringSessionJdbcController {
}
@PostMapping("/saveColor")
- public String saveMessage(@RequestParam("color") String color,
- HttpServletRequest request) {
+ public String saveMessage(@RequestParam("color") String color, HttpServletRequest request) {
List favoriteColors = getFavColors(request.getSession());
if (!StringUtils.isEmpty(color)) {
favoriteColors.add(color);
- request.getSession().
- setAttribute("favoriteColors", favoriteColors);
+ request
+ .getSession()
+ .setAttribute("favoriteColors", favoriteColors);
}
return "redirect:/";
}
private List getFavColors(HttpSession session) {
- List favoriteColors = (List) session.
- getAttribute("favoriteColors");
+ List favoriteColors = (List) session.getAttribute("favoriteColors");
if (favoriteColors == null) {
favoriteColors = new ArrayList<>();
}
diff --git a/spring-session/spring-session-jdbc/src/main/resources/application.properties b/spring-session/spring-session-jdbc/src/main/resources/application.properties
index 95f14559ce..119638de31 100644
--- a/spring-session/spring-session-jdbc/src/main/resources/application.properties
+++ b/spring-session/spring-session-jdbc/src/main/resources/application.properties
@@ -1,9 +1,3 @@
spring.session.store-type=jdbc
-#spring.session.jdbc.initialize-schema=embedded
-#spring.session.jdbc.table-name=SPRING_SESSION
-#server.servlet.session.timeout=60s
-#spring.datasource.url=jdbc:h2:mem:AZ
-#spring.security.user.name=admin
-#spring.security.user.password=secret
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
\ No newline at end of file
diff --git a/spring-session/spring-session-jdbc/src/main/resources/templates/index.html b/spring-session/spring-session-jdbc/src/main/resources/templates/index.html
deleted file mode 100644
index 51f6bbee2f..0000000000
--- a/spring-session/spring-session-jdbc/src/main/resources/templates/index.html
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
- Spring Session JDBC
-
-
-
-
-
- Session ID -
- My favorite color(s) -
-
-
\ No newline at end of file
diff --git a/spring-session/spring-session-jdbc/src/test/java/com/baeldung/springsessionjdbc/SpringSessionJdbcApplicationTests.java b/spring-session/spring-session-jdbc/src/test/java/com/baeldung/springsessionjdbc/SpringSessionJdbcApplicationTests.java
deleted file mode 100644
index 9975e51784..0000000000
--- a/spring-session/spring-session-jdbc/src/test/java/com/baeldung/springsessionjdbc/SpringSessionJdbcApplicationTests.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.baeldung.springsessionjdbc;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.junit4.SpringRunner;
-
-@RunWith(SpringRunner.class)
-@SpringBootTest
-public class SpringSessionJdbcApplicationTests {
-
- @Test
- public void contextLoads() {
- }
-
-}
diff --git a/spring-session/spring-session-jdbc/src/test/java/com/baeldung/springsessionjdbc/SpringSessionJdbcIntegrationTest.java b/spring-session/spring-session-jdbc/src/test/java/com/baeldung/springsessionjdbc/SpringSessionJdbcIntegrationTest.java
new file mode 100644
index 0000000000..2dcc0b3af8
--- /dev/null
+++ b/spring-session/spring-session-jdbc/src/test/java/com/baeldung/springsessionjdbc/SpringSessionJdbcIntegrationTest.java
@@ -0,0 +1,91 @@
+package com.baeldung.springsessionjdbc;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.MethodSorters;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.web.client.TestRestTemplate;
+import org.springframework.boot.web.server.LocalServerPort;
+import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectInputStream;
+import java.sql.*;
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class SpringSessionJdbcIntegrationTest {
+
+ @LocalServerPort
+ private int port;
+
+ @Autowired
+ private TestRestTemplate testRestTemplate;
+
+ @Before
+ public void setup() throws ClassNotFoundException {
+ Class.forName("org.h2.Driver");
+ }
+
+ @Test
+ public void givenApiHasStarted_whenH2DbIsQueried_thenSessionTablesAreEmpty() throws SQLException {
+ Assert.assertEquals(0, getSessionIdsFromDatabase().size());
+ Assert.assertEquals(0, getSessionAttributeBytesFromDatabase().size());
+ }
+
+ @Test
+ public void givenGetInvoked_whenH2DbIsQueried_thenOneSessionIsCreated() throws SQLException {
+ assertThat(this.testRestTemplate.getForObject("http://localhost:" + port + "/", String.class)).isNotEmpty();
+ Assert.assertEquals(1, getSessionIdsFromDatabase().size());
+ }
+
+ @Test
+ public void givenPostInvoked_whenH2DbIsQueried_thenSessionAttributeIsRetrieved() throws ClassNotFoundException, SQLException, IOException {
+ MultiValueMap map = new LinkedMultiValueMap<>();
+ map.add("color", "red");
+ this.testRestTemplate.postForObject("http://localhost:" + port + "/saveColor", map, String.class);
+ List queryResponse = getSessionAttributeBytesFromDatabase();
+ Assert.assertEquals(1, queryResponse.size());
+ ObjectInput in = new ObjectInputStream(new ByteArrayInputStream(queryResponse.get(0)));
+ List obj = (List) in.readObject(); //Deserialize byte[] to object
+ Assert.assertEquals("red", obj.get(0));
+ }
+
+ private List getSessionIdsFromDatabase() throws SQLException {
+ List result = new ArrayList<>();
+ ResultSet rs = getResultSet("SELECT * FROM SPRING_SESSION");
+ while (rs.next()) {
+ result.add(rs.getString("SESSION_ID"));
+ }
+ return result;
+ }
+
+ private List getSessionAttributeBytesFromDatabase() throws SQLException {
+ List result = new ArrayList<>();
+ ResultSet rs = getResultSet("SELECT * FROM SPRING_SESSION_ATTRIBUTES");
+ while (rs.next()) {
+ result.add(rs.getBytes("ATTRIBUTE_BYTES"));
+ }
+ return result;
+ }
+
+ private ResultSet getResultSet(String sql) throws SQLException {
+ Connection conn = DriverManager.getConnection("jdbc:h2:mem:testdb", "sa", "");
+ Statement stat = conn.createStatement();
+ return stat.executeQuery(sql);
+ }
+
+}