如何在部署 java 网络应用程序时缓存数据库数据
How to Cache database data when deploying a java web app
所以我的问题是我想在部署我的应用程序时缓存一些 table 数据。在这种情况下,当应用程序部署在服务器(可能是 jboss 或 tomcat 服务器)时,我想根据一个 table 的数据制作哈希映射。
我知道如何使用 hibernate、JDBC 等,并且正常获取数据没有问题,但是当我在building/deploying申请?
这可能是一件非常简单的事情,但我不确定如何做,而且我似乎找不到任何好的指南。
非常感谢任何帮助。
您可以为此目的从 servlet 构建中调用它。然后,在您的 web.xml 中,将 servlet 设置为 runOnStartup 而不是 0。这会使 Web 服务器在加载应用程序时启动 servlet。
Of the 3 you mentioned above I'm familiar with Spring. Any advice on how I could achieve this with spring?
Spring beans 默认为单例范围,并在初始化 ApplicationContext 时创建(在部署时发生)。您可以要求 Spring 在使用 @PostConstruct
创建 bean 时调用方法,或者通过实现 InitializingBean
:
@Component
public class CategoriesCache {
@Inject
CategoryRepositoy repo;
private List<Category> cachedCategories;
@PostConstruct
void init() {
cachedCategories = repo.findAll();
}
}
如果您不想使用依赖项注入容器,可以使用 ServletContextListener
通知部署,并执行必要的初始化。
所以我的问题是我想在部署我的应用程序时缓存一些 table 数据。在这种情况下,当应用程序部署在服务器(可能是 jboss 或 tomcat 服务器)时,我想根据一个 table 的数据制作哈希映射。
我知道如何使用 hibernate、JDBC 等,并且正常获取数据没有问题,但是当我在building/deploying申请?
这可能是一件非常简单的事情,但我不确定如何做,而且我似乎找不到任何好的指南。
非常感谢任何帮助。
您可以为此目的从 servlet 构建中调用它。然后,在您的 web.xml 中,将 servlet 设置为 runOnStartup 而不是 0。这会使 Web 服务器在加载应用程序时启动 servlet。
Of the 3 you mentioned above I'm familiar with Spring. Any advice on how I could achieve this with spring?
Spring beans 默认为单例范围,并在初始化 ApplicationContext 时创建(在部署时发生)。您可以要求 Spring 在使用 @PostConstruct
创建 bean 时调用方法,或者通过实现 InitializingBean
:
@Component
public class CategoriesCache {
@Inject
CategoryRepositoy repo;
private List<Category> cachedCategories;
@PostConstruct
void init() {
cachedCategories = repo.findAll();
}
}
如果您不想使用依赖项注入容器,可以使用 ServletContextListener
通知部署,并执行必要的初始化。