Database Spring:在线程之间共享事务以进行集成测试

Database Spring:在线程之间共享事务以进行集成测试,database,multithreading,spring,integration-testing,Database,Multithreading,Spring,Integration Testing,我有一个类,它使用ThreadPoolTaskExecutor派生与数据库交互的任务。我对任务的集成测试失败了,我认为这是因为它们依赖于通过DataSourceTransactionManager插入的测试数据,并且派生线程没有从主类中看到事务,因此没有从数据库中检索任何内容。有没有办法让线程看到插入的测试数据,而不必提交事务并在以后删除测试数据?将测试数据插入测试数据库是一种非常常见的模式,该数据库在测试结束时在finally块中被清除。如果您编辑您的问题并提供反对该解决方案的其他原因,我将编

我有一个类,它使用ThreadPoolTaskExecutor派生与数据库交互的任务。我对任务的集成测试失败了,我认为这是因为它们依赖于通过DataSourceTransactionManager插入的测试数据,并且派生线程没有从主类中看到事务,因此没有从数据库中检索任何内容。有没有办法让线程看到插入的测试数据,而不必提交事务并在以后删除测试数据?

将测试数据插入测试数据库是一种非常常见的模式,该数据库在测试结束时在
finally
块中被清除。如果您编辑您的问题并提供反对该解决方案的其他原因,我将编辑我的答案

setup()
方法(通常在其中创建测试数据库表)是另一个很好的地方,可以确保在插入测试数据之前,清除新表中以前测试中的任何剩余数据


希望这有帮助。

将测试数据插入测试数据库是一种非常常见的模式,在测试结束时的
finally
块中清除该数据库。为什么要担心呢?如果线程不修改数据库中的数据,您可以将其事务的隔离级别设置为READ_UNCOMMITTED。@ninjalj您有没有关于如何做到这一点的示例,最好是通过Spring XML配置?谷歌什么也没找到。哎呀,没关系——JDBC不支持READ_UNCOMMITTED。我将同意@Gray的建议。我已将我的评论提升为答案。谢谢