Pergunta

Você pode ter um conjunto de propriedades que é usado na máquina do desenvolvedor, que varia de desenvolvedor para o desenvolvedor, um outro conjunto para um ambiente de teste, e ainda outro para o ambiente de produção.

Em um aplicativo Primavera você também pode ter feijão que você deseja carregar em um ambiente local, mas não em um ambiente de produção, e vice-versa.

Como você lida com isso? Você usa arquivos, formiga / recurso maven separado filtragem ou outras abordagens?

Foi útil?

Solução

Acabei de colocar as várias propriedades em JNDI. cada um dos servidores desta forma pode ser configurado e eu posso ter um arquivo de guerra. Se a lista de propriedades é grande, então eu vou acolher as propriedades (ou XML) arquivos em outro servidor. Vou usar JNDI para especificar a URL do arquivo para uso.

Se você estiver criando diferentes arquivos de aplicativos (guerra / ouvido) para cada ambiente, então você não está implantando a mesma guerra / ouvido que você está testando.

Em um dos meus apps, usamos vários serviços REST. Acabei de colocar a url raiz em JNDI. Então, em cada ambiente, o servidor pode ser configurado para se comunicar com o serviço REST adequada para esse ambiente.

Outras dicas

Eu só usar diferentes arquivos de configuração XML do Spring para cada máquina, e certifique-se que todos os bits de dados de configuração que variam entre máquinas é referenciado por feijão que a carga a partir desses arquivos de configuração da Primavera.

Por exemplo, eu tenho um webapp que se conecta a uma interface Java RMI de outro aplicativo. Meu aplicativo obtém o endereço de interface de RMI este outro aplicativo através de um feijão que está configurado no arquivo de configuração XML da Primavera. Tanto o meu aplicativo e o outro aplicativo tem dev, teste e instâncias de produção, então eu tenho três arquivos de configuração para meu aplicativo - que corresponde à configuração apropriada para a instância de produção, uma para a instância de teste, e um para o dev exemplo.

Então, a única coisa que eu preciso para manter em linha reta é que arquivo de configuração é distribuído para cada máquina. Até agora, eu não tive quaisquer problemas com a estratégia de criação de tarefas Ant que lidam copiar o arquivo de configuração correta no lugar antes de gerar o meu arquivo WAR; Assim, no exemplo acima, que tem três tarefas Ant, que gera o WAR produção, um que gera o WAR dev, e um que gera o WAR teste. Todas as três tarefas alça copiar o arquivo de configuração para a direita no lugar certo, e depois chamar o mesmo na próxima etapa, que é a compilação do aplicativo e criar o WAR.

Espero que isso faz algum sentido ...

Usamos arquivos de propriedades específicos para os ambientes e fazemos com que o ant build selecione o conjunto correto ao construir os jars/wars.

Coisas específicas do ambiente também podem ser tratadas por meio do serviço de diretório (JNDI), dependendo do seu servidor de aplicativos.Usamos o Tomcat e nosso DataSource é definido na implementação JNDI somente leitura do Tomcat.Spring torna a pesquisa muito fácil.

Também usamos a estratégia ant para construir sites diferentes (conteúdo diferente, funções de segurança, etc.) a partir do mesmo projeto de origem.

Há uma coisa que nos causa alguns problemas com esta estratégia de construção, e é que muitas vezes os arquivos e diretórios não existem até que a construção seja executada, então isso pode dificultar a escrita de verdadeiros testes de integração (usando o mesmo conjunto de primavera como quando implantado) que podem ser executados no IDE.Você também perde parte da capacidade do IDE de verificar a existência de arquivos, etc.

Eu uso o Maven para filtrar os recursos em src/main/resources no meu projeto.Eu uso isso em combinação com arquivos de propriedades para obter atributos personalizados em meus projetos baseados em Spring.

Para compilações padrão, tenho um arquivo de propriedades em meu diretório inicial que o Maven usa como substituições (para que coisas como minha instalação local do Tomcat sejam encontradas corretamente).Servidor de teste e servidor de produção são meus outros perfis.Um simples -Pproduction é tudo o que é necessário para criar um aplicativo para meu servidor de produção.

Use arquivos de propriedades diferentes e filtros ant replace que farão a substituição com base no ambiente para o qual a construção foi feita.Ver http://www.devrecipes.com/2009/08/14/environment-specific-configuration-for-java-applications/

Arquivos de configuração separados, armazenados no repositório de controle de origem e atualizados manualmente.Normalmente a configuração não muda radicalmente entre uma versão e outra, portanto a sincronização (mesmo manualmente) não é realmente um grande problema.

Para sistemas altamente escaláveis ​​em ambientes de produção eu seriamente recomendamos um esquema no qual os arquivos de configuração são mantidos em modelos e, como parte do script de construção, esses modelos são usados ​​para renderizar arquivos de configuração "finais" (todos os ambientes devem usar o mesmo processo).

Recentemente, também usei o Maven para configurações alternativas para ambientes ao vivo ou de teste. Configuração de produção usando perfis Maven.Espero que ajude.

Eu uso a cópia do Ant com um arquivo de filtro.No diretório com o arquivo de configuração com variáveis ​​tenho um diretório com um arquivo para cada ambiente.O script de construção conhece o ambiente e usa o arquivo de variável correto.

Tenho diferentes pastas de configuração que contêm as configurações da implantação de destino e uso o ANT para selecionar aquela a ser usada durante o estágio de cópia do arquivo.

Usamos diferentes alvos de formigas para diferentes ambientes.A maneira como fazemos isso pode ser um pouco deselegante, mas funciona.Diremos apenas a certos alvos ant para filtrar diferentes arquivos de recursos (que é como você pode excluir o carregamento de certos beans), carregar diferentes propriedades do banco de dados e carregar diferentes dados iniciais no banco de dados.Na verdade, não temos um 'especialista' em formigas por aí, mas somos capazes de executar nossas compilações com configurações diferentes a partir de um único comando.

Uma solução que vi ser usada é configurar o ambiente de teste para que seja idêntico ao ambiente de produção.Isso significa que cada ambiente possui uma VLAN com o mesmo intervalo de IP e funções de máquina nos mesmos endereços IP (por exemplo,o IP do cluster de banco de dados é sempre 192.168.1.101 em cada ambiente).Os firewalls mapearam endereços externos para os servidores web, portanto, ao trocar os arquivos host no seu PC, o mesmo URL poderia ser usado - http://www.myapp.com/webapp/file.jsp iria para teste ou produção, dependendo de qual arquivo de hosts você trocou.

Não tenho certeza se esta é uma solução ideal, é bastante complicada de manter, mas é interessante notar.

Caleb P e JeeBee provavelmente têm a solução mais rápida.Além disso, você não precisa configurar serviços diferentes ou apontar arquivos em máquinas diferentes.Você pode especificar seu ambiente usando uma variável ${user.name} ou especificando o perfil em um argumento -D para Ant ou Maven.

Além disso, nesta configuração, você pode ter um arquivo de propriedades genérico e substituir arquivos de propriedades para ambientes específicos.Tanto o Ant quanto o Maven oferecem suporte a esses recursos.

Não se esqueça de investigar o PropertyPlaceholderConfigurer - isso é especialmente útil em ambientes onde o JNDI não está disponível

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