作spring web的同窗可能都會遇到開發環境與部屬環境不一致的狀況,好比說數據庫的用戶名與密碼,單點登陸服務器的域名,等等,要是每回開發完成須要部署時都再去改一遍配置文件豈不是很是麻煩。mysql
因而,我在我得一個項目中實踐了一種可以在部署時無需修改配置文件的方法,他的關鍵就是使用spring的 <util:properties> :
web
<context:property-placeholder properties-ref="app"/> <!-- spring的<util:properties>有這樣兩點特性: 1.默認狀況下spring會用外部properties文件中的properties替換掉「local」的properties(也就是使用<prop>配置的properties) 2.配置了「ignore-resource-not-found=true」就會忽略找不到的properties文件 利用這兩點特性,將開發級的環境寫在外部properties文件中,並設置成「ignore-resource-not-found=true」,同時將生產級的環境寫在<prop>中,這樣,當部署後由於忽略了找不到的外部properties文件,因此天然就使用了<prop>中定義的properties; 同時,在開發環境中,由於可以找到外部的properties文件,因此外部配置(開發級配置)就會覆蓋掉local的配置(生產級配置)。 經過這樣的方法在部署時就不需修改任何配置了。 --> <util:properties id="app" ignore-resource-not-found="true" location="file:C:/Dev/workspace/admin/user/src/main/resources/app-config.properties"> <!-- 生產環境 --> <prop key="dataSource.url">jdbc:mysql://localhost:3306/admin_user</prop> <prop key="dataSource.username">dev</prop> <prop key="dataSource.password">pass</prop> <prop key="hibernate.hbm2ddl.auto">validate</prop> <prop key="hibernate.show_sql">false</prop> <prop key="cas.service">somedomain:8444/user</prop> <prop key="cas.server">somedomain:8444/cas</prop> <prop key="cas.key">CAS_KEY_ADMIN.USER</prop> </util:properties>
spring的<util:properties>有這樣兩點特性:
1.默認狀況下spring會用外部properties文件中的properties替換掉「local」的properties(也就是使用<prop>配置的properties)
2.配置了「ignore-resource-not-found=true」就會忽略找不到的properties文件
利用這兩點特性,將開發級的環境寫在外部properties文件中,並設置成「ignore-resource-not-found=true」,同時將生產級的環境寫在<prop>中,這樣,當部署後由於忽略了找不到的外部properties文件,因此天然就使用了<prop>中定義的properties;
同時,在開發環境中,由於可以找到外部的properties文件,因此外部配置(開發級配置)就會覆蓋掉local的配置(生產級配置)。
經過這樣的方法在部署時就不需修改任何配置了。
spring