VJS*_*VJS 2 java spring multithreading hibernate transactions
有一项作业正在单线程环境中运行。这意味着我有 main 方法,主线程负责完成工作。
我正在使用 Spring 和 Hibernate。
在高层次上,我正在执行以下步骤:
使用 JDBC 从 MySQL 数据库获取数据(循环结果集并执行第 2 点和第 3 点)
使用从点 1 接收的数据填充模型。
验证、调用服务层、dao层以及在oracle db中存储实体。
此流程使用for循环。所以1×1的数据插入就存在了。
现在我想使用多线程来做到这一点。
方法 :
一个线程将获取数据并填充模型对象并将其放入队列中。
多个线程将从队列中取出对象并从点 3 开始。
你能帮我实现这个模型吗?如何编写这种类型的多线程框架。
你可以这样做:
定义一个ExecutorService:
ExecutorService executorService = Executors.newFixedThreadPool(threadPoolSize);
Run Code Online (Sandbox Code Playgroud)
每次for迭代应该简单地提交一批要插入的新对象:
final List<RecordDTO> records = ...;
executorService.submit(() ->
insertService.save(records);
);
Run Code Online (Sandbox Code Playgroud)
会有insertService一个@Transactional save方法。
连接池大小应大于或等于工作线程数。
与仅将一个实体发送到工作线程不同,发送一批多个实体会更有效,List<RecordDTO>以便使用单个数据库调用将它们全部插入。为此,您需要启用 Hibernate JDBC 批量插入。
| 归档时间: |
|
| 查看次数: |
6905 次 |
| 最近记录: |