Como diferenciar entre propriedades de teste e produção em um aplicativo?

Estamos desenvolvendo uma grande solução de e-sales para J2ee. Ele tem muitas integrações: CMS, ERP, Mail server etc. Todos esses sistemas são divididos em ambientes de teste e produção.

Precisamos implantar nosso aplicativo em nossos servidores de teste com configuração de teste e, quando implantado em nossos servidores de produção, ele deve usar a configuração de produção. Como podemos fazer nosso aplicativo selecionar as propriedades corretas?

A coisa que tentamos até agora é esta:

Todos os nossos arquivos de propriedades contêm propriedades de teste e propriedades de produção

test.mvxapi.server = SERV100TS
test.mvxapi.username = user
test.mvxapi.password = password
test.mvxapi.port = 6006
test.mvxapi.cono = 600

mvxapi.server = SERV10001
mvxapi.username = user
mvxapi.password = password
mvxapi.port = 6001
mvxapi.cono = 100

O Util que lê essas propriedades possui um switch: isTest () que prefixa a chave com "test".

public String getProperty(String property)
{
    return properties.getProperty(prefix + "" + property);
}

O switch é definido por outra propriedade que é criada pelo nosso servidor de compilação. Quando o .EAR é construído, o script para nossos servidores de produção é inserido (input to build.xml) "isProduction = true" em system.properties.

<propertyfile file="${buildDir}/system.properties">
        <entry  key="isProduction" value="${systemType}"/>
    </propertyfile>

Não tenho certeza se essa é a melhor maneira de fazer isso. Se por algum motivo "isProduction = false" é cometido de forma errada para o nosso ambiente de produção, todo o inferno é solto.

Eu li as pessoas têm propriedades localmente no servidor. Mas nós realmente não queremos ter arquivos espalhados. Temos cluster de servidores de produção. Certificar-se de que cada servidor tenha o arquivo de propriedades correto não parece ser a prova de falhas

questionAnswers(5)

yourAnswerToTheQuestion