War包与配置文件分离

背景

WAR包和配置文件分离,这应该是个老生常谈的问题了。一直没怎么深入研究。今天抽空看了下Spring Resource相关的介绍和代码。然后得出一个结论:这事很简单。

一般解决方法

一般我们都会使用properties文件,然后在xml中引用properties文件。一般用法如下:

<context:property-placeholder location="classpath:jdbc.properties"/>

就是这样,加载classpath下面的文件,很常见。 然后为了解决不同环境,配置不同的问题引入了profile的概念。Spring自身提供了Profile功能,Maven也提供了Profile功能。

二般解决方案

一般解决方案的原则就是:提前做好准备。给谁用,打谁的包。
但是,你懂的。天有不测风云,人有毫无准备。能支持临时改配置的包才是好包。
那怎么办?看这里:

<context:property-placeholder ignore-resource-not-found="true" location="classpath:jdbc.properties,/jdbc.properties,file:#{systemProperties['catalina.home']}/conf/appX.properties,file:/usr/local/appConfig/appX.properties"/>

配置解析如下:

  • ignore-resource-not-found="true" 这个配置,意思是找不到文件也不报错。只会在日志中输出一句warning。
  • classpath:jdbc.properties 都懂,不用说
  • /jdbc.properties 由于是WEB工程,这里就指的是ServletContext.getRealPath("/jdbc.properties")这个文件。场景:有些时候我们把jdbc.properties打包到了jar中,没法改。于是我们在web根目录下放一个jdbc.properties,这个文件会覆盖jar中的jdbc.properties配置。这样操作,其实还是对war有侵入的,毕竟要先解压才能放,并且重新部署很容易误删该文件。
  • file:#{systemProperties['catalina.home']}/conf/appX.properties 指的是tomcat/conf/appX.properties这个文件。好了,这次是在war外面,并且是一个相对于tomcat根目录的相对路径。只要tomcat不动,重新发布更换WAR包,毫无影响。
  • file:/usr/local/appConfig/appX.properties 这个操作更绝了。可能你部署了多个应用,想把所有程序的配置统一放置到/usr/local/appConfig目录中。这样不管更换tomcat还是更换war都毫无影响。
  • 以上配置顺序很重要。按照Spring的流程,后面文件中的配置项,会覆盖掉前面文件中的。如果后面的文件不存在,不影响大局,只要列表中任意一个存在就行。

是不是有点像Spring Boot的套路。配置文件的加载遵循一个既定的顺序,每个环节有不同的优先级。

转载于:https://my.oschina.net/huanger/blog/1830579

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值