我们的应用程序是高度并发的。它正在获取 MQ 数据并将其保存到数据库中。有多个消息可能包含相同的数据。因此,一条消息可能包含营业时间,而第二条消息可能包含营业时间和位置。
所以第一条消息传来,我保存了工作时间数据。然后第二笔交易带有相同的营业时间数据。现在我需要保存位置数据,但营业时间是重复的。由于并发性,我无法检查数据库的运行时间(如果我检查,它可能不存在,那么当我保存它时,它可能已被另一个线程插入)。我也想快点。(这个装载机有很多负载。)
当前,一条消息获得一个事务(Propagation.REQUIRED)(使用 Spring 和 Hibernate)。我在每种数据插入后进行刷新。所以我保存了位置数据,然后刷新。然后我保存工作时间并冲洗。
如果我只是捕获错误消息(它在flush()之后抛出)并吃掉它,那么保存的其他数据(位置数据)还会保存吗?数据库插入失败后,事务仍然可以使用吗?所以如果第一次保存失败,我希望第二次插入工作。
我一直在看 Propagation.REQUIRES_NEW 但遇到了一些麻烦。另外,我担心会减慢速度。我需要 3 笔交易(在这之前有一点逻辑。)
我们谈论的大部分信息都是关于回滚的,但我不想回滚。我只想继续前进。我可以吗?