Java 如何通过JPA和Hibernate使用多个处理线程持久化实体
有一个作业正在单线程环境中运行。这意味着我有main方法,主线程负责完成任务 我正在使用Spring和Hibernate 在高层,我正在执行以下步骤:Java 如何通过JPA和Hibernate使用多个处理线程持久化实体,java,multithreading,spring,hibernate,transactions,Java,Multithreading,Spring,Hibernate,Transactions,有一个作业正在单线程环境中运行。这意味着我有main方法,主线程负责完成任务 我正在使用Spring和Hibernate 在高层,我正在执行以下步骤: 使用JDBC从MySQL数据库获取数据(循环resultset并执行第2点和第3点) 使用从第1点接收的数据填充模型 验证、调用服务层、dao层以及在oracle数据库中存储实体 此流使用for循环。因此,一个接一个的数据插入是存在的 现在我想使用多线程来实现这一点 方法: 一个线程将获取数据并填充模型对象并将其放入队列中 多个线程将对象从队列和
for
循环。因此,一个接一个的数据插入是存在的
现在我想使用多线程来实现这一点
方法:
你能帮我实现这个模型吗。如何编写这种类型的多线程框架。您需要一个单生产者多消费者线程安全队列。看一看,那是最适合你的衣服 LMAX Disruptor是一个高性能线程间消息传递库,它是底层数据结构中用于工作人员内部通信的默认消息传递系统,是一个无锁环形缓冲区。为了使它快速,它使用
按照,您可以参考一个非常简单的示例。您可以这样做:
ExecutorService executorService = Executors.newFixedThreadPool(10);
,只需提交要插入的新对象即可
final RecordDTO record = ...;
executorService.execute(new Runnable() {
public void run() {
insertService.save(record);
}
});
insertService
将有一个@Transactional
save
方法来使用这10个工作线程中的一个插入每条记录
然而,使用JDBC要高效得多。因此,您可以发送多个条目,以便在一个批中插入所有条目,而不是只向工作线程发送一个实体。在插入之前,我必须验证并填充模型对象上的某些内容。我也希望它是多线程的。所以在运行内部,我必须在内部调用processAcc(model)和processAcc(model)call.save。因此这里processAcc(model)我的模型不能是最终的..现在在处理阶段的同步块中执行验证阶段,因为存在并发环境。可以使用storm拓扑,可以为螺栓设置不同的并行度(N个执行器)以进行快速处理。它还支持分布式计算/容错/有保证的消息处理。非常容易实现。现有的java代码将在那里重用。每个逻辑步骤的Spring线程池执行器如何?