


So lösen Sie das Problem, dass die Timeout-Einstellung für die Springboot2-Sitzung ungültig ist
Problem:
Beim heutigen Projekt ist ein Einstellungs-Timeout-Problem aufgetreten und die application.properties-Änderungen von SpringBoot2 wurden nie wirksam.
Lösung:
Der von Spring Boot verwendete eingebettete Container wird von den server.*-Eigenschaften gesteuert. Spring Boot erstellt eine Instanz des Servlet-Containers mithilfe einer der ServletWebServerFactory-Instanzen. Diese Klassen verwenden server.*-Attribute, um verwaltete Servlet-Container (wie Tomcat, Jetty usw.) zu konfigurieren.
Wenn die Anwendung in eine WAR-Datei gepackt und auf einer Tomcat-Instanz bereitgestellt wird, können die server.*-Attribute nicht verwendet werden. Diese gelten nicht, da der vorgefertigte Servlet-Container verwendet werden kann (da der Dienst remote ausgeführt wird). Daher führt die Bereitstellung auf einem Remote-Tomcat dazu, dass die server.*-Eigenschaften unbrauchbar werden.
1. Ändern Sie die Konfigurationsdatei gemäß dem Beitrag im Internet (wenn es sich um einen Jar-Start handelt, wird sie wirksam) wie folgt:
server: servlet: session: timeout: PT1H # 1小时过期 cookie: max-age: PT1H # 1小时过期
Erläuterung: PT1H bedeutet: Setzen Sie die Sitzungsablaufzeit auf 1 Stunde.
Erweiterung: Duration
Die setTimeouot-Methode wird durch Anzeigen des Springboot-Quellcodes gefunden. Hier muss die Instanz von Duration übergeben werden.
public void setTimeout(Duration timeout) { this.timeout = timeout; }
- 'D' - Tag# 🎜🎜# 'H' - Stunden #
- Jede Einheit muss mit einer Zahl beginnen und die Reihenfolge von Stunden, Minuten und Sekunden darf nicht durcheinander gebracht werden. Zum Beispiel: PT2H3M2S ist gleich -PT-2H-3M-2S.
- 2. Legen Sie das Sitzungszeitlimit von Tomcat fest. 1) Ändern Sie im conf-Verzeichnis von Tomcat die Datei servler.xml:
<Context path="/abtest" docBase="/abtest" defaultSessionTimeOut="3600" isWARExpanded="true" isWARValidated="false" isInvokerEnabled="true" isWorkDirPersistent="false"/>
<session-config> <session-timeout>20</session-timeout> </session-config>
session.setMaxInactiveInterval(30*60);
@RestController
@RequestMapping("/valid-time")
public class TestController {
@GetMapping("/test")
public String validTime(HttpServletRequest request, HttpServletResponse response) {
HttpSession session = request.getSession();
int sessionTime = session.getMaxInactiveInterval();
return new StringBuilder("sessionTime=").append(sessionTime).toString();
}
}
Nach dem Login kopieren
Nicht synchronisierte Zeit führt zum Ausfall der Spring-Sitzung.
@RestController @RequestMapping("/valid-time") public class TestController { @GetMapping("/test") public String validTime(HttpServletRequest request, HttpServletResponse response) { HttpSession session = request.getSession(); int sessionTime = session.getMaxInactiveInterval(); return new StringBuilder("sessionTime=").append(sessionTime).toString(); } }
Nicht synchronisierte Zeit auf dem Linux-Server Ursachen für die große Fehlergrube der Frühlingssitzung wurde als Session-Sharing-Lösung ausgewählt.
Nachdem ich die technische Lösung bestätigt hatte, suchte ich im Internet nach vielen Informationen über die Frühlingssitzung. Nachdem ich sie gelesen und keine Fehler von früheren Leuten gefunden hatte, begann ich daran zu arbeiten.
Der Redis-Installationsprozess wird ignoriert.Fügen Sie den Informationen zufolge Schritt für Schritt eine Frühlingssitzung zum Projekt hinzu. Das Einzelknotenprojekt lief erfolgreich und ohne Fehler und die Sitzung wurde erfolgreich in Redis geschrieben.
Dann habe ich sicherheitshalber Nginx auf meinem Computer installiert und 3 Tomcats bereitgestellt. Alles sah perfekt aus und die Sitzungsfreigabe zwischen mehreren Knoten wurde abgeschlossen. Bisher sind alle vorbereitenden Vorbereitungen abgeschlossen und es bleibt nur noch der letzte Schritt.
Der Albtraum beginnt ...
Stellen Sie alle Knoten online bereit und öffnen Sie dann den Browser, um erfolgreich auf die Anwendung zuzugreifen. Natürlich können wir nicht einfach damit aufhören An dem Punkt, an dem wir sehen, dass die Seite fertig ist, muss ich mich sowieso anmelden, also...
Dann... Ich habe das Benutzerpasswort unzählige Male eingegeben und dazu aufgefordert Die Anmeldung war erfolgreich, aber das Endergebnis wurde immer noch abgelehnt, o(╥﹏╥)o
Der nächste Schritt sind unzählige Grubenfüllfahrten
Schauen Sie sich das Protokoll an ...
Sehen Sie sich verschiedene Anfrageanfragen an ……
Ich vermute, dass es in der Frühjahrssitzung einen FEHLER gibt…
Ich habe sogar Remote DEBUG aktiviert Debuggen im Modus, und schließlich habe ich im universellen DEBUG-Modus festgestellt, dass beim Abrufen einer Sitzung im Frühling
zunächst ermittelt, ob die Sitzung abgelaufen ist Systemzeit und vergleichen Sie sie mit der Ablaufzeit der Sitzung. Wenn die aktuelle Zeit kürzer als die Ablaufzeit ist, identifizieren Sie die Sitzung.Als ich das sah, verspürte ich sofort ein Gefühl der Erleuchtung und das kleine Universum brach hier endlich aus.
Nima—> Alle erworbenen Sitzungen waren abgelaufen, und dann ... dann ... bin ich natürlich schnell losgelaufen, um die Serverzeit zu überprüfen, also ... habe ich geweint )o, es stellt sich heraus. Verdammt, du hast mich ausgetrickst...
Zur Erinnerung an diesen Boxenstopp poste ich diesen Artikel
Zeichne auch den Linux-Server auf Zeitsynchronisierung Datumsbefehl:Datum: Aktuelle Uhrzeit anzeigen, die Ergebnisse sind wie folgt: Di 4. März 01 :36:45 CST 2017
date -s 09:38:40: Stellen Sie die aktuelle Uhrzeit ein, das Ergebnis ist wie folgt: Tue Mar 4 09:38:40 CST 2017
#🎜 🎜#ntpdate-Befehl: # 🎜🎜#
ntpdate -u ntp.api.bz: Netzwerkzeitsynchronisierungsbefehl
ntp häufig verwendeter Server :#🎜 🎜#China National Time Service Center: 210.72.145.44
NTP-Server (Shanghai): ntp.api.bzDas obige ist der detaillierte Inhalt vonSo lösen Sie das Problem, dass die Timeout-Einstellung für die Springboot2-Sitzung ungültig ist. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



1. Redis implementiert das Prinzip der verteilten Sperren und warum verteilte Sperren erforderlich sind. Bevor über verteilte Sperren gesprochen wird, muss erläutert werden, warum verteilte Sperren erforderlich sind. Das Gegenteil von verteilten Sperren sind eigenständige Sperren. Wenn wir Multithread-Programme schreiben, vermeiden wir Datenprobleme, die durch den gleichzeitigen Betrieb einer gemeinsam genutzten Variablen verursacht werden. Normalerweise verwenden wir eine Sperre, um die Richtigkeit der gemeinsam genutzten Variablen sicherzustellen Die gemeinsam genutzten Variablen liegen im gleichen Prozess. Wenn es mehrere Prozesse gibt, die gleichzeitig eine gemeinsam genutzte Ressource betreiben müssen, wie können sie sich dann gegenseitig ausschließen? Heutige Geschäftsanwendungen sind in der Regel Microservice-Architekturen, was auch bedeutet, dass eine Anwendung mehrere Prozesse bereitstellen muss. Wenn mehrere Prozesse dieselbe Datensatzzeile in MySQL ändern müssen, ist eine Verteilung erforderlich, um fehlerhafte Daten zu vermeiden wird zu diesem Zeitpunkt eingeführt. Der Stil ist gesperrt. Punkte erreichen wollen

Ein Sitzungsfehler wird normalerweise durch den Ablauf der Sitzungslebensdauer oder das Herunterfahren des Servers verursacht. Die Lösungen: 1. Verlängern Sie die Lebensdauer der Sitzung. 3. Verwenden Sie Cookies. 4. Aktualisieren Sie die Sitzung.

Springboot liest die Datei, kann aber nach dem Packen in ein JAR-Paket nicht auf die neueste Entwicklung zugreifen. Es gibt eine Situation, in der Springboot die Datei nach dem Packen in ein JAR-Paket nicht lesen kann ist ungültig und kann nur über den Stream gelesen werden. Die Datei befindet sich unter resources publicvoidtest(){Listnames=newArrayList();InputStreamReaderread=null;try{ClassPathResourceresource=newClassPathResource("name.txt");Input

Lösung des domänenübergreifenden Problems von PHPSession Bei der Entwicklung der Front-End- und Back-End-Trennung sind domänenübergreifende Anforderungen zur Norm geworden. Wenn es um domänenübergreifende Probleme geht, nutzen wir in der Regel Sitzungen und verwalten diese. Aufgrund von Richtlinieneinschränkungen für den Browserursprung können Sitzungen jedoch standardmäßig nicht über Domänen hinweg gemeinsam genutzt werden. Um dieses Problem zu lösen, müssen wir einige Techniken und Methoden verwenden, um eine domänenübergreifende gemeinsame Nutzung von Sitzungen zu erreichen. 1. Die häufigste Verwendung von Cookies zum domänenübergreifenden Teilen von Sitzungen

SpringBoot und SpringMVC sind beide häufig verwendete Frameworks in der Java-Entwicklung, es gibt jedoch einige offensichtliche Unterschiede zwischen ihnen. In diesem Artikel werden die Funktionen und Verwendungsmöglichkeiten dieser beiden Frameworks untersucht und ihre Unterschiede verglichen. Lassen Sie uns zunächst etwas über SpringBoot lernen. SpringBoot wurde vom Pivotal-Team entwickelt, um die Erstellung und Bereitstellung von Anwendungen auf Basis des Spring-Frameworks zu vereinfachen. Es bietet eine schnelle und einfache Möglichkeit, eigenständige, ausführbare Dateien zu erstellen

1. Passen Sie den RedisTemplate1.1-Standard-Serialisierungsmechanismus an. Die API-basierte Redis-Cache-Implementierung verwendet die RedisTemplate-Vorlage für Daten-Caching-Vorgänge. Öffnen Sie hier die RedisTemplate-Klasse und zeigen Sie die Quellcodeinformationen der Klasse publicclassRedisTemplateextendsRedisAccessorimplementsRedisOperations an. Schlüssel deklarieren, verschiedene Serialisierungsmethoden des Werts, der Anfangswert ist leer @NullableprivateRedisSe

In Projekten werden häufig einige Konfigurationsinformationen benötigt. Diese Informationen können in der Testumgebung und in der Produktionsumgebung unterschiedliche Konfigurationen haben und müssen möglicherweise später basierend auf den tatsächlichen Geschäftsbedingungen geändert werden. Wir können diese Konfigurationen nicht fest im Code codieren. Am besten schreiben Sie sie in die Konfigurationsdatei. Sie können diese Informationen beispielsweise in die Datei application.yml schreiben. Wie erhält oder verwendet man diese Adresse im Code? Es gibt 2 Methoden. Methode 1: Wir können den Wert, der dem Schlüssel in der Konfigurationsdatei (application.yml) entspricht, über den mit @Value versehenen Wert erhalten. Diese Methode eignet sich für Situationen, in denen es relativ wenige Mikrodienste gibt: Tatsächlich Projekte, wenn das Geschäft kompliziert ist, Logik

In diesem Artikel wird ein detailliertes Beispiel geschrieben, um über die tatsächliche Entwicklung von Dubbo + Nacos + Spring Boot zu sprechen. In diesem Artikel wird nicht zu viel theoretisches Wissen behandelt, sondern das einfachste Beispiel wird geschrieben, um zu veranschaulichen, wie Dubbo in Nacos integriert werden kann, um schnell eine Entwicklungsumgebung aufzubauen.
