我需要在应用程序启动期间将我的用户表与存储库(另一个数据库)同步。我有两个带有Apache mod_jk的Tomcat节点。因此,当我重新启动它们时,我会进行双重插入和双重更新。这好像是: T1开始 T2开始 T1读取数据 T2读取数据 T1修改数据 T2修改相同的数据 T1插入 T2插入 T1提交 T2提交
当T1修改数据然后T2修改相同的数据时,我丢失了更新。 当然,我在插入操作期间有重复。 我该如何进行同步?
什么是最好的解决方案?任何其他建议。 谢谢!
答案 0 :(得分:1)
问题是,如果使用多个服务器来托管应用程序,则服务器启动并不意味着应用程序启动。
如果您始终同时启动和停止两个服务器,只需配置其中一个(通过web.xml文件中的config参数或系统属性)来执行同步。
如果每个服务器都可以独立启动和停止,那么我不会在启动时做任何事情,而是将其作为应用程序的管理用例实现,并从外部按需触发它。
答案 1 :(得分:0)
配置一台服务器,使其不进行同步 - 正如JB Nizet所说。在我们的项目中,我们使用Spring profiles。
无论如何,如果您在业务键上定义了唯一索引,则不应该重复。您可以在Hibernate中使用optimistic locking删除Oracle丢失的更新。事务将尝试更新特定版本(它读取的版本),如果另一个事务使用新版本计数器更新它,则会出错。