spring – Tomcat 6/7 – 如何覆盖Web应用程序中的属性文件?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了spring – Tomcat 6/7 – 如何覆盖Web应用程序中的属性文件?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2480字,纯文字阅读大概需要4分钟。
内容图文
![spring – Tomcat 6/7 – 如何覆盖Web应用程序中的属性文件?](/upload/InfoBanner/zyjiaocheng/786/a91c313bcb8149b7b6bb2759c9cbbee7.jpg)
我继承了Web应用程序的责任,它管理属性文件的方式似乎错了.属性文件在WAR文件中提供,并驻留在目录中:
<tomcat>/webapps/<my web app>/WEB-INF/classes
对于我们的Web应用程序的首次安装程序,这很好.默认属性文件具有许多默认设置,并且以这种方式指定的默认值似乎比将值硬编码到Java代码中要好.
此文件仅在Tomcat启动时读取,但可以由运行的Web应用程序随时更新.
每当客户需要升级软件时,他们必须执行以下步骤
>停止tomcat以停止Web应用程序.
>制作文件的副本:foo.properties
>删除现有的Web应用程序目录
>部署新的war文件(纯粹解压缩)
>停止tomcat(再次!)
>将旧的foo.properties复制到新的(在WEB-INF / classes中)
>重启tomcat.
这看起来很冗长且容易出错 – 我们经常让用户意外擦除其属性文件.当然属性文件应该以某种方式外化?我喜欢包含默认值的WAR文件的想法,但如果在类路径中找到另一个名为foo.properties的文件,是否有一种覆盖这些值的方法?我真的希望新的部署是:
>停止Web应用程序
>部署新的Web应用程序
它会从外部化的位置获取属性.
Tomcat是否提供了执行此操作的任何技术,或者我是否应该简单地更改Java代码以查找属性文件(例如用户的主目录)?
在写这个问题时,我遇到了对conf / catalina.properties的引用,以及如何使用它来指定在WEB-INF / classes之前读取的目录.但是修改common.loader和shared.loader似乎绝对没有效果!我从这里获得了这些信息:http://tomcat.apache.org/tomcat-7.0-doc/class-loader-howto.html.
任何建议都非常感谢.
UPDATE
属性文件正在通过Spring加载. beans文件具有以下内容:
<value>classpath:foo.properties</value>
现在我可以改变使用此属性文件的bean实例化的方式,并具有属性文件的不同加载机制.但是,由于Spring只是查看类路径以获取foo.properties,因此简单地将客户属性文件放在类路径上似乎是合乎逻辑的.
解决方法:
如果我是您的客户,我也不会喜欢您当前的升级机制.我喜欢将属性分配给默认值的想法,但客户可以选择覆盖它们.这是实现它的一种方法.有两个属性文件default.properties和external.properties. default.properties具有默认值,而另一个为空,可供客户使用.客户只是不接触default.properties.您可以在/ webapps // WEB-INF / classes中保留default.properties的位置.另一个属性文件可以是任何位置,您可以使用系统属性指定它.让我们说你决定把它放在
/home/customer/external.properties
现在更改您的java代码,以便它加载default.properties,然后加载external.properties.如果在两个文件中都定义了属性,则首选external.properties中的属性.在文件中
$TOMCAT_HOME/bin/setenv.sh
声明以下环境变量
export JAVA_OPTS="-Dexternal.props=/home/customer/external.properties"
如果您在Windows上,则在setenv.bat中声明环境变量.现在您应该能够访问external.properties文件了
Properties properties = new Properties();
try {
properties.load(new FileInputStream(System.getProperty("external.props")));
} catch (IOException e) {
...
}
内容总结
以上是互联网集市为您收集整理的spring – Tomcat 6/7 – 如何覆盖Web应用程序中的属性文件?全部内容,希望文章能够帮你解决spring – Tomcat 6/7 – 如何覆盖Web应用程序中的属性文件?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。