数据库事务还是Java DAO的方法同步?



我有基于 Java 的 Web 服务器,我也有带有方法的 DAO 单例对象,其 SQL 操作的逻辑必须以某种方式同步以保证数据完整性(方法可以同时从多个 Java 线程访问(。

我想知道数据库事务包装(可序列化级别(是否比 DAO 的方法在服务器端显式同步更好?

是的,使用事务更好。在代码中同步,锁定类,该锁的范围是类加载器,并且建立应用程序的第二个实例将使锁定无效,因为这两个实例使用不同的锁。

使用数据库事务,

您可以拥有应用程序的多个实例,并且数据库对所有事务的处理方式相同。

此外,对于数据库,您还可以选择将隔离级别调低到不高于该事务所需的级别,或使用行级别锁定。这些更难在代码中实现,并且您仍然无法部署第二个实例。

很大程度上取决于你想要同步的内容,同步是关于资源的,如果你的代码中有多个数据库,并且数据完整性问题是分布式的,你需要一个事务上下文,不仅声明它,而且知道如何正确管理它。假设您有一个数据库,并且假设您的问题是完整性,这是由于该方法稍后发生的 SELECT 子句与 UPDATE 或 INSERT 子句可能不一致引起的,正确的解决方案是数据库事务和使用 SELECT FOR UPDATE 子句。如果您的问题是关于同一操作中不同表的 UPDATE/INSERT,您可能有两个资源,一个是包含约束,这是首选方法,但在某些情况下是不可能的。如果无法实现 CONTRAINT,请考虑重新设计您的 DATAMODEL,因为管理此类问题同步应用程序代码是最糟糕的解决方案,但即便如此也是一个解决方案。

最新更新