在 Tomcat 重新加载后保留不可序列化对象的值



我的程序需要经过大约15分钟的学习步骤才能完成。学习的结果是将两个模型存储到两个公共对象中,然后在其他类中使用。我把这个学习步骤放在以下方法中:

public void init()

以便在服务器启动时执行。问题是,每次服务器重新加载时,它都会重新执行学习步骤。我不得不再等15分钟,看看一个小变化的效果。我想知道是否有一种方法可以在程序和服务器的整个运行过程中保留一些对象的值。这是我的代码:

public static Model model1;
public static Model model2;
@Override
public void init()
{
model1= readModel(source1)
model2= readModel(source2)
}

PS。我将Servlet与JSP页面和TomcatServer一起使用。

根据需要将其作为会话或应用程序范围的bean,并将其作为bean而不是普通对象进行访问。

作为一个通用的解决方案,我建议您保留学习部分和模型的服务容器。可能是不同的VM/进程。通过这种方式,您将能够在流程需要运行的时间内保留模型,而与作为tomcat的客户端流程的状态无关。

详细

只需几步即可实现

  • 首先,您需要将模型准备和缓存迁移到不同的程序中。该程序将作为守护程序运行,您可以使用Apache的守护程序将其作为后台服务运行
  • 其次,假设您的守护进程已经启动并运行,那么您的模型使用者可以使用标准协议与模型VM通信。协议的选择取决于您的确切要求。它可以是通过TCP/HTTP或RMI或任何其他方式公开的API

可选

正如我在评论中所建议的,一旦模型经过训练,您还可以将模型二进制文件转储到文件系统中。在tomcat启动时缓存模型。io将比学习阶段快得多。

你可以看看这里吗?想法是要么把会话保存在某个地方,然后把你的模型对象放在那里,要么只使用Hazelcast(可能是过度使用:)

最新更新