【问题标题】:Where/how to store persistent data with tomcat?用tomcat在哪里/如何存储持久数据?
【发布时间】:2009-11-24 20:13:34
【问题描述】:

我应该将持久性文件存储在 Tomcat Web 应用程序的什么位置?

  • javax.servlet.context.tempdir 不可行,在重新部署/删除应用程序时将其删除
  • 不想使用绝对路径,例如servlet 初始化参数
  • 不能将文件存储在数据库中

【问题讨论】:

  • 我认为您不想使用数据库?
  • 你必须解释为什么数据库不是一个选项,它们是如此基本和常见,以至于不允许它肯定意味着其他事情正在发生。也许您处于我们应该知道的特别受限的环境中。
  • 这不是一个选项,因为它不是。我可以继续解释这些大文件需要如何由对数据库一无所知的遗留外部工具处理,并将它们显示到数据库中只是为了再次将它们拉出来,目前没有任何意义。还有更多,但请相信我的话 :-) –

标签: java tomcat


【解决方案1】:

我们的团队经常这样做。我们遵循的一般规则是在 Web 应用程序之外和 Tomcat 之外。

我们的系统管理员在我们的服务器上设置了一个目录,tomcat 用户拥有 rw 权限(例如/var/tomcat/persist)。我们在其下构建了一个目录结构,tomcat 使用它来存储文件、读取应用程序特定的 init 文件等。

如果您不想在您的 servlet 的 init-params 中使用绝对路径,请考虑在启动 tomcat 时设置系统属性。这样做的好处是在 Tomcat 下运行的每个应用程序都可以访问它。这样做的坏处是在tomcat 下运行的每个应用程序都可以访问它。您可以设置一个名为base.persist.dir 的属性,并为它下面的每个应用程序构建子目录。我们在 CATALINA_OPTS 环境变量下的 bin/ 目录下的 setenv.sh 脚本中设置系统属性。

【讨论】:

    【解决方案2】:

    回答问题的标题,使用数据库、DataSource 和 JDNI 怎么样?即使在纯 Web 环境中,也不建议使用 java.io 写入文件,因为存在并发、线程、安全、集群、可移植性问题。其中一些问题可以“解决”,但这仍然不是最佳实践。标准方法是使用数据库,我建议重新考虑这个选项,将“基于文件”的轻量级数据库(如 HSQLBD 或 JavaDB)加入其中。

    (编辑:由于未知原因,数据库不是一个选项。使用 JNDI 或上下文参数或初始化参数来传递 absolute 路径 - 这是不太糟糕的选项恕我直言 - 也被排除在外。对于 relative 路径,可以查看 user.homeuser.dir 然后 - 或您可以在命令行上传递的任何其他系统属性。我不喜欢它,我不会这样做它,这并不能解决前面提到的问题,但它毕竟是你的选择。)

    【讨论】:

    • 已澄清。数据库不是一个选项。
    【解决方案3】:

    将文件存储在运行 Tomcat 的用户主目录下的 webapp 目录中是一个很好且方便的选择。它在 Tomcat 之外,这意味着它可以在重新部署后继续存在,并且它通常是一个可写目录(因为它是在用户的主目录下创建的)。 但允许通过系统属性覆盖此类目录的位置始终是一个好主意。

    【讨论】:

      【解决方案4】:

      通常,这将转到数据库。但由于 OP 坚持不使用数据库,我会尝试不同的方法:

      • 已知的文件系统路径:${user.home}/.myapp。应用程序有时会使用它,例如可以根据数据库中的数据重新计算的搜索索引。您的用例可能可以使用用户的家
      • 将可配置的文件系统路径存储在配置库中,例如数据库或Java Preferences(如果您不喜欢使用 servlet init 参数)。 Atlassian JIRA 等商业应用程序使用可配置(但绝对)的文件系统路径来存储问题附件。如果他们不知道更好的方法,我不知道谁知道:)

      【讨论】:

      • 在 tomcat7 上(至少在 Ubuntu 上)写入 ${user.home} 会因为权限问题而导致 IOException。
      【解决方案5】:

      我通常建议使用数据库来存储持久数据并通过 DataSource 公开它。

      如果您不想这样做,我想您可以考虑使用“user.home”系统属性(我已经看到它在一些情况下使用过)。但是...除非您自己配置,否则无法保证您的 servlet 将以写入权限运行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-11-21
        • 2023-03-15
        • 1970-01-01
        • 2023-01-16
        • 1970-01-01
        • 2011-05-03
        • 1970-01-01
        相关资源
        最近更新 更多