Como carregar a configuração do ambiente

5

No Java, a maneira típica de armazenar a configuração é usando arquivos de propriedades. Então eu tenho vários desses arquivos, um para cada tipo de ambiente (dev, test, prod, ...).

Esta configuração é necessária em diferentes partes da base de código, ou seja, em classes diferentes, mas para evitar a duplicação de código para abrir o arquivo correto em um objeto Properties e, em seguida, solicitar uma propriedade específica, decidi uma classe ConfigurationLoader que carrega o arquivo e mantém o objeto Properties em uma variável estática.

public class ConfigurationLoader {
    static Properties configuration = new Properties().load(new FileReader("/path/to/my/file"));
    public static String getProperty(String propertyName) {
        return configuration.getProperty(propertyName);
    }
}

(Este código é quebrado por uma exceção não detectada, mas a idéia é carregar a configuração em um bloco estático)

Desta forma, toda a configuração é carregada assim que esta classe é carregada e está disponível para qualquer classe simplesmente usando ConfigurationLoader.getProperty(...) . É claro que parece melhor não carregar a mesma propriedade em vários lugares e talvez criar classes diferentes de "domínio de configuração" que fazem a análise de uma vez por todas.

Eu então tenho duas perguntas:

  • Este é um bom design? Em particular, você vê alguma grande desvantagem em disponibilizar globalmente a configuração?
  • Qual é a melhor maneira de especificar qual configuração de ambiente carregar (sinalizador -D, variável de ambiente, ...), ou seja, qual "/ caminho / para / meu / arquivo" usar?
por bangnab 13.08.2015 / 11:09
fonte

1 resposta

2

Estou supondo que você esteja tentando fazer isso fora de um contêiner de aplicativo, em um aplicativo java principal. Ou então, os arquivos de propriedades não são o caminho certo para fazê-lo: os descritores de implantação, o repositório de configurações, etc., são a resposta correta.

Para a configuração, a ideia mais comum é commons config , que permite armazenar sua configuração como XML / texto. Tem alguns recursos: permite XPath como o acesso de configuração, permite acessar elementos de configuração com valores múltiplos como uma lista, etc.,.

O menos favorecido de todos é aquele que você especificou. Mesmo isso parece estar quebrado, pois é de um caminho específico relativo / absoluto. Idealmente, o arquivo deve estar no caminho de classe e deve ser lido de SystemClassLoader como InputStream nas Propriedades.

Espero que isso ajude.

    
por 13.08.2015 / 20:05
fonte