Você pode mencionar seus atributos de variáveis em um arquivo de propriedades e definir arquivos de propriedades específicos do ambiente, como local.properties, production.propertied etc.
Agora, com base no ambiente, um desses arquivos de propriedade pode ser lido em um dos ouvintes chamados na inicialização, como o ServletContextListener.
O arquivo de propriedades conterá os valores específicos do ambiente para várias chaves.
Amostra de "local.propeties"
db.logsDataSource.url=jdbc:mysql://localhost:3306/logs
db.logsDataSource.username=root
db.logsDataSource.password=root
db.dataSource.url=jdbc:mysql://localhost:3306/main
db.dataSource.username=root
db.dataSource.password=root
Amostra "production.properties"
db.logsDataSource.url=jdbc:mariadb://111.111.111.111:3306/logs
db.logsDataSource.username=admin
db.logsDataSource.password=xyzqer
db.dataSource.url=jdbc:mysql://111.111.111.111:3306/carsinfo
db.dataSource.username=admin
db.dataSource.password=safasf@mn
Para usar esses arquivos de propriedades, você pode usar REsource conforme mencionado abaixo
PropertyPlaceholderConfigurer configurer = new PropertyPlaceholderConfigurer();
ResourceLoader resourceLoader = new DefaultResourceLoader();
Resource resource = resourceLoader.getResource("classpath:"+System.getenv("SERVER_TYPE")+"DB.properties");
configurer.setLocation(resource);
configurer.postProcessBeanFactory(beanFactory);
SERVER_TYPE pode ser definido como a variável de ambiente com valores apropriados para o ambiente local e de produção.
Com essas alterações, o appplicationContext.xml terá as seguintes alterações
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="${db.dataSource.url}" />
<property name="username" value="${db.dataSource.username}" />
<property name="password" value="${db.dataSource.password}" />
Espero que isto ajude .