WAR打包应用程序的配置文件

时间:2012-02-25 09:40:54

标签: java servlets configuration war

当您使用脚本语言开发webapp时,您在项目的目录树中有一个文件,其中配置在部署时定义,并在运行时读取以进行初始化。将Web应用程序部署为已编译的WAR文件时,情况会发生显着变化,因为您既无法访问任何目录树,也无法编辑存档内容。

这是我的方案:我的应用程序需要smtp.properties才能在运行时发送电子邮件,因此该文件包含某些敏感信息,我不想与其他Web应用程序共享。这意味着我不会将文件放在$CLASSPATH中。另一种选择是检查已知位置,但这具有明显的可移植性问题。仅举一例:在Linux上你有/etc,在Windows上没有/etc

目前我使用ServletContext.getInitParameter(String)读取设置,但这会对数据格式施加约束,实际文件的位置取决于servlet容器。

所以我的最终答案是:在JavaEE的土地上与config.php(或config.yml)最接近的匹配是什么?

免责声明我读了很多类似的问题,似乎简短的回答是没办法的。如果您希望在部署时覆盖其他组件的设置(如日志记录),这也很麻烦

2 个答案:

答案 0 :(得分:1)

在Java EE世界中,走的路是每个JNDI。在Web应用程序中,您可以通过标准化的JNDI API读取配置设置。这包括SMTP的登录凭据,以及配置的数据库连接等。

有关详细信息,请阅读我对类似问题的回答:How to portably read configuration data from a servlet

答案 1 :(得分:0)

在Java中,相当于config.php文件肯定是WEB-INF中的web.xml文件。我没有看到the actual file's place depends on the servlet container的问题,你从未指定读取参数的路径,没有?

顺便说一下,如果你想在战争中创建自己的属性文件,可以使用以下方法访问它:

URL propPath = getClass().getResource("your_relative_path");