繁体   English   中英

在JDBC批处理作业中使用多线程

[英]Using multi-threading in JDBC batch job

我们有一个JDBC批处理作业。 有两个表:

  • BUSINESS_CONTRACT
  • CLASSIFY_RECORD

表BUSINESS_CONTRACT存储业务合同的信息,我们每月对业务合同进行分类,并将分类结果存储在表CLASSIFY_RECORD中。

批处理作业每月运行一次,查询BUSINESS_CONTRACT以查找需要分类的业务合同并对其进行分类,然后将分类结果插入CLASSIFY_RECORD。

批处理作业现在在单个线程中运行,我想让它以多线程运行

我应该如何使用dispatcher-worker模式编写基本代码结构?

我学习java多线程,但大多发现了理论资源。现在我想用多线程来解决一个真正的问题,但不知道如何编写第一行代码。

首先,您是否需要增加多线程的复杂性? 您当前的流程需要多长时间才能运行? 您在运行此服务器的服务器上是否有多个CPU或多个CPU核心,这会使多线程有益吗?

我不会为你编写代码,但可以给你一些指示......

你会如何手动完成这项工作? 假设你有这些作为纸质记录,并且不得不与同事分开任务。 你会如何分工? 2人或20人? (这就是你可以分成多少个线程。)

找到这些详细信息后,您可以创建多个线程(您的工作人员,使用父“调度程序”代码) - 每个线程都配置为仅从查询中选择部分结果。 您应该保留对每个线程的引用,并在它们全部启动后在每个线程上调用.join() ,以便等待整个批处理完成。 如果有大量数据难以分成相同的工作单元(分为500和500的1000条记录可能因任何原因需要75%和25%的资源),您可能需要考虑拆分工作对于更小的单位(比线程更多的单位),然后让调度员继续向工人提供工作单元,直到完成所有工作。

还要考虑,这些分开的工作功能是否真的与众不同? 如果一个工作单元由于某种原因而失败并需要在数据库中回滚,这是否意味着所有其他工作单元都需要停止并且任何现有的插件也需要回滚?

你在使用批量更新吗? 与单个更新的多个线程相比,它可能会产生更大的差异。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM