我正在开发一个Java / Spring应用程序,它需要将审计日志写入数据库。所有服务当前都标记为@Transactional
- 因此如果发生故障,则会回滚更改。
但是审计日志记录是例外 - 它应该总是成功 - 所以一直在考虑将AuditLogService标记为Propagation.NOT_SUPPORTED
或Propagation.REQUIRES_NEW
。
问题是如何制作集成测试。理想情况下,这些不应该在数据库中留下日志条目。不希望在测试结束时手动删除它。是否有一种方法可以将测试标记为事务性,包括所有事务,包括通过Propagation.REQUIRES_NEW
启动的事务?
答案 0 :(得分:0)
我最终完成了我所说的我不想做的事情,并在每次测试结束时删除所有操作数据。 (这实际上效果更好,因为测试不再在一个总体事务中运行,这掩盖了一些错误,例如与Hibernate延迟加载有关。)