您可以在属性文件中提到你的变量属性和定义特定于环境的属性文件,如local.properties,production.propertied等。
现在基于环境,这些属性文件中的一个可以在启动时调用的侦听器中读取,如ServletContextListener。
属性文件将包含各种键的环境特定值。
样本 “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
样本“生产。属性”
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
[email protected]
对于使用这些属性文件,你可以利用的资源为下面提到
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可以被定义为本地和生产环境的相应值的环境变量。
通过这些更改,应用程序Context.xml将进行以下更改
<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}" />
希望这会有所帮助。
什么是java ... -Denv = QA的含义? – 2012-01-18 14:47:50
您设置了一个java系统属性值。你可以像'assert System.getProperty(“env”)==“QA”那样在代码中读取这个值;' – amra 2012-01-20 17:14:08
我认为这个答案是不正确的,这不允许读取系统环境变量(即OS级别的变量'export'等),它只允许读取Java系统属性。 – amoe 2013-11-15 13:24:48