[英]Storing java objects in memory in a Java jar project
[英]Storing java objects in server memory
我得到了一个处理多个对象的Java Web项目(再次包含n个类型为A的对象(例如,时间和值)和m个类型为B的对象(例如,时间和字符串数组)。 Web项目本身包含多个用于可视化的servlet / jsps以及一些用于数据处理的逻辑,并且当前在Apache Tomcat上运行。
在服务器运行时,是否可以将整个数据存储在服务器(或大部分时间:本地)中? 如果Tomcat关闭,则数据可以存储在一个简单的文件中,那里没有任何限制。 在服务器启动时,我只想读取文件并将对象写入内存。 我该如何启动Tomcat?
我不想使用额外的数据库的原因是,我想提供一个包含tomcat的zip文件,其中包括已部署的* .war文件(因为我不希望我的教授陷入tomcat服务器设置等问题)。
谢谢,ChrisH
您可以实现ServletContextListener
并在分别在webapp的启动和关闭期间调用的contextInitialized()
和contextDestroyed()
方法中编写从文件加载和保存到文件的逻辑。
您可以在磁盘上读写对象,但是它们都需要首先实现java.io.Serializable
。 这是带有代码示例的序列化教程 。
就是说,您是否考虑过嵌入式数据库,从而无需安装数据库服务器? 您可以为此使用JDK6的内置JavaDB或它的竞争对手HSQLDB 。 另外,如果它们是纯键-值对,那么您也可以为此使用java.util.Properties
API( 此处是教程 )。 只需将propertiesfile放在类路径中的某个位置,然后使用ClassLoader#getResourceAsStream()
来获取它的InputStream
,或者将其放在WEB-INF
某个位置,然后使用ServletContext#getResourceAsStream()
。
我认为HSQLDB正是您所需要的,这是一种小型数据库服务器,它也原生嵌入在Apache Tomcat中。 它将数据存储在内存中,还可以从文件中写入和读取内容。
如果应用程序意外关闭,您将丢失所有数据,因为它没有时间将其写入磁盘。
您可以使用SQLite / derby / hsql等数据库将其数据存储到文件系统中。
如果您不想弄乱数据库,则可以将所有内容存储在内存中,并在每次修改时将其刷新到磁盘上。 这里有几个提示:
如果您不关心应用程序可能乱写所有数据文件,Tomcat / JVM崩溃或计算机可能丢失所有内存中对象而死的可能性,那么可以按照建议的方式管理持久性。 但是您将拥有大量的基础架构来构建,测试和维护。 而且您会错过大多数RDBM提供的“增值”工具。 备份,查询工具,优化器,复制等。
但是,如果灾难性的数据丢失不是您的选择,则应使用RDBM,ODBM来保持持久性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.