在Java Web应用程序(WAR)中存储配置文件的最佳位置是什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (32)

我创建一个Web应用程序(WAR)并将其部署到Tomcat上。在Web应用程序中,有一个页面,其中有一个表单,管理员可以输入一些配置数据。我不想将这些数据存储在DBMS中,而只是存储在文件系统上的XML文件中。在哪里放?

我想将文件放在应用程序本身所在的目录树的某个位置。我的配置文件应该位于WEB-INF目录中吗?或者把它放在别的地方?

什么是在servlet中使用的Java代码来查找目录的绝对路径?还是可以用相对路径访问?

提问于
用户回答回答于

我们所做的就是把它放在服务器上的一个单独目录中(可以使用/ config,/ opt / config,/ root / config,/ home / username / config或任何你想要的东西)。当我们的servlet启动时,他们读取XML文件,从中获取一些信息(最重要的是DB连接信息),就是这样。

我问了我们为什么这么做过一次。

将所有内容存储在数据库中将会很好,但很显然,您不能在数据库中存储数据库连接信息。

你可以在代码中对代码进行硬编码,但由于很多原因,这很丑陋。如果信息必须更改,则必须重新生成代码并重新部署。如果有人获得您的代码或WAR文件的副本,他们会获得该信息。

把东西放在WAR文件中看起来不错,但如果你想改变很多东西,这可能是一个坏主意。问题是如果你必须改变这些信息,那么下次你重新部署时,它会覆盖这个文件,所以你忘了在WAR中内建的版本中记不得改变的东西。

该文件在文件系统的特殊位置对我们来说效果很好。它没有任何大的缺点。你知道它在哪里,它被分开存储,如果它们都需要不同的配置值(因为它不是WAR的一部分),就可以轻松部署到多台机器。

我能想到的唯一的另一个解决方案可以很好地保持数据库中除了数据库登录信息之外的所有内容。这将来自通过JVM检索的Java系统属性。这是上面Hans Doggen提到的Preferences API。当我们的应用程序第一次被开发时,我认为它不在身边,如果它没有被使用。

至于访问配置文件的路径,它只是文件系统上的一个文件。您不必担心网络路径。所以当你的servlet启动时,它只是在“/config/myapp/config.xml”(或其他)上打开文件,它会找到正确的东西。只是硬编码这个路径对我来说似乎是无害的。

用户回答回答于

WEB-INF是放置你的配置文件的好地方。这里有一些代码可以从servlet获取目录的绝对路径。

public void init(ServletConfig servletConfig) throws ServletException{
    super.init(servletConfig);
    String path = servletConfig.getServletContext().getRealPath("/WEB-INF")

扫码关注云+社区