有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何防止tomcat启动时初始化的类对数据库的双重写入?

我好像被难住了

我在tomcat启动时加载一个单例类(在web.xml中使用启动时加载),并从数据库中加载值。加载后,将一组数据写入同一数据库,但位于不同的表中。问题是,数据正在完美加载,但写入操作发生了两次。我知道写操作发生了两次,因为我有两个webapp实例

但是,需要两个相同webapp的实例。我也无法更改文件夹结构。无法在服务器中进行更改。自动生成的xml。(请不要建议这些,不行!)

我尝试使用servletcontextlistener初始化singleton类,但当时没有加载我使用的数据库框架,并且在查询结果中出现空指针异常。因此,singleton类没有从数据库中加载值

我正在使用eclipse

我该怎么做(如果可能的话)

我想看看servletcontextlistener是否会通过预先加载db框架来完成这项工作。有什么解决办法吗


共 (1) 个答案

  1. # 1 楼答案

    解决方案是创建自己的“DB锁”,也就是说,当出现任何webapp实例时,让它检查一个表-让我们称之为“锁”,如果它在DB中不存在,那么让它创建它并进行插入。如果webapp的下一个实例启动,那么如果它看到锁已经被取下,那么它可以等待锁被释放,或者跳过初始化

    如果您的其他Web应用程序在第一个Web应用程序完成其工作后必须进行自己的升级,则创建一个表来维护DB升级的状态。每个webapp在初始化期间完成其工作后都会更新此表