前言
不用说也知道,一次性读取出那么大的数据是疯了吗,虚拟机能承受的聊那么大的对象吗?,所以我们需要分批进行读取。
下面是使用fenduan 每1万条进行一次读取执行
public void keyToVolumn() {
log.info("开始进行转移");
Long count = couponTaoKeDataMapper.countAll();
Long fenduan = 10000L;
Long num = count / fenduan;
Long yushu = count % fenduan;
System.out.println(num);
System.out.println(yushu);
for (int i = 1; i <= 34; i++) {
List<CouponTaoKeData> couponTaoKeDatas = couponTaoKeDataMapper.findAll((i - 1) * fenduan + 1, i * fenduan);
log.info((i - 1) * fenduan + 1 + "查找数据成功" + i * fenduan + "插入完成");
for (CouponTaoKeData couponTaoKeData : couponTaoKeDatas) {
inserVolumn(couponTaoKeData);
}
log.info((i - 1) * fenduan + 1 + "到" + i * fenduan + "插入完成");
}
Long yushufinal = num * fenduan + yushu;
List<CouponTaoKeData> couponTaoKeDatas = couponTaoKeDataMapper.findAll(num * fenduan + 1, yushufinal);
for (CouponTaoKeData couponTaoKeData : couponTaoKeDatas) {
inserVolumn(couponTaoKeData);
}
log.info("全部插入成功");
}
@Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class)
public void inserVolumn(CouponTaoKeData couponTaoKeData) {
}
/*
public static void main(String[] args) {
Long count = 340000L;
Long fenduan = 5000L;
Long num = count/fenduan ;
Long yushu = count%fenduan;
System.out.println(num);
System.out.println(yushu);
for(int i = 1 ; i<=34 ;i++){
System.out.println((i-1)*fenduan+1 +"|"+ i*fenduan);
}
Long yushufinal = num*fenduan+yushu ;
System.out.println(num*fenduan+1 +"|"+yushufinal);
}
*/
如果满意,请打赏博主任意金额,感兴趣的在微信转账的时候,添加博主微信哦, 请下方留言吧。可与博主自由讨论哦
支付包 | 微信 | 微信公众号 |
---|---|---|