gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 06:28:38 25 4
gpt4 key购买 nike

我似乎被困在这里了。

我在 tomcat 启动时加载一个单例类(使用 web.xml 中的 load-on-startup),并从数据库加载值。加载后,一组数据被写入同一个数据库但不同的表中。问题是,数据加载完美,但写入发生了两次。我知道写入发生了两次,因为我有 2 个 Web 应用程序实例。

但是,需要同一 Web 应用程序的 2 个实例。我也无法更改文件夹结构。无法在 server.xml 中进行更改,因为它是自动生成的。 (请不要建议这些,做不到!)

我尝试使用 servletcontextlistener 来初始化单例类,但当时使用的数据库框架未加载,并且我在查询结果中遇到空指针异常。因此,单例类不会从数据库中加载值。

我正在使用 Eclipse。

我该如何解决这个问题(如果可能的话)?

我想看看 servletcontextlistener 是否可以通过预先加载数据库框架来完成这项工作。有什么解决办法吗?

最佳答案

对此的解决方案是创建您自己的“数据库锁”,即,当出现任何 web 应用程序实例时,让它检查表 - 让我们称之为“锁”,如果它不存在于DB,然后让它创建它并进行插入。如果您的 web 应用程序的下一个实例启动,那么如果它发现锁已被占用,那么它可以等待锁被释放或直接跳过 init。

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

关于java - 如何防止在tomcat启动时初始化的类对数据库进行双重写入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46581558/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com