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

时间:2010-07-01 17:49:46

标签: java web-applications tomcat ubuntu

我的Java Web应用程序(myapp.war)已部署在Ubuntu 10.04上的Tomcat上的webapps目录中。

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

那么Web应用程序应该在哪里存储其数据?我希望它不是webapps direcotry中提取的存档。这个可以很容易地被删除。并且可以配置Tomcat,而不是提取.war文件。然后就没有提取的目标了。

也许root应该属于用户/var/lib/tomcat6/蚂蚁这是Ubuntu中的错误?

5 个答案:

答案 0 :(得分:4)

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

参见Servlet Specification 2.3,第3章Servlet上下文

  

3.7.1临时工作   目录

     暂时的方便   每个都需要存储目录   servlet上下文。 Servlet容器   必须提供私人临时   每个servlet上下文的目录和   通过它提供    javax.servlet.context.tempdircontext   属性。与之关联的对象   属性必须是   输入java.io.File

答案 1 :(得分:2)

我认为这取决于您正在处理的数据类型。大多数情况下,数据进入数据库只是因为它可以快速轻松地执行CRUD。如果你想存储本地化的用户配置并且你不关心它的可移植性,也许你可以存储在user.home下,我为我的一个项目做了这个并且工作正常。所有这一切,我真的不认为这有任何最佳实践,数据库似乎是最明显的选择,因为你可以完成许多不同的任务,而且大多数都可以自由开始。 :)

答案 2 :(得分:2)

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

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

答案 3 :(得分:2)

回答他自己的问题,Witek说/var/lib/tomcat6/webapps/ is writable - 至少在他安装他的Ubuntu版本时。在我的RHEL 5.2系统/var/lib/tomcat<X>甚至不存在,因此没有webapps子目录可写或不可写,这导致我的回答。

问: Java Web应用程序应该在哪里存储其数据? A:只要您将其配置为存储数据。

使位置可配置,在web.xml中作为<context-param>或myApplication.properties文件。

  • 我可以将它放在我想要的盒子上,SysAdmins可以将它放在他们想要的生产系统上。
  • 你可以稍后改变主意。
  • 您不需要符号链接( 之前我已经神奇地消失了,打破了系统。)
  • 您可以拥有多组测试数据,只需将配置指向您想要的任何一个。
  • 您可以将它放在有磁盘空间的地方。
  • 以后会改变主意。

答案 4 :(得分:0)

我没有看到任何关于你应该在本地存储这类数据的具体指导 - 可能是因为你通常将这种数据存储在数据库中。

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