Ich habe eine Spring-Anwendung, die verschiedene Konfigurationsparameter verwendet, die in einer Datenbank beibehalten werden. Um Datenbankzugriffszyklen zu minimieren, habe ich eine Singleton-Klasse erstellt, die die Parameter in einem Properties-Objekt enthält. Es gibt Situationen, in denen das Properties-Objekt während der Ausführung der Anwendung aktualisiert werden muss. Zu diesem Zweck habe ich eine load () - Methode und eine reload () -Methode. Um auf die Datenbank zuzugreifen, habe ich ein @Autowired-Dienstobjekt. Vereinfacht ein wenig:
%Vor%In der Spring-Konfigurationsdatei habe ich:
%Vor%Das Aufrufen von 'getValue' gegen diesen Singleton generiert eine Nullzeigerausnahme. Ich verstehe, dass dies in irgendeiner Weise mit @Autowired verbunden ist und ein Fehler bei der korrekten Initialisierung, obwohl ich nicht verstehe, warum. Ich denke, meine Frage bezieht sich auf den besten Ansatz zur Lösung dieses Problems.
Für andere ist dies der modifizierte Code, der funktioniert hat:
%Vor%Wenn Sie Konstruktoraufrufe load () aufrufen, sind die Abhängigkeiten mit dem Autowired immer noch nicht verbunden. Die Verdrahtung findet nach dem Ende des Konstruktors statt. Entweder mach configService final und benutze den Konstruktor autowiring oder entferne load () von deinem Konstruktor, aber lade () mit @PostConstruct annotieren.
Tags und Links spring