[JAVA] Speichern Sie Sitzungsinformationen mit Spring Session in der Datenbank

Was ist Frühlingssitzung?

Sie können die Funktion von HttpSession überschreiben und die Sitzungsinformationen mit Redis oder RDBMS verwalten. Normalerweise werden Sitzungsinformationen vom Anwendungsserver verwaltet. Wenn jedoch mehrere Server während des Lastausgleichs vorbereitet und betrieben werden, werden die Sitzungsinformationen zwischen mehreren Servern (Sitzungsreplikation) oder Benutzer und Server synchronisiert. Es ist notwendig, die Last so auszugleichen, dass eine Eins-zu-Eins-Beziehung besteht (klebrige Sitzung), was problematisch ist.

Daher kann Spring Session gut verwendet werden, wenn Sie die Sitzungsinformationen an einem anderen Ort als dem Anwendungsserver ausschneiden möchten.

Verwenden Sie die Frühlingssitzung

Ein Projekt erstellen

Erstellen Sie ein Spring Boot-Projekt mit Spring Initializr. https://start.spring.io/

Dieses Mal habe ich Folgendes als Abhängigkeiten hinzugefügt.

Das RDBMS, in dem Sitzungsinformationen gespeichert werden, ist PostgreSQL.

application.properties

application.properties


spring.session.store-type=jdbc
spring.datasource.url=jdbc:postgresql://localhost:5432/postgres
spring.datasource.username=postgres
spring.datasource.password=postgres
spring.datasource.driver-class-name=org.postgresql.Driver

Wenn Sie spring.session.store-type auf jdbc setzen, werden die Einstellungen für SpringSession anscheinend ohne Erlaubnis vorgenommen. Nein, Spring Boot ist praktisch. (Geben Sie die Datenquelleneinstellung entsprechend der Umgebung an.)

Datenbankeinrichtung

Ich denke, es gibt eine Möglichkeit, es automatisch einzurichten, aber ich bin mir nicht sicher, wie ich es machen soll, also werde ich eine Tabelle zum Speichern der Sitzungsinformationen erstellen. In SpringSessionJdbc befindet sich eine SQL-Datei, sodass Sie sie ausführen können. https://github.com/spring-projects/spring-session/tree/master/spring-session-jdbc/src/main/resources/org/springframework/session/jdbc

Versuchen Sie, die Sitzung zu betreiben

Ich habe die folgende Controller-Klasse erstellt und versucht, die Sitzungsinformationen zu bearbeiten.

HelloController.java


@Controller
public class HelloController {

	@Autowired
	SessionData sessionData;

	@GetMapping(value = "/")
	public String index() {
		return "index";
	}

	@GetMapping(value="/set")
	public String set(){
		sessionData.setStr1("hogehoge");
		sessionData.setStr2("fugafuga");
		sessionData.setStr3("piyopiyo");
		return "redirect:/";
	}
}

SessionData.java


@Data
@Component
@Scope(value="session", proxyMode=ScopedProxyMode.TARGET_CLASS)
public class SessionData implements Serializable{
    private static final long serialVersionUID = 1L;
    String str1;
    String str2;
    String str3;
}

index.html


<!doctype html>
<html xmlns:th="http://www.thymeleaf.org">

<head>
    <meta charset="UTF-8" />
    <title>Hello Thymeleaf</title>
</head>

<body>
    <div>
        str1:
        <span th:text="${@sessionData.str1}">aaa</span>
    </div>
    <div>
        str2:
        <span th:text="${@sessionData.str2}">aaa</span>
    </div>
    <div>
        str3:
        <span th:text="${@sessionData.str3}">aaa</span>
    </div>
    <form th:action="@{/set}" method="get">
        <button>set</button>
    </form>
</body>

</html>

Zur Implementierung können Sie die Sitzung wie gewohnt ausführen. Wenn Sie die Datenbank überprüfen, können Sie sehen, dass die Sitzungsinformationen dort gespeichert sind.

Da die Daten serialisiert und gespeichert werden, muss Serializable für die Sitzungsinformationen implementiert werden.


Wie oben erwähnt, können Sitzungsinformationen einfach in RDBMS gespeichert werden. Persönlich dachte ich, es wäre einfacher, mit verschiedenen Dingen umzugehen, wenn die Informationen in JSON gespeichert würden. Es scheint, dass der Datenkonvertierungsteil angepasst werden kann, aber ich habe aufgegeben, weil es schwierig zu sein scheint, den Datentyp zu ändern. (Da sich auch das DB-Schema ändert, müssen wir es neu erstellen.)

Darüber hinaus scheint die Implementierung, die Redis verwendet, eine Methode zum Speichern von Daten in JSON bereitzustellen.

Recommended Posts

Speichern Sie Sitzungsinformationen mit Spring Session in der Datenbank
Fehler in der Spring-Datenbankverbindung
Ändern Sie das Sitzungszeitlimit in Spring Boot
Injizieren Sie den Logger im Frühjahr
Verwenden Sie Interceptor im Frühjahr
Microservices in Spring Cloud
Holen Sie sich Cookies im Frühling
Spring Boot (1 Serie) + spring-security-oauth2 + Redis Session + Heroku mit SerializationException
Erstellen einer Datenbankumgebung mit Docker in Spring Boot (IntellJ)
Abrufen von Fehlerinformationen mithilfe von DefaultErrorAttributes und ErrorAttributeOptions in Spring Boot 2.3
[Schienen] Anzeigen von Informationen, die in der Datenbank gespeichert sind
Legen Sie den Kontextparameter in Spring Boot fest
Holen Sie sich EXIF-Informationen in Java
Spring Boot 2 Multiprojekt mit Gradle
Wichtige Änderungen in Spring Boot 1.5
NoHttpResponseException in Spring Boot + WireMock
Schleifenschritt mit Spring Batch
Speichern der im Textbereich eingegebenen Informationen in einer Variablen in der Methode