In regelmäßigen Abständen ein Objekt neu erstellen - Java, Frühling, Java-ee, Frühling-Mvc, Singleton

Ich versuche, meinen Service in einen anderen zu integrierenService (Service B). Um einen Client für Service B zu erstellen, muss ich ein Token abrufen und es verwenden, während ich den Client erstelle. Das Token läuft alle 72 Stunden ab. Sobald das Token abläuft, läuft der Client ebenfalls ab. Also muss ich den Client neu erstellen.

Derzeit ist das Clientobjekt ein Singleton, der beim Start von Spring instanziiert wird. Ich möchte dieses Objekt alle 72 Stunden neu erstellen.

Ich denke daran, das Singleton mit synchronisierter getInstance zu verwenden. Gibt es dafür einen besseren Weg?

Antworten:

2 für die Antwort № 1

Singleton wäre der beste Weg, dies zu tun. Wenn Sie Ihr Token erhalten, speichern Sie eine statische Zeitstempelvariable für die Zeit, als Sie das Token erhalten haben. Dann in deinem getInstance() Funktion, überprüfen Sie den Zeitstempel gegen den aktuellenZeit zu sehen, ob es mehr als 72 Stunden alt ist. Wenn dies der Fall ist, greifen Sie ein neues Token und erstellen Sie die Instanz neu, bevor Sie es zurückgeben. Wenn dies nicht der Fall ist, geben Sie die Instanz zurück.

Ich habe etwas Ähnliches mit OAuth-Authentifizierung gemacht und festgestellt, dass es eine einfache und effektive Methode ist.


1 für die Antwort № 2

Wenn Sie eine neue Instanz des Client-Objekts wünschenJedes Mal, wenn Sie danach gefragt haben, ändern Sie den Umfang der Frühlingsbohne von Singleton auf Prototyp. Container erstellt bei jeder Anforderung eine neue Instanz des Objekts.

Sie können auch den Quartz-Scheduler verwenden und einJob für die Neuerstellung des Objekts (tatsächlich eine neue Referenz vom Spring-Container erfragen) mit einem Wiederholungsintervall von 72 Stunden. Sie können Quarz mit Feder leicht integrieren, indem Sie diesen folgen Anleitung


Speisekarte