Domanda

Sto eliminando tutti i valori hardcoded in una libreria Java e mi chiedevo quale framework sarebbe il migliore (in termini di configurazione zero o prossima allo zero) per gestire la configurazione in fase di esecuzione?Preferirei file di configurazione basati su XML, ma non è essenziale.

Si prega di rispondere solo se si ha esperienza pratica con un framework.Non cerco esempi, ma esperienza...

È stato utile?

Soluzione

Se i tuoi valori hardcoded sono solo semplici coppie chiave-valore, dovresti guardare java.util.Properties.È molto più semplice di XML, più facile da usare e incredibilmente banale da implementare.

Se stai lavorando con Java e i dati che stai archiviando o recuperando dal disco sono modellati come una coppia chiave-valore (che sembra essere nel tuo caso), non riesco davvero a immaginare una soluzione migliore.

Ho utilizzato i file delle proprietà per la semplice configurazione di piccoli pacchetti in un progetto più grande e come configurazione più globale per un intero progetto, e non ho mai avuto problemi.

Naturalmente questo ha l'enorme vantaggio di non richiedere l'utilizzo di librerie di terze parti.

Altri suggerimenti

Configurazione di Apache Commons funziona alla grande.Supporta l'archiviazione della configurazione in un'ampia gamma di formati sul backend, tra cui proprietà, XML, JNDI e altro.È facile da usare ed estendere.Per ottenere la massima flessibilità, utilizzare a fabbrica per ottenere la configurazione e utilizzare semplicemente il file Interfaccia di configurazione dopo di che.

Due caratteristiche di Commons Configuration che lo differenziano da un file Properties diretto è che supporta la conversione automatica in tipi comuni (int, float, array di stringhe) e supporta la sostituzione delle proprietà:

server.host=myHost
server.url=http://${server.host}/somePath

Ecco varie opzioni:

Potresti voler leggere Confronto della configurazione di Commons con JFig e JConfig E Configurazione delle applicazioni utilizzando JFig per alcuni feedback da vari utenti.

Personalmente, ho usato jConfig ed è stata una bella esperienza.

Configurazione dei beni comuni

Stiamo usando questo.I file delle proprietà da soli sono molto più facili da gestire, ma se è necessario rappresentare dati comuni più complessi, la configurazione può farlo e leggere anche i file delle proprietà.

Se non stai facendo nulla di complicato, mi limiterei ai file delle proprietà.

Se vuoi fare qualcosa di avanzato (e sicuro per i tipi), potresti dare un'occhiata a questo: http://www.ibm.com/developerworks/java/library/j-configint/index.html

lo strumento di utilizzo intelligente dei parametri (Ingresso, pagina) permette di esternalizzare quasi ogni decisione (hardcoded) come parametro in un file di configurazione basato su XML. È stato avviato all'inizio del 2012 come risposta alle carenze percepite negli strumenti di configurazione esistenti rispetto alla generalità e alla separazione delle preoccupazioni.

InPUT è probabilmente più potente di quanto richiesto dalla maggior parte dei casi d'uso, poiché consente il formulazione indipendente dal linguaggio di programmazione di dati sperimentali (input - output), con caratteristiche quali la definizione di descrittore complesso per mappature di classi, o generazione e convalida di configurazioni randomizzate basate su intervalli di valori predefiniti (per test e ricerca, ad es.simulazioni Monte Carlo).Puoi definire parametri con sottoparametri, relative restrizioni sui valori dei parametri (parametro numerico a > param b) eccetera..

È ancora in versione beta, ma piuttosto stabile, lo uso per le mie ricerche, per il configurazione e documentazione di esperimenti e per scopi didattici.Una volta disponibile per altri linguaggi (adattatore C++ nella pipe), altri ricercatori/professionisti possono riutilizzare i descrittori eseguendo le loro implementazioni degli stessi algoritmi in C++ (utilizzando il concetto di mappatura del codice).Quel modo, i risultati sperimentali possono essere convalidati/i programmi possono essere migrati più facilmente.La documentazione è ancora in fase di elaborazione, ma un paio di sono disponibili esempi sulla pagina.Ingresso è fonte aperta Software.

Per chi fosse interessato, il Documento di ricerca concettuale.

Tendo a usare java.util.Properties (o classi simili in altri linguaggi e framework) racchiuso in una classe di configurazione specifica dell'applicazione la maggior parte delle volte, ma sono molto interessato ad alternative o variazioni su questo.Soprattutto perché le cose possono diventare un po' complicate se sono coinvolte finestre di dialogo grafiche di configurazione o visualizzazioni multiple dei dati di configurazione.

Sfortunatamente non ho alcuna esperienza con librerie specifiche per Java (tranne quelle che ho scritto io stesso), ma qualsiasi indicazione sarebbe apprezzata.

Aggiornamento

OK.Non era del tutto vero, tre è il Progetto di configurazione Java primaverile.

IO ha scritto ne ho parlato un paio di settimane fa e sono giunto alla conclusione che XML è una delle notazioni più utilizzate.

È il migliore?Non credo, mi piace molto JSON, ma gli strumenti non sono ancora all'altezza di XML quindi immagino che dovremo aspettare e vedere.

Puoi provare YamlBeans.In questo modo scrivi qualunque classe desideri contenga i tuoi dati di configurazione, quindi puoi scriverli e leggerli automaticamente da e verso YAML.

YAML è un formato dati leggibile dall'uomo.Ha una potenza più espressiva di java.util.Properties.Puoi avere elenchi, mappe, ancore, dati digitati, ecc.

Per favore dai un'occhiata a questo URL: http://issues.apache.org/jira/browse/CONFIGURATION-394

Il framework di configurazione che stiamo cercando è qualcosa in cima alla configurazione di Apache Commons e deve supportare problemi di concorrenza, problemi JMX e la maggior parte degli archivi (ad esempio file .properties, file .xml o PreferencesAPI).

È interessante ciò che il team weblogic fornisce sulla "Console di amministrazione" perché attraverso di esso è possibile avere aggiornamenti transazionali (atomici) sulle configurazioni in modo che gli ascoltatori registrati vengano avvisati.

I ragazzi di Apache insistono sul fatto che questo progetto forse non rientra nell'ambito di Commons Configuration!

Ho allegato un semplice framework di configurazione, dai un'occhiata per favore.

Ne ho appena postato un breve pezzettino codice sull'utilizzo di ClassPathResource di Spring come alternativa a IoC.ClassPathResource ti consente di posizionare file di proprietà ovunque sul classpath (ad esempio, tutti in un unico posto o come peer per il codice che configurano.Il mio esempio utilizza solo java.util.Properties, quindi puoi utilizzare lo stile di testo normale "nome=valore" o il suo formato XML.

I file delle proprietà sono molto semplici, se hai bisogno di qualcosa di più funzionale, puoi formattare alcuni dei tuoi file di configurazione come classi Java.Questi possono essere inseriti in un pacchetto/modulo diverso e possono essere precompilati o caricati in fase di esecuzione con una libreria come BeanShell.

Nota:Nel caso più semplice (precompilato) non sono necessarie librerie aggiuntive.

Per quanto riguarda i suggerimenti sull'utilizzo di java.util.Properties, a partire da jdk 1.5, l'API Preferenze (java.util.prefs) sembra essere l'alternativa preferita all'utilizzo dell'API Proprietà.

Motivi:maggiore scalabilità, neutralità del back-end, ecc.

Potresti dare un'occhiata al nuovo annuncio tools4j-config la cui missione è consentire di gestire facilmente la configurazione in fase di esecuzione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top