Migliore alternativa del file di proprietà in Java

6

Ehi, sto lavorando al prodotto che è attivo su più portali. Il prodotto è sviluppato in GWT, JAVA, Hibernate.

La mia domanda è: se esistono alternative all'utilizzo del file di proprietà in java.

Il mio requisito:

  1. Per una chiave di proprietà ci sono più valori nel portale live per ogni diverso portale.

  2. Ogni volta che cambio il file delle proprietà, devo fare di nuovo la guerra.

  3. Il caricamento di qualsiasi proprietà non dovrebbe richiedere molto tempo.

Qualsiasi aiuto o suggerimento sarebbe apprezzabile !!!

    
posta Ranna 28.06.2013 - 21:09
fonte

5 risposte

8

Trovo che i file JSON mappati alle mie classi faccia miracoli. Solitamente alcune annotazioni sono necessarie per dire alle librerie JSON come serializzare la classe. Al di fuori di questo, praticamente vivi nel tuo codice per il resto del tempo e ottieni tutti i benefici (refactors, controlli del compilatore, codice completo ecc.)

Se hai bisogno di un formato e una convalida più rigorosi dei file, allora vado per XML creando innanzitutto un XSD. Quindi attraverso JAXB genera le classi, da quel momento in poi è lo stesso affare di JSON sopra. Un po 'più impegnativo però, segui questa strada solo se hai bisogno di scambiare i dati in questi file con un sistema che naturalmente "parla" XML o se hai bisogno di una validazione rigorosa ma non vuoi perdere tempo a farlo manualmente.

Yaml può essere un buon candidato per la configurazione. L'ho provato di recente in un progetto Python e devo dire che è stato davvero bello! Non sono sicuro di come funziona Java yaml, ma sarei molto sorpreso se non si riuscisse a trovare una buona risorsa per gestire il formato yaml.

    
risposta data 28.06.2013 - 22:54
fonte
7

Puoi prendere in considerazione YAML

Il framework Dropwizard in Java utilizza YAML per la sua configurazione esterna. È più facile lavorare con JSON che non ci sono parentesi graffe.

Puoi usare Jackson per annullare l'YAML in DTO con il modulo YAML in formato Jackson Data .

Ecco un esempio di configurazione YAML per la configurazione di SLF4J in Dropwizard:

logging:

  level: WARN

  # Logger-specific levels.
  loggers:

    # Set specific levels
    "com.sun.jersey.api.client": DEBUG
    "com.yammer": INFO
    "org.multibit": DEBUG

  # ...
  # Settings for logging to stdout.
  console:

    # If true, write log statements to stdout.
    enabled: true

    # Do not display log statements below this threshold to stdout.
    threshold: ALL

  # Settings for logging to a file.
  file:

    # If true, write log statements to a file.
    enabled: false

    # Do not write log statements below this threshold to the file.
    threshold: ALL

    # The file to which current statements will be logged.
    currentLogFilename: /var/log/example/developer.log

    # When the log file rotates, the archived log will be renamed to this and gzipped. The
    # %d is replaced with the previous day (yyyy-MM-dd). Custom rolling windows can be created
    # by passing a SimpleDateFormat-compatible format as an argument: "%d{yyyy-MM-dd-hh}".
    archivedLogFilenamePattern: /var/log/example/developer-%d.log.gz

    # The number of archived files to keep.
    archivedFileCount: 5

    # The timezone used to format dates. HINT: USE THE DEFAULT, UTC.
    timeZone: UTC
    
risposta data 29.06.2013 - 21:02
fonte
3

Utilizziamo XML e salviamo i file di configurazione in risorse esterne (out of war / jar).

Il caricamento della configurazione non dovrebbe essere un problema (anche se lo si salva nel database), perché non lo si carica frequentemente (non è vero?). Se è necessario aggiornare il runtime di configurazione, è possibile utilizzare l'API di monitoraggio file per ricevere una notifica quando il file viene modificato o solo un ciclo del timer per estrarre i dati.

    
risposta data 28.06.2013 - 23:13
fonte
2

Un'opzione è memorizzare la tua configurazione in un database. In questo modo puoi modificare le proprietà al volo.

In realtà non devi installare qualcosa come MySQL o PostgreSQL, puoi usare qualcosa di veramente minimo come SQLite o H2.

Puoi anche utilizzare un bean JMX e puoi modificarlo anche al volo.

    
risposta data 28.06.2013 - 22:44
fonte
1

Hai guardato Configurazione Typesafe ? Un rapido elenco di funzionalità (tratto dal link)

  • implementato in Java semplice senza dipendenze
  • supporta i file in tre formati: proprietà Java, JSON e un superset JSON umano-friendly
  • unisce più file su tutti i formati
  • può caricare da file, URL o percorsi di classe
  • buon supporto per "annidamento" (trattare qualsiasi sottostruttura della configurazione come l'intera configurazione)
  • gli utenti possono sovrascrivere la configurazione con le proprietà di sistema Java, java -Dmyapp.foo.bar = 10
  • supporta la configurazione di un'app, con il suo framework e le sue librerie, tutto da un singolo file come application.conf
  • analizza le impostazioni di durata e dimensione, "512k" o "10 secondi"
  • converte i tipi, quindi se chiedi un valore booleano e il valore è la stringa "yes", o chiedi un float e il valore è un int, lo scoprirà.
risposta data 03.11.2016 - 17:49
fonte

Leggi altre domande sui tag