Statement st = null; try { st = dataSource.getConnection().createStatement(); st.execute("truncate TABLE ods_putout_info"); st.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } long totalAmt = odsTmpCollAcctAmtInfoDao.count(); long totalAttr = odsTmpCollAcctAttrInfDao.count(); log.info("借据抽取任务,借据金额:{}条,借据属性:{}条", totalAmt, totalAttr); if (totalAmt != totalAttr) { return new ProcessResult(false, "借据金额数--不等于--借据属性数"); } List<SubTask> subTasks = Lists.newLinkedList(); int size = 500; for (int i = 0; i < Math.ceil((double) totalAmt / (double) size); i++) { subTasks.add(new SubTask(i * size + 1, i * size + size)); } map(subTasks, "借据抽取任务分片"); subTasks.clear(); return new ProcessResult(true);改成xxljob分片逻辑
时间: 2024-02-14 19:27:13 浏览: 75
DB_Connection_Factory.rar_DB factory桥连接_factory
要将上述代码改为 XXL-JOB 分片逻辑,可以按照以下步骤进行修改:
1. 在任务处理方法上添加 `@XxlJob` 注解,并在方法参数中添加 `@XxlJobParam` 注解来获取分片参数。例如,可以添加 `@XxlJobParam("shardIndex")` 和 `@XxlJobParam("shardTotal")` 注解来获取分片索引和总分片数。
2. 将数据库表的清空操作和统计操作移动到任务处理方法内部。
3. 根据分片索引和总分片数来计算每个分片的数据范围,并执行相应的任务逻辑。
以下是修改后的示例代码:
```java
@XxlJob("myJobHandler")
public void myJobHandler(@XxlJobParam("shardIndex") int shardIndex, @XxlJobParam("shardTotal") int shardTotal) {
Statement st = null;
try {
st = dataSource.getConnection().createStatement();
st.execute("truncate TABLE ods_putout_info");
st.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
long totalAmt = odsTmpCollAcctAmtInfoDao.count();
long totalAttr = odsTmpCollAcctAttrInfDao.count();
log.info("借据抽取任务,借据金额:{}条,借据属性:{}条", totalAmt, totalAttr);
if (totalAmt != totalAttr) {
XxlJobLogger.log("借据金额数不等于借据属性数");
return;
}
int pageSize = 500;
int start = shardIndex * pageSize + 1;
int end = Math.min((shardIndex + 1) * pageSize, totalAmt);
for (int i = start; i <= end; i++) {
// 执行每个分片的具体任务逻辑
// ...
}
}
```
通过以上修改,任务处理方法会接收到分片索引和总分片数作为参数,并根据分片索引计算每个分片的数据范围,然后在循环中执行每个分片的具体任务逻辑。XXL-JOB 会根据总分片数调度分片任务,每个分片任务都会执行对应的数据范围内的任务逻辑。
阅读全文