gpt4 book ai didi

java - 如何使用 JPA 和 Hibernate 的多个处理线程来持久化实体

转载 作者:行者123 更新时间:2023-11-30 11:08:54 27 4
gpt4 key购买 nike

有一个作业在单线程环境中运行。这意味着我有 main 方法,主线程负责完成工作。

我正在使用 Spring 和 Hibernate。

在高层次上,我正在执行以下步骤:

  1. 使用 JDBC 从 MySQL 数据库中获取数据(循环结果集并执行第 2 点和第 3 点)

  2. 使用从第 1 点收到的数据填充模型。

  3. oracle db 中的验证、调用服务层、dao 层和存储实体。

此流程使用 for 循环。所以 1 对 1 的数据插入就在那里。

现在我想用多线程来做。

方法:

  1. 一个线程将获取数据并填充模型对象并将其放入队列中。

  2. 多个线程将从队列中取出对象并从点 3 开始。

你能帮我实现这个模型吗?如何编写此类多线程框架。

最佳答案

你可以这样做:

  1. 定义一个 ExecutorService:

     ExecutorService executorService = Executors.newFixedThreadPool(threadPoolSize);
  2. 每个 for迭代应该简单地提交一批新的要插入的对象:

     final List<RecordDTO> records = ...;
    executorService.submit(() ->
    insertService.save(records);
    );
  3. insertService会有一个 @Transactional save方法。

  4. 连接池大小应大于或等于 worker 数量。

与其只向工作线程发送一个实体,不如发送一批多个 List<RecordDTO> 更有效。以便它们都使用单个数据库调用插入。为此,您需要 enable Hibernate JDBC batch inserts .

关于java - 如何使用 JPA 和 Hibernate 的多个处理线程来持久化实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28338075/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com