我们面临在服务器启动或应用程序部署时初始化缓存的问题。初始化缓存涉及
- 查询数据库以获取项目列表
- 对每个项目进行 rmi 调用
- 侦听 JMS 队列/主题上的数据
- 构造缓存
这个初始化过程在启动代码中。所有这些都需要大量时间,因为部署需要大量时间或服务器启动时间正在增加。
所以我的建议是在启动时创建一个线程,并在其中运行初始化代码。我编写了一个示例应用程序来演示它。
它涉及一个 ServletContextListener,一个过滤器。在侦听器中,我正在创建一个新线程,HeavyProcess 将在其中运行。当它完成时,将触发过滤器正在侦听的事件。收到事件后,过滤器将允许传入的 http 请求。在此之前,过滤器会将所有客户端重定向到默认页面,该页面显示应用程序正在初始化的消息。
我提出了这种方法,很少有人提出担忧。
- 理想情况下,我们不应该创建线程,因为处理线程会很困难。
我的问题是为什么我们不能在 Web 应用程序中创建这样的线程。
如果这不好,那么最好的方法是什么?