From c3f7491598d4392bba90405cc67e498a77aafa87 Mon Sep 17 00:00:00 2001 From: hongawen <83944980@qq.com> Date: Mon, 15 Jan 2024 20:27:55 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/njcn/oracle/bo/po/JobDetail.java | 2 + .../impl/ReplenishMybatisServiceImpl.java | 1 - .../njcn/oracle/service/DataSyncService.java | 19 --- .../njcn/oracle/service/JobDetailService.java | 5 +- .../service/impl/DataSyncServiceImpl.java | 112 ------------- .../service/impl/JobDetailServiceImpl.java | 37 ++--- .../com/njcn/oracle/util/LocalDateUtil.java | 2 - .../oracle/controller/DataSyncController.java | 35 +---- .../njcn/oracle/service/IOracleService.java | 7 + .../service/impl/OracleServiceImpl.java | 148 ++++++++++++++++++ .../src/main/resources/application.yml | 6 +- .../src/main/resources/static/index.html | 21 ++- .../src/main/resources/static/locale.js | 1 - 13 files changed, 208 insertions(+), 188 deletions(-) delete mode 100644 oracle-data/oracle-source/src/main/java/com/njcn/oracle/service/DataSyncService.java delete mode 100644 oracle-data/oracle-source/src/main/java/com/njcn/oracle/service/impl/DataSyncServiceImpl.java create mode 100644 oracle-data/oracle-target/src/main/java/com/njcn/oracle/service/IOracleService.java create mode 100644 oracle-data/oracle-target/src/main/java/com/njcn/oracle/service/impl/OracleServiceImpl.java diff --git a/oracle-data/oracle-source/src/main/java/com/njcn/oracle/bo/po/JobDetail.java b/oracle-data/oracle-source/src/main/java/com/njcn/oracle/bo/po/JobDetail.java index 2a1ec6a..e947d54 100644 --- a/oracle-data/oracle-source/src/main/java/com/njcn/oracle/bo/po/JobDetail.java +++ b/oracle-data/oracle-source/src/main/java/com/njcn/oracle/bo/po/JobDetail.java @@ -53,11 +53,13 @@ public class JobDetail { */ @TableField(value = "\"ROW_COUNT\"") private Integer rowCount; + @JsonFormat( pattern = "yyyy-MM-dd HH:mm:ss" ) @TableField(value = "UPDATE_TIME") private LocalDateTime updateTime; + @TableField(value = "DURATION") private Double duration; diff --git a/oracle-data/oracle-source/src/main/java/com/njcn/oracle/mybatis/service/impl/ReplenishMybatisServiceImpl.java b/oracle-data/oracle-source/src/main/java/com/njcn/oracle/mybatis/service/impl/ReplenishMybatisServiceImpl.java index 9cfbcb7..acbb22b 100644 --- a/oracle-data/oracle-source/src/main/java/com/njcn/oracle/mybatis/service/impl/ReplenishMybatisServiceImpl.java +++ b/oracle-data/oracle-source/src/main/java/com/njcn/oracle/mybatis/service/impl/ReplenishMybatisServiceImpl.java @@ -22,7 +22,6 @@ public abstract class ReplenishMybatisServiceImpl, @Override @Transactional(rollbackFor = Exception.class) public void insertBatchBySlice(List data, int size) throws RuntimeException{ - int totalCount = data.size(); int idxLimit = Math.min(size, totalCount); List dataTemp = new ArrayList<>(data); diff --git a/oracle-data/oracle-source/src/main/java/com/njcn/oracle/service/DataSyncService.java b/oracle-data/oracle-source/src/main/java/com/njcn/oracle/service/DataSyncService.java deleted file mode 100644 index 210b91f..0000000 --- a/oracle-data/oracle-source/src/main/java/com/njcn/oracle/service/DataSyncService.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.njcn.oracle.service; - -import com.njcn.oracle.bo.param.DataAsynParam; -import com.njcn.oracle.mybatis.service.IReplenishMybatisService; - -import java.time.LocalDate; - -/** - * Description: - * Date: 2024/1/8 16:16【需求编号】 - * - * @author clam - * @version V1.0.0 - */ -public interface DataSyncService { - void dataSync(IReplenishMybatisService executor, String temp, LocalDate migration); - - void dataBacthSysc(DataAsynParam dataAsynParam); -} diff --git a/oracle-data/oracle-source/src/main/java/com/njcn/oracle/service/JobDetailService.java b/oracle-data/oracle-source/src/main/java/com/njcn/oracle/service/JobDetailService.java index 736848e..785122d 100644 --- a/oracle-data/oracle-source/src/main/java/com/njcn/oracle/service/JobDetailService.java +++ b/oracle-data/oracle-source/src/main/java/com/njcn/oracle/service/JobDetailService.java @@ -9,7 +9,6 @@ import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; /** - * * Description: * Date: 2024/1/8 12:27【需求编号】 * @@ -18,9 +17,9 @@ import java.util.List; */ public interface JobDetailService extends IMppService { - JobDetail select(JobDetail jobDetail); + JobDetail select(JobDetail jobDetail); - IPage selectByParam(JobQueryParam jobQueryParam); + IPage selectByParam(JobQueryParam jobQueryParam); boolean jobRemove(JobDetail jobDetail); } diff --git a/oracle-data/oracle-source/src/main/java/com/njcn/oracle/service/impl/DataSyncServiceImpl.java b/oracle-data/oracle-source/src/main/java/com/njcn/oracle/service/impl/DataSyncServiceImpl.java deleted file mode 100644 index 013c198..0000000 --- a/oracle-data/oracle-source/src/main/java/com/njcn/oracle/service/impl/DataSyncServiceImpl.java +++ /dev/null @@ -1,112 +0,0 @@ -package com.njcn.oracle.service.impl; - -import cn.hutool.core.collection.CollectionUtil; -import cn.hutool.core.date.DatePattern; -import cn.hutool.core.date.LocalDateTimeUtil; -import cn.hutool.extra.spring.SpringUtil; -import com.njcn.oracle.bo.param.DataAsynParam; -import com.njcn.oracle.bo.param.MigrationParam; -import com.njcn.oracle.bo.po.JobDetail; -import com.njcn.oracle.mybatis.service.IReplenishMybatisService; -import com.njcn.oracle.service.DataSyncService; -import com.njcn.oracle.service.JobDetailService; -import com.njcn.oracle.util.LocalDateUtil; -import lombok.RequiredArgsConstructor; -import org.springframework.scheduling.annotation.Async; -import org.springframework.stereotype.Service; -import org.springframework.util.StopWatch; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.util.List; -import java.util.Objects; - -/** - * Description: - * Date: 2024/1/8 16:16【需求编号】 - * - * @author clam - * @version V1.0.0 - */ -@Service -@RequiredArgsConstructor -public class DataSyncServiceImpl implements DataSyncService { - private final JobDetailService jobDetailService; - - @Override - public void dataSync(IReplenishMybatisService executor, String temp, LocalDate date) { - StopWatch stopWatch = new StopWatch(); - stopWatch.start(); - LocalDateTime localDateTime = date.atStartOfDay(); - LocalDateTime tempStartTime = LocalDateTimeUtil.beginOfDay(localDateTime); - LocalDateTime tempEndTime = LocalDateTimeUtil.endOfDay(localDateTime); - - MigrationParam migration = new MigrationParam(); - migration.setStartTime(tempStartTime); - migration.setEndTime(tempEndTime); - - List list = executor.queryData(migration); - JobDetail jobDetail = new JobDetail(); - jobDetail.setTableName(temp); - - jobDetail.setExcuteDate(date); - - JobDetail select = jobDetailService.select(jobDetail); - if (Objects.nonNull(select)){ - if (select.getState()==2) { - jobDetail.setState(0); - jobDetail.setRowCount(list.size()); - jobDetail.setUpdateTime(LocalDateTime.now()); - jobDetailService.updateByMultiId(jobDetail); - }else { - return; - } - }else { - jobDetail.setState(0); - jobDetail.setRowCount(list.size()); - jobDetail.setUpdateTime(LocalDateTime.now()); - jobDetailService.save(jobDetail); - } - try { - if(CollectionUtil.isNotEmpty(list)){ - executor.clearTargetData(migration); - executor.insertBatchByDB(list); - - } - stopWatch.stop(); - jobDetail.setState(1); - jobDetail.setDuration(stopWatch.getTotalTimeSeconds()); - jobDetail.setUpdateTime(LocalDateTime.now()); - jobDetailService.updateByMultiId(jobDetail); - }catch ( - Exception e - ){ - jobDetail.setState(2); - jobDetail.setUpdateTime(LocalDateTime.now()); - jobDetailService.updateByMultiId(jobDetail); - } - - } - - @Override - @Async - public void dataBacthSysc(DataAsynParam dataAsynParam) { - List tableNames = dataAsynParam.getTableNames(); - - tableNames.stream().forEach(temp->{ - IReplenishMybatisService executor = null; - try { - executor = (IReplenishMybatisService) SpringUtil.getBean(Class.forName("com.njcn.oracle.service.impl." + temp + "ServiceImpl")); - } catch (ClassNotFoundException e) { - throw new RuntimeException(e); - } - List dateList = LocalDateUtil.getDateList(dataAsynParam.getStartTime(), dataAsynParam.getEndTime()); - IReplenishMybatisService finalExecutor = executor; - dateList.forEach(date->{ - - this.dataSync(finalExecutor,temp,date); - }); - - }); - } -} diff --git a/oracle-data/oracle-source/src/main/java/com/njcn/oracle/service/impl/JobDetailServiceImpl.java b/oracle-data/oracle-source/src/main/java/com/njcn/oracle/service/impl/JobDetailServiceImpl.java index e6185af..389b9d3 100644 --- a/oracle-data/oracle-source/src/main/java/com/njcn/oracle/service/impl/JobDetailServiceImpl.java +++ b/oracle-data/oracle-source/src/main/java/com/njcn/oracle/service/impl/JobDetailServiceImpl.java @@ -10,6 +10,7 @@ import com.njcn.oracle.bo.param.ServiceTypeEnum; import com.njcn.oracle.util.LocalDateUtil; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; + import javax.annotation.Resource; import java.time.LocalDate; import java.util.ArrayList; @@ -24,7 +25,6 @@ import com.njcn.oracle.service.JobDetailService; import org.springframework.util.CollectionUtils; /** - * * Description: * Date: 2024/1/8 12:27【需求编号】 * @@ -33,14 +33,15 @@ import org.springframework.util.CollectionUtils; */ @Service @DS(("target")) -public class JobDetailServiceImpl extends MppServiceImpl implements JobDetailService{ +public class JobDetailServiceImpl extends MppServiceImpl implements JobDetailService { @Override public JobDetail select(JobDetail jobDetail) { - JobDetail jobDetail1 = this.lambdaQuery().eq(JobDetail::getTableName,jobDetail.getTableName()). - eq(JobDetail::getExcuteDate,jobDetail.getExcuteDate()).one(); - return jobDetail1; + return this.lambdaQuery() + .eq(JobDetail::getTableName, jobDetail.getTableName()) + .eq(JobDetail::getExcuteDate, jobDetail.getExcuteDate()) + .one(); } @Override @@ -52,21 +53,21 @@ public class JobDetailServiceImpl extends MppServiceImpl jobDetails = this.getBaseMapper().selectList(queryWrapper); - - List tableNames = new ArrayList<>(); - if(CollectionUtils.isEmpty(jobQueryParam.getTableNames())){ + + List tableNames; + if (CollectionUtils.isEmpty(jobQueryParam.getTableNames())) { tableNames = ServiceTypeEnum.getExecutableTypes(); - }else { + } else { tableNames = jobQueryParam.getTableNames(); } List dateList = LocalDateUtil.getDateList(jobQueryParam.getStartTime(), jobQueryParam.getEndTime()); List finalTableNames = tableNames; dateList.stream().forEach(localDate -> { - finalTableNames.stream().forEach(temp->{ + finalTableNames.stream().forEach(temp -> { JobDetail jobDetail = new JobDetail(); jobDetail.setTableName(temp); jobDetail.setExcuteDate(localDate); - if (jobDetails.contains(jobDetail)){ + if (jobDetails.contains(jobDetail)) { return; } jobDetail.setTableName_CN(ServiceTypeEnum.getValueByCode(temp)); @@ -75,23 +76,23 @@ public class JobDetailServiceImpl extends MppServiceImpl jobDetailIPage= jobDetails.stream().sorted(Comparator.comparing(JobDetail::getExcuteDate).reversed()). + List jobDetailIPage = jobDetails.stream().sorted(Comparator.comparing(JobDetail::getExcuteDate).reversed()). skip((jobQueryParam.getCurrentPage() - 1) * jobQueryParam.getPageSize()). limit(jobQueryParam.getPageSize()).collect(Collectors.toList()); - jobDetailIPage.stream().forEach(temp->temp.setTableName_CN(ServiceTypeEnum.getValueByCode(temp.getTableName()))); + jobDetailIPage.stream().forEach(temp -> temp.setTableName_CN(ServiceTypeEnum.getValueByCode(temp.getTableName()))); page.setRecords(jobDetailIPage); - page.setTotal(Long.parseLong(jobDetails.size()+"")); + page.setTotal(Long.parseLong(jobDetails.size() + "")); return page; } @Override public boolean jobRemove(JobDetail jobDetail) { QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.lambda().eq(JobDetail::getTableName,jobDetail.getTableName()). - eq(JobDetail::getExcuteDate,jobDetail.getExcuteDate()); - boolean remove = this.remove(queryWrapper); - return remove; + queryWrapper.lambda() + .eq(JobDetail::getTableName, jobDetail.getTableName()) + .eq(JobDetail::getExcuteDate, jobDetail.getExcuteDate()); + return this.remove(queryWrapper); } diff --git a/oracle-data/oracle-source/src/main/java/com/njcn/oracle/util/LocalDateUtil.java b/oracle-data/oracle-source/src/main/java/com/njcn/oracle/util/LocalDateUtil.java index 6c7a2bf..1303388 100644 --- a/oracle-data/oracle-source/src/main/java/com/njcn/oracle/util/LocalDateUtil.java +++ b/oracle-data/oracle-source/src/main/java/com/njcn/oracle/util/LocalDateUtil.java @@ -16,11 +16,9 @@ public class LocalDateUtil { public static List getDateList(LocalDate startDate, LocalDate endDate) { List dateList = new ArrayList<>(); long daysBetween = ChronoUnit.DAYS.between(startDate, endDate); - for (long i = 0; i <= daysBetween; i++) { dateList.add(startDate.plusDays(i)); } - return dateList; } } diff --git a/oracle-data/oracle-target/src/main/java/com/njcn/oracle/controller/DataSyncController.java b/oracle-data/oracle-target/src/main/java/com/njcn/oracle/controller/DataSyncController.java index cb76e8b..4f89ea0 100644 --- a/oracle-data/oracle-target/src/main/java/com/njcn/oracle/controller/DataSyncController.java +++ b/oracle-data/oracle-target/src/main/java/com/njcn/oracle/controller/DataSyncController.java @@ -1,14 +1,7 @@ package com.njcn.oracle.controller; -import cn.hutool.core.date.DatePattern; -import cn.hutool.core.date.LocalDateTimeUtil; -import cn.hutool.extra.spring.SpringUtil; - import com.njcn.oracle.bo.param.DataAsynParam; -import com.njcn.oracle.bo.param.MigrationParam; -import com.njcn.oracle.mybatis.service.IReplenishMybatisService; -import com.njcn.oracle.service.DataSyncService; -import com.njcn.oracle.util.LocalDateUtil; +import com.njcn.oracle.service.IOracleService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; @@ -16,14 +9,6 @@ import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import org.springframework.web.servlet.ModelAndView; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.time.temporal.ChronoUnit; -import java.util.List; -import java.util.Objects; /** * Description: @@ -38,32 +23,26 @@ import java.util.Objects; @RequestMapping("/data") @Api(tags = "数据同步") @AllArgsConstructor -public class DataSyncController { +public class DataSyncController { - private final DataSyncService dataSyncService; + private final IOracleService oracleService; /** * 将时间区间拆解为24小时分区,小于24小时,仅查询当前时间区间,目前不支持指定时分秒 * 暂且不用多线程处理,因无法控制数据指标数和时间范围多大,担心 + * * @param dataAsynParam */ @PostMapping("/dataSync") @ApiOperation("数据同步") @ApiImplicitParam(name = "dataAsynParam", value = "数据同步参数", required = true) - public Boolean dataSync(@RequestBody DataAsynParam dataAsynParam){ + public Boolean dataSync(@RequestBody DataAsynParam dataAsynParam) { + oracleService.dataBacthSysc(dataAsynParam); - - dataSyncService.dataBacthSysc(dataAsynParam); - - return true;// HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, "数据同步"); + return true;// HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, true, "数据同步"); } - - - - - } diff --git a/oracle-data/oracle-target/src/main/java/com/njcn/oracle/service/IOracleService.java b/oracle-data/oracle-target/src/main/java/com/njcn/oracle/service/IOracleService.java new file mode 100644 index 0000000..f2ff150 --- /dev/null +++ b/oracle-data/oracle-target/src/main/java/com/njcn/oracle/service/IOracleService.java @@ -0,0 +1,7 @@ +package com.njcn.oracle.service; + +import com.njcn.oracle.bo.param.DataAsynParam; + +public interface IOracleService { + void dataBacthSysc(DataAsynParam dataAsynParam); +} diff --git a/oracle-data/oracle-target/src/main/java/com/njcn/oracle/service/impl/OracleServiceImpl.java b/oracle-data/oracle-target/src/main/java/com/njcn/oracle/service/impl/OracleServiceImpl.java new file mode 100644 index 0000000..680df51 --- /dev/null +++ b/oracle-data/oracle-target/src/main/java/com/njcn/oracle/service/impl/OracleServiceImpl.java @@ -0,0 +1,148 @@ +package com.njcn.oracle.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.LocalDateTimeUtil; +import cn.hutool.core.text.StrPool; +import cn.hutool.extra.spring.SpringUtil; +import com.njcn.oracle.bo.param.DataAsynParam; +import com.njcn.oracle.bo.param.MigrationParam; +import com.njcn.oracle.bo.po.JobDetail; +import com.njcn.oracle.mybatis.service.IReplenishMybatisService; +import com.njcn.oracle.service.IOracleService; +import com.njcn.oracle.service.JobDetailService; +import com.njcn.oracle.util.LocalDateUtil; +import lombok.Data; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; +import org.springframework.util.StopWatch; + +import java.lang.ref.WeakReference; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; +import java.util.Objects; + +@Data +@Service +@RequiredArgsConstructor +public class OracleServiceImpl implements IOracleService { + + private final static String PACKAGE_PREFIX = "com.njcn.oracle.service.impl."; + private final static String PACKAGE_SUFFIX = "ServiceImpl"; + + private final JobDetailService jobDetailService; + + @Value("${business.slice:2}") + private int slice; + + /** + * 批量处理数据表的数据迁移 + * + * @param dataAsynParam 业务参数 + */ + @Override + @Async + public void dataBacthSysc(DataAsynParam dataAsynParam) { + Runtime runtime = Runtime.getRuntime(); + System.out.println("开始执行前总堆内存为:" + runtime.totalMemory() / (1024 * 1024) + " MB"); + System.out.println("开始执行前已用堆内存为:" + (runtime.totalMemory() - runtime.freeMemory()) / (1024 * 1024) + " MB"); + System.out.println("开始执行前空闲堆内存为:" + runtime.freeMemory() / (1024 * 1024) + " MB"); + //目前且作为2片,后续将该属性提取到配置文件中 + List tableNames = dataAsynParam.getTableNames(); + //嵌套循环,先循环指标,再循环日期 + tableNames.stream().forEach(tableName -> { + IReplenishMybatisService executor; + try { + executor = (IReplenishMybatisService) SpringUtil.getBean(Class.forName(PACKAGE_PREFIX + tableName + PACKAGE_SUFFIX)); + } catch (ClassNotFoundException e) { + throw new RuntimeException(e); + } + List dateList = LocalDateUtil.getDateList(dataAsynParam.getStartTime(), dataAsynParam.getEndTime()); + dateList.forEach(date -> { + //程序监听 + StopWatch stopWatch = new StopWatch(); + stopWatch.start(); + //分片下,每段时间的小时数 + int sliceHour = 24 / slice; + for (int i = 0; i < slice; i++) { + String dateStr = LocalDateTimeUtil.format(date, DatePattern.NORM_DATE_PATTERN); + LocalDateTime startTime = LocalDateTimeUtil.parse(dateStr + StrPool.C_SPACE + (sliceHour * i < 10 ? "0" + sliceHour * i : sliceHour * i) + ":00:00", DatePattern.NORM_DATETIME_PATTERN); + LocalDateTime endTime = LocalDateTimeUtil.parse(dateStr + StrPool.C_SPACE + (sliceHour * (i + 1) - 1 < 10 ? "0" + (sliceHour * (i + 1) - 1) : sliceHour * (i + 1) - 1) + ":59:59", DatePattern.NORM_DATETIME_PATTERN); + //查询该时区的数据,并准备入库 + MigrationParam migration = new MigrationParam(); + migration.setStartTime(startTime); + migration.setEndTime(endTime); + //采用弱引用接受,后续手动调用gc后,会清空该对象 + WeakReference weakReferenceData = new WeakReference<>(executor.queryData(migration)); + int size = 0; + if (CollectionUtil.isNotEmpty(weakReferenceData.get())) { + size = weakReferenceData.get().size(); + } + System.out.println(tableName + "查到" + size + "条数据后总堆内存为:" + runtime.totalMemory() / (1024 * 1024) + " MB"); + System.out.println(tableName + "查到" + size + "条数据后已用堆内存为:" + (runtime.totalMemory() - runtime.freeMemory()) / (1024 * 1024) + " MB"); + System.out.println(tableName + "查到" + size + "条数据后空闲堆内存为:" + runtime.freeMemory() / (1024 * 1024) + " MB"); + //日志记录 + JobDetail jobDetail = new JobDetail(); + jobDetail.setTableName(tableName); + jobDetail.setExcuteDate(date); + jobDetail = jobDetailService.select(jobDetail); + if (Objects.nonNull(jobDetail)) { + if (jobDetail.getState() == 2 && i == 0 && size != 0) { + //第一片执行时返现是失败的,则再次执行 + jobDetail.setState(0); + jobDetail.setRowCount(size); + jobDetail.setUpdateTime(LocalDateTime.now()); + jobDetailService.updateByMultiId(jobDetail); + } else if (jobDetail.getState() == 0 && i > 0 && jobDetail.getRowCount() + size != 0) { + // 处理中,后续时间片的处理,累加记录数 + jobDetail.setState(0); + jobDetail.setRowCount(jobDetail.getRowCount() + size); + jobDetail.setUpdateTime(LocalDateTime.now()); + jobDetailService.updateByMultiId(jobDetail); + } else { + System.gc(); + break; + } + } else { + if (size > 0) { + jobDetail = new JobDetail(); + jobDetail.setTableName(tableName); + jobDetail.setExcuteDate(date); + jobDetail.setState(0); + jobDetail.setRowCount(size); + jobDetail.setUpdateTime(LocalDateTime.now()); + jobDetailService.save(jobDetail); + } + } + try { + if (CollectionUtil.isNotEmpty(weakReferenceData.get())) { + //执行目标库的数据处理 + executor.clearTargetData(migration); + executor.insertBatchByDB(weakReferenceData.get()); + //最后一片时修改状态 + } + if (i + 1 == slice && Objects.nonNull(jobDetail)) { + stopWatch.stop(); + jobDetail.setState(1); + jobDetail.setDuration(stopWatch.getTotalTimeSeconds()); + jobDetail.setUpdateTime(LocalDateTime.now()); + jobDetailService.updateByMultiId(jobDetail); + } + } catch (Exception exception) { + exception.printStackTrace(); + jobDetail.setState(2); + jobDetail.setUpdateTime(LocalDateTime.now()); + jobDetailService.updateByMultiId(jobDetail); + } + + System.out.println("执行后总堆内存为:" + runtime.totalMemory() / (1024 * 1024) + " MB"); + System.out.println("执行后已用堆内存为:" + (runtime.totalMemory() - runtime.freeMemory()) / (1024 * 1024) + " MB"); + System.out.println("执行后空闲堆内存为:" + runtime.freeMemory() / (1024 * 1024) + " MB"); + } + }); + }); + } +} diff --git a/oracle-data/oracle-target/src/main/resources/application.yml b/oracle-data/oracle-target/src/main/resources/application.yml index c0cda4a..3961169 100644 --- a/oracle-data/oracle-target/src/main/resources/application.yml +++ b/oracle-data/oracle-target/src/main/resources/application.yml @@ -56,7 +56,7 @@ spring: strict: false datasource: master: - url: jdbc:oracle:thin:@192.168.1.51:1521:pqsbase + url: jdbc:oracle:thin:@192.168.1.101:1521:pqsbase username: pqsadmin password: Pqsadmin123 driver-class-name: oracle.jdbc.driver.OracleDriver @@ -82,3 +82,7 @@ mybatis-plus: #指定主键生成策略 id-type: assign_uuid +#分片次数,一定为24的约数,1 2 3 4 6 8 12 24 +business: + slice: 4 + diff --git a/oracle-data/oracle-target/src/main/resources/static/index.html b/oracle-data/oracle-target/src/main/resources/static/index.html index 8424bc8..8fe970e 100644 --- a/oracle-data/oracle-target/src/main/resources/static/index.html +++ b/oracle-data/oracle-target/src/main/resources/static/index.html @@ -5,7 +5,6 @@ 迁移 - @@ -86,7 +85,11 @@ - + + +