我正在尝试将一个遗留应用程序迁移到jee 7。作为部署的一部分,我们在启动服务器上加载了一些初始化的缓存。反过来,这些缓存被其他类使用。
遗留实现按顺序对它们进行初始化。我正在尝试并行初始化它们,以节省部署时间。
我正在使用ManagedThreadFactory.newThread(callable).start();
问题是,线程在部署之后或部署结束时开始初始化。这会导致其他类中的NPE依赖于缓存。
有没有什么方法可以并行初始化缓存,一旦缓存初始化完成,其余的部署就应该继续进行。
发布于 2017-04-04 03:02:47
我建议使用ServletContextListener进行更改。您可以在那里启动线程,但不同之处在于,您将等待它们在contextInitialized方法中返回。这样,直到servlet上下文初始化完成后,servlet才会启动。老实说,这比启动servlet更好,并且在JEE7之前就能很好地工作。
代码应该类似于:
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
@WebListener
public class YourContextListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
// create the caches - you can still thread them for faster startup
// but don't return until they are all initialized
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
// tear down the caches?
}
}https://stackoverflow.com/questions/43185704
复制相似问题