¿Cargar propiedades específicas del entorno para usar con PropertyPlaceholderConfigurer?

Esto parece un problema bastante común, pero no he encontrado ningún tipo de consenso sobre el mejor método, así que estoy planteando la pregunta aquí.

Estoy trabajando en una aplicación Java de línea de comandos usando Spring Batch y Spring. Estoy usando un archivo de propiedades junto con un PropertyPlaceholderConfigurer, pero no estoy seguro de la mejor forma de manejar los archivos de propiedades para múltiples entornos (dev, test, etc.). Mi Google solo está activando formas programáticas de cargar las propiedades (es decir, en el propio código Java), lo que no funciona para lo que estoy haciendo.

Un enfoque que he considerado es simplemente colocar el archivo de propiedades de cada entorno en el servidor y agregar el directorio del archivo al classpath a través de un argumento de línea de comandos, pero he tenido problemas para cargar el archivo usando ese método.

El otro método que estoy considerando es incluir todos los archivos de propiedades en el jar y usar una propiedad del sistema o un argumento de línea de comando para completar el nombre del archivo de propiedades en tiempo de ejecución, como este:

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

Me inclino hacia la última solución, pero también estoy buscando ver si hay un mejor método que estoy pasando por alto.

También debo mencionar que tengo que hacer la sustitución en tiempo de ejecución en lugar de en la compilación. El proceso que estoy obligado a usar requiere una sola compilación que se promoverá a través de los entornos para la producción, por lo que no puedo usar la sustitución de Maven o Ant.

Respuestas a la pregunta(9)

Su respuesta a la pregunta