如何解决使用@PreAuthorize进行Spring事务管理
我们的spring应用程序在两个不同的服务中有两种服务方法,都用@Transactional(isolation = Isolation.SERIALIZABLE)
注释。这两种方法都可以在我们的数据库中读写数据,并且可以使用相同的实体。所有查询都是通过spring数据存储库完成的。
两个方法在其上还具有@PreAuthorize(@customPermissionEvaluator.evaluate(...))
批注,这些批注调用自定义方法。在权限评估器内部,我们还通过spring数据存储库访问数据库以读取数据。权限评估程序方法本身没有任何事务注释。
在同时调用两个@Transactional(isolation = Isolation.SERIALIZABLE)
服务方法时,此模式对我们造成了问题。如果发生这种情况,我们将通过幻像读取快速解决数据一致性问题(两种服务方法在同一实体上运行)。但是,只要从这两种方法中删除@PreAuthorize批注,我们就会获得正确的事务处理。看来@PreAuthorize中加载的实体可能会被hibernate缓存,而当我们在服务方法中再次查询它们时,它们不会刷新。
在下面,我们正在运行一个mysql数据库。
有人知道这里发生了什么吗,还是有人在春季之前遇到过类似的问题?关于从自定义@PreAuthorize方法访问数据库是否有任何规则/限制?此时我们真的迷路了...谢谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。