我是春天新手,开始为项目使用弹簧靴。我们有一个用例来实现数据库更改和很少的外部API调用作为一个事务。请建议,这可能与春天@transactional?
答案 0 :(得分:0)
使用@Transactional
进行多个数据库更改,因为一个事务当然可以使用注释,但不能用于外部API调用。您必须为此实现一些自定义逻辑 - 必须有端点来撤消您的上一个操作,并且您必须实现在try-catch块中手动调用它们。例如,如果外部API调用创建项目,则还必须有一个端点来删除项目,依此类推。
总而言之 - 使用@Transactional
注释来实现数据库更改,因为一个事务很好,但对于外部API调用来说还不够。
答案 1 :(得分:0)
API调用是否需要成为事务的一部分?
如果答案是否定的,我建议使用TransactionTemplate.doInTransaction()
将API请求留在Tx之外。
如果您需要在Tx中发出API请求,我会建议您反对它,您将在这些请求期间锁定数据库资源。
您还可以搜索并了解有关eventual consistency
模型的更多信息。