部署java web应用程序时如何缓存数据库数据

部署java web应用程序时如何缓存数据库数据,java,web-applications,Java,Web Applications,所以,我的问题是,我想在部署应用程序时缓存一些表数据。在本例中,当应用程序部署到服务器上(可能是jboss或tomcat服务器)时,我希望从一个表的数据生成一个哈希映射 我知道如何使用hibernate、JDBC等,并且正常获取数据没有问题,但是在构建/部署应用程序时,如何让数据检索代码独立运行 这可能是一件非常简单的事情,但我不确定如何做,我似乎找不到任何好的指南 非常感谢您提供的任何帮助。您可以从servlet构建中调用它。然后,在web.xml中,将servlet设置为0以外的runnst

所以,我的问题是,我想在部署应用程序时缓存一些表数据。在本例中,当应用程序部署到服务器上(可能是jboss或tomcat服务器)时,我希望从一个表的数据生成一个哈希映射

我知道如何使用hibernate、JDBC等,并且正常获取数据没有问题,但是在构建/部署应用程序时,如何让数据检索代码独立运行

这可能是一件非常简单的事情,但我不确定如何做,我似乎找不到任何好的指南


非常感谢您提供的任何帮助。

您可以从servlet构建中调用它。然后,在web.xml中,将servlet设置为0以外的runnstartup。这使得Web服务器在加载应用程序时启动servlet

在你上面提到的3个例子中,我对Spring很熟悉。关于如何使用spring实现这一点,有什么建议吗

Springbeans默认为singleton作用域,并在初始化ApplicationContext时创建(在部署时发生)。当Spring使用
@PostConstruct
创建bean时,或者通过实现
初始化bean
,可以要求Spring调用一个方法:

@Component
public class CategoriesCache {
    @Inject
    CategoryRepositoy repo;

    private List<Category> cachedCategories;

    @PostConstruct
    void init() {
        cachedCategories = repo.findAll();
    }
}
@组件
公共类分类缓存{
@注入
分类报告回购;
私有列表缓存类别;
@施工后
void init(){
cachedCategories=repo.findAll();
}
}

如果您不想使用依赖项注入容器,那么您可以使用来接收部署通知,并执行必要的初始化。

您是否使用依赖项注入容器,如EJB、CDI或Spring?如果是,哪一个?(每一个都有助于此的功能)@meriton我没有使用任何容器。在你上面提到的3个例子中,我对Spring很熟悉。关于如何使用spring实现这一点,有什么建议吗?我明白了,我会测试一下。这是否也是使我的hashmap在整个应用程序中都可访问的好方法?比如,如果其他模块需要使用映射,我可以从servlet类调用它?您只需在servler中将整个HashMap设置为静态,然后使用静态方法查询HashMap即可。是的,这一部分很明显。在我写了那篇评论后不久,我意识到我听起来有多么愚蠢,但我很懒,也懒得去编辑它:尽管P meriton的解决方案是最合适的。我现在正在考虑使用lucene为文本缓存搜索提供一个更具伸缩性的解决方案。非常感谢你的帮助,我很感激:我会投票给你,但我没有这样的名声:/谢谢你,这对我很有效。@GameGuy1989:即使你还不能投票,你也可以将答案标记为接受(通过单击投票按钮下方的复选标记),表明它对你有效。完成。再次感谢:D