In Java, come ricaricare dinamicamente i pacchetti di risorse in un'applicazione Web?
-
03-07-2019 - |
Domanda
Stiamo usando fmt: setBundle per caricare un pacchetto di risorse da un database (abbiamo esteso la classe ResourceBundle per farlo). Quando modifichiamo un valore nel database, dobbiamo ricaricare il server Web per visualizzare il nuovo valore nell'app Web.
Esiste un modo semplice per utilizzare il nuovo valore senza riavviare il server Web?
( non desideriamo sempre cercare il valore dal database ma vorremmo invalidare la cache, ad esempio chiamando un URL "admin" speciale)
EDIT: stiamo usando JDK 1.4, quindi preferirei una soluzione su quella versione. :)
Soluzione
Come altri hanno sottolineato nei commenti, potresti voler esaminare Spring - in particolare ReloadableResourceBundleMessageSource .
Altri suggerimenti
Se stai usando JDK 1.6 puoi usare i metodi di callback getTimeToLive ()
e needsReload ()
in ResourceBundle.Control per controllare se la cache del bundle deve essere caricata con nuovi valori dal database .
Per prima cosa puoi creare una classe che si estende da ReloadableResourceBundleMessageSource
per esporre il suo metodo protetto di classe interna chiamato getProperties
. Questo metodo restituisce una mappa simultanea dall'oggetto PropertiesHolder
. Secondo, dovresti configurare un bean di quella classe estesa nella tua classe di configurazione web. Ora puoi utilizzare messageSource nel tuo livello di servizio o aziendale. Ecco il link di riferimento Configura pacchetto sorgente messaggi ricaricabile