您可以在屬性文件中提到你的變量屬性和定義特定於環境的屬性文件,如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