Qual é o melhor lugar para armazenar um arquivo de configuração em uma aplicação web Java (WAR)?

StackOverflow https://stackoverflow.com/questions/96247

Pergunta

Eu criar um aplicativo web (WAR) e implantá-lo no Tomcat. Na webapp , há uma página com um formulário em que um administrador pode inserir alguns dados de configuração. Eu não quero para armazenar esses dados em um DBMS, mas apenas em um arquivo XML no sistema de arquivos. Onde colocá-lo?

Gostaria de colocar a algum lugar do arquivo na árvore de diretórios onde o próprio aplicativo é implantado. Deve ser o meu arquivo de configuração estar no WEB-INF diretório? Ou colocá-lo em outro lugar?

E o que é o código Java para usar em um servlet para encontrar o caminho absoluto do diretório? Ou ele pode ser acessado com um caminho relativo?

Foi útil?

Solução

O que fazemos é para colocá-lo em um diretório separado no servidor (você poderia usar algo como / config, / opt / config, / root / config, / home / username / config, ou qualquer coisa que você quiser). Quando nossos servlets arranque, eles ler o arquivo XML, obter algumas coisas fora dele (o mais importante DB informações de conexão), e é isso.

Eu perguntei sobre por que fizemos isso uma vez.

Seria bom para armazenar tudo no DB, mas, obviamente, você não pode armazenar informações de conexão DB no DB.

Você pode codificar as coisas no código, mas isso é feio, por muitas razões. Se a informação nunca tem que mudar você tem que reconstruir o código e redeploy. Se alguém recebe uma cópia do seu código ou seu arquivo WAR eles então obter essa informação.

Colocar as coisas no arquivo WAR parece bom, mas se você quiser mudar as coisas muito mais que poderia ser uma má idéia. O problema é que se você tiver que alterar as informações, então da próxima vez que você reimplantar ele substituirá o arquivo para qualquer coisa que você não lembre-se de mudança na versão sendo construído para a guerra fica esquecido.

O arquivo em um lugar especial na coisa sistema de arquivos funciona muito bem para nós. Ele não tem qualquer grandes desvantagens. Você sabe onde ele está, ele é armazenado seperatly, faz implantando em várias máquinas fácil se todos eles valores de configuração diferentes precisam (desde que não é parte da guerra).

A única solução que eu posso pensar que iria funcionar bem seria manter tudo no DB exceto o DB informações de login. Que viria de propriedades do sistema Java que são recuperados através da JVM. Essa coisa de Preferências API mencionado por Hans Doggen acima. Eu não acho que foi em torno de quando o nosso aplicativo foi desenvolvido pela primeira vez, se fosse ele não foi usado.

Quanto ao caminho para acessar o arquivo de configuração, é apenas um arquivo no sistema de arquivos. Você não precisa se preocupar com o caminho web. Assim, quando o servlet é inicializado, ele simplesmente abre o arquivo em "/config/myapp/config.xml" (ou qualquer outro) e vai encontrar a coisa certa. Apenas hardcodeing o caminho no para este parece bastante inofensivo para mim.

Outras dicas

WEB-INF é um bom lugar para colocar seu arquivo de configuração. Aqui está algum código para obter o caminho absoluto do diretório a partir de um servlet.

public void init(ServletConfig servletConfig) throws ServletException{
    super.init(servletConfig);
    String path = servletConfig.getServletContext().getRealPath("/WEB-INF")

Colocá-lo em WEB-INF vai esconder o arquivo XML de usuários que tentam acessá-lo diretamente através de uma URL, então sim, eu diria que colocá-lo em WEB-INF.

Eu não armazená-lo na pasta de aplicativos, porque isso iria substituir a configuração com uma nova implementação do aplicativo.

Eu sugiro que você dê uma olhada na API Preferências, ou escrever algo na pasta Users (o usuário que está executando o Tomcat).

A resposta para isso depende de como você pretende ler e escrever o arquivo de configuração.

Por exemplo, o framework Spring dá-lhe a capacidade de arquivos de configuração XML uso (ou Java arquivos de propriedade); estes podem ser armazenados em seu caminho de classe (por exemplo, no diretório WEB-INF), em qualquer outro lugar no sistema de arquivos, ou até mesmo na memória. Se você fosse para usar o Spring para isso, então o melhor lugar para armazenar o arquivo de configuração está em seu diretório WEB-INF, em seguida, usar da Primavera ClassPathXmlApplicationContext classe para acessar o arquivo de configuração.

Mas, novamente, tudo depende de como você pretende o acesso desse arquivo.

Se for a sua configuração customizado WEB-INF é um bom lugar para ele. Mas algumas bibliotecas pode exigir configurações para residir em WEB-INF / classes.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top