2009-02-27 16 views
5

Sto usando Spring 2.5.6. Ho un bean le cui proprietà vengono assegnate da un file di proprietà tramite PropertyPlaceholderConfigurer. Mi chiedo se è possibile avere la proprietà del bean aggiornata quando il file delle proprietà viene modificato. Ci sarebbe ad esempio un processo periodico che controlla l'ultima data di modifica del file delle proprietà e, se è stato modificato, ricarica il bean.Avere le proprietà del bean spring aggiornate automaticamente dal file delle proprietà

Mi chiedo se c'è già qualcosa che soddisfi le mie esigenze. In caso contrario, quale sarebbe l'approccio migliore per risolvere questo problema?

Grazie per il vostro aiuto.

risposta

3

Potrebbe anche essere utile utilizzare PropertyOverrideConfigurer di Spring. Potrebbe rileggere le proprietà e riapplicarlo in alcuni bean polling/schedular.

Dipende dal modo in cui i bean configurati effettivi utilizzano queste proprietà. Potrebbero, ad esempio, nasconderlo indirettamente da qualche parte.

+0

Sembra che questo sia l'approccio più diretto, ed è quello che finiremo per fare. Grazie –

+0

Non vedo la differenza tra PropertyOverrideConfigurer e PropertyPlaceholderConfigurer in questo senso. Esistono differenze su come vengono specificate le proprietà, ma entrambe vengono applicate una sola volta come BeanFactoryPostProcessor prima che vengano creati i bean effettivi. Come potrebbero essere riapplicati? –

+0

@hstoerr: con un PropertyPlaceholderConfigurer le impostazioni sono "nascoste" all'interno della configurazione spring (xml) (con le espressioni {..}). Con PropertyOverrideConfigurer, la configurazione è nel formato di beanName.property = value. Quindi questo può essere riapplicato su exising di bean (ad es. PropertyOverrideConfigurer.processProperties – jor

0

Un modo per fare ciò è incorporare una console Groovy nell'applicazione. Here's alcune istruzioni. Sono stati molto semplici da fare, btw - mi ci sono voluti pochissimo tempo anche se non sono così familiare con groovy.

Una volta fatto, è sufficiente entrare nella console e modificare i valori all'interno dell'applicazione live al volo.

2

Se si desiderano le proprietà dinamiche in fase di esecuzione, forse un altro modo per farlo è JMX.

0

Si potrebbe provare a utilizzare un ambito personalizzato per il bean che ricrea i bean sulle modifiche del file delle proprietà. Vedi il mio more extensive answer here.

0

Spring Cloud Config dispone di funzionalità per modificare le proprietà di configurazione in fase di esecuzione tramite Spring Cloud Bus e utilizzando un Cloud Config Server. I file di configurazione o .properties o .yml sono "esternalizzati" dall'app Spring e vengono invece recuperati da un server di configurazione Spring Cloud a cui l'app si connette all'avvio. Quel Cloud Config Server recupera i file di configurazione appropriati .properties o .yml da un repository GIT (ci sono altre soluzioni di storage, ma GIT è il più comune). È quindi possibile modificare la configurazione in fase di esecuzione modificando il contenuto dei file di configurazione del repository GIT - Il server Cloud Config trasmette le modifiche a qualsiasi applicazione Spring client tramite Spring Cloud Bus e la configurazione di quelle applicazioni viene aggiornata senza la necessità di riavviare il app. Qui puoi trovare un semplice esempio di lavoro: https://github.com/ldojo/spring-cloud-config-examples