如何强制提交 Spring | 您所在的位置:网站首页 › web安全入门要多久 › 如何强制提交 Spring |
匿名用户
您的第一个问题是当多个线程执行相同的逻辑时,围绕数字生成的串行访问。如果您可以使用Oracle序列,这将在数据库级别自动处理,因为序列被保证在调用它们的任何次数都返回唯一值。然而,由于现在需要在服务器端进行管理,因此您需要在跨事务边界的数字生成逻辑(选择max并递增1)周围使用同步机制。您可以使Service方法同步(您的服务类将是单例和Spring管理的)并在它周围声明事务边界。但是请注意,这会对性能产生影响,并且通常不利于可扩展性。 另一个选项可能是这个的变体-将要分配的id存储在一个单独的表中,其中一列为“currentVal”,并使用悲观锁获取下一个数字。这样,主表就不会有任何大锁。这样,在主实体创建事务完成时,序列生成器代码将保持锁定。这些技术背后的主要思想是序列化对序列生成器的访问,并在主实体事务提交之前保持锁。同时尽可能延迟数字生成器。 如果在您的设计中使用触发器很好,@Vlad建议的解决方案是一个很好的解决方案。 关于flush行为的问题,SQL在flush调用时被发送到数据库,但是在以声明方式提交事务或调用手动提交之前,数据不会被提交。然而,事务可以看到它想要更改的数据,但不能看到其他事务,这取决于事务的隔离性质。 |
CopyRight 2018-2019 实验室设备网 版权所有 |