Java Web应用程序应该在哪里存储数据?

我的Java Web应用程序( myapp.war )是通过将其放置到Ubuntu 10.04上的Tomcat上的webapps direcotry进行部署的。

这个应用程序需要将一些数据保存在文件中。 但是,运行Tomcat的用户( tomcat6 )对主目录/usr/share/tomcat6/没有写访问权限,并且对当前工作目录/var/lib/tomcat6/没有写访问权限,因为两者都属于root

那么Web应用程序应该在哪里存储数据呢? 我希望这不是在webapps direcotry提取的档案。 这个可以很容易被删除,意外。 而Tomcat可以configuration,而不是提取.war文件。 那么就不会有提取任务了。

也许/var/lib/tomcat6/应该属于用户tomcat6 ant这是Ubuntu中的一个bug吗?

如果文件不需要比servlet上下文的生命周期持续更长的时间,servlet容器为每个servlet上下文提供一个私有临时目录,由javax.servlet.context.tempdir属性指定。

请参阅Servlet规范2.3 ,第3章Servlet上下文

3.7.1临时工作目录

每个servlet上下文都需要临时存储目录的便利性。 Servlet容器必须为每个servlet上下文提供一个私有临时目录,并通过javax.servlet.context.tempdircontext属性使其可用。 与属性关联的对象必须是java.io.File类型

我认为这取决于你正在处理的是什么样的数据。 大多数情况下,数据进入数据库只是因为执行一个CRUD是快速和容易的。 如果你想存储本地化的用户配置,你不在乎它是多么便携,也许你可以存储在user.home下,我做了我的项目之一,工作正常。 所有的说法,我真的不认为有什么最好的做法,数据库似乎是最明显的选择,因为你可以做很多不同的任务反对它,其中大部分是自由的开始。 🙂

在回答他自己的问题时,Witek声明/var/lib/tomcat6/webapps/ is writable ,至少在安装他的Ubuntu版本时是这样。 在我的RHEL5.2系统上, /var/lib/tomcat<X>甚至不存在,所以没有webapps子目录可写或不能导致我的答案。

问: Java Web应用程序应该在哪里存储数据?
答:无论你在哪里配置它来存储它的数据。

将位置配置为web.xml中的<context-param>或myApplication.properties文件。

  • 我可以把它放在我想要的地方,系统管理员可以把它放在生产系统所需的地方。
  • 以后可以改变主意。
  • 你不需要象征性的链接(它已经在我之前神奇地消失了,打破了系统)。
  • 您可以拥有多组测试数据,只需将配置指向您想要的任何一个即可。
  • 你可以把它放在任何有磁盘空间的地方。
  • 以后你会改变主意。

我在Launchpad上找到了解决方案。 /var/lib/tomcat6/webapps/是可写的。 这意味着,以下工作:

 File myFile = new File("webapps/myfile.txt"); 

我还没有看到有关应该在哪里存储这种数据的具体指导 – 可能是因为您通常将这种数据存储在数据库中。

当我需要存储这样的快速和肮脏的数据时,我将其存储在专门用于该数据的文件系统中,以将其与其他可能陷入其他活动的区域隔离。 到目前为止,这个方法还没有任何问题。 另外,如果这很重要,请确保将其存储在您备份的地方:)