【问题标题】:Spring: Sharing transaction between threads for integration testingSpring:在线程之间共享事务以进行集成测试
【发布时间】:2012-03-01 19:05:48
【问题描述】:

我有一个类使用 ThreadPoolTask​​Executor 来分离与数据库交互的任务。我对任务的集成测试失败了,我认为是因为它们依赖于通过 DataSourceTransactionManager 插入的测试数据,并且衍生线程没有看到主类中的事务,因此没有从数据库中检索任何内容。有什么方法可以让线程看到插入的测试数据,而无需提交事务并稍后删除测试数据?

【问题讨论】:

  • 将测试数据插入测试数据库是一种非常常见的模式,测试结束时会在finally 块中清除该数据库。你为什么担心这个?
  • 如果线程不修改数据库中的数据,您可以将其事务的隔离级别设置为READ_UNCOMMITTED。
  • @ninjalj 你有一个例子来说明如何做到这一点,最好是通过 Spring XML 配置? Google 一无所获。
  • 哎呀,没关系 - JDBC 不支持 READ_UNCOMMITTED。我会接受@Gray 的建议。
  • 我已将我的评论提升为答案。谢谢。

标签: database multithreading spring integration-testing


【解决方案1】:

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

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

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    • 2021-05-25
    • 2013-02-16
    • 1970-01-01
    • 2021-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多