Carregar propriedades específicas do ambiente para uso com PropertyPlaceholderConfigurer?

Parece um problema bastante comum, mas não encontrei nenhum tipo de consenso sobre o melhor método, por isso estou fazendo a pergunta aqui.

Estou trabalhando em um aplicativo Java de linha de comando usando o Spring Batch e o Spring. Estou usando um arquivo de propriedades junto com um PropertyPlaceholderConfigurer, mas estou um pouco inseguro sobre a melhor maneira de lidar com os arquivos de propriedades para vários ambientes (dev, test, etc.). Meu Google está apenas desenvolvendo maneiras programáticas de carregar as propriedades (ou seja, no próprio código Java), o que não funciona para o que estou fazendo.

Uma abordagem que considerei é simplesmente colocar o arquivo de propriedades de cada ambiente no servidor e adicionar o diretório do arquivo ao caminho de classe por meio de um argumento da linha de comando, mas estou tendo problemas para carregar o arquivo usando esse método.

O outro método que estou considerando é incluir apenas todos os arquivos de propriedades no jar e usar uma propriedade do sistema ou um argumento de linha de comando para preencher o nome do arquivo de propriedades no tempo de execução, assim:

<bean id="propertyConfigurer"
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <list>
            <value>classpath:job.properties.${env}</value>
        </list>
    </property>
</bean>

Eu me inclino para a última solução, mas também estou procurando ver se há um método melhor que estou ignorando.

Também devo mencionar que tenho que fazer a substituição no tempo de execução, e não na compilação. O processo que sou obrigado a usar requer uma única compilação que será promovida pelos ambientes para produção, portanto, não posso usar a substituição ala Maven ou Ant.

questionAnswers(9)

yourAnswerToTheQuestion