做spring web的同学可能都会遇到开发环境与部属环境不一致的情况,比如说数据库的用户名与密码,单点登录服务器的域名,等等,要是每回开发完成需要部署时都再去改一遍配置文件岂不是非常麻烦。
于是,我在我得一个项目中实践了一种能够在部署时无需修改配置文件的方法,他的关键就是使用spring的 <util:properties> :
<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的配置(生产级配置)。
通过这样的方法在部署时就不需修改任何配置了。
来源:oschina
链接:https://my.oschina.net/u/323/blog/342067