多线程抽取数据库数据,数据迁移
关键代码
2000万数据同步,每次查询20000分页,一分钟分钟之内全部塞入到队列里等待
log.info("房屋数仓数据同步调度开始!"); Date yesterday = null;HouseFeedbackCount hfb = getHouseFeedbackCountTime(21);if (hfb != null){yesterday = DateUtils.addDays(hfb.getEndDate(),1);}else{yesterday= DateUtils.addDays(new Date(),-1);//今天} Date today= DateUtils.addDays(new Date(),0);//今天String beginTime = DateUtils.toString(yesterday,DateUtils.YYYY_MM_DD)+" 00:00:00";String endTime = DateUtils.toString(today,DateUtils.YYYY_MM_DD)+" 23:59:59";System.out.println("生成任务开始"+beginTime+endTime);int pageSize = 20000;int size = houseService.getHouseTotal(beginTime, endTime);if(size > pageSize){int page = size%pageSize==0?(size/pageSize):(size/pageSize)+1;System.out.println(page); int begin = 0;int end = 0;for (int i = 0; i < page; i++) {begin = pageSize*i+1;end = pageSize*(i+1);houseService.updateHouse(beginTime, endTime, begin, end);
}}else{houseService.updateHouse(beginTime, endTime, 1, size);}hfb = new HouseFeedbackCount();hfb.setBizname("房屋数仓数据同步定时生成任务");
HouseServiceImpl里面的updateHouse 加上注解@Async
@Async@Transactional
@Override
public void updateHouse(String beginTime, String endTime, int begin, int end) {
//你的迁移代码
}
配置 apring类扫描文件中配置
<task:scheduler id="yuncaiCheduler" pool-size="10"/><!-- 定时器线程数 -->
<task:annotation-driven scheduler="yuncaiCheduler"/><!-- 开启定时器注解 -->
假如你的线程池配置类,确保你的类能被扫描到
import java.util.concurrent.Executor;import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.AsyncConfigurer;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;/*** @Title: TaskExecutorConfig.java * @Package com.yuncai.scheduled * @Description: 异步任务支持配置 * @author: LGH * @date: 2018年8月10日 上午10:28:22*/
@Configuration
@ComponentScan("com.yuncai.scheduled")
@EnableAsync //利用@EnableAsync注解开启异步任务支持
public class TaskExecutorConfig implements AsyncConfigurer{//配置类实现AsyncConfigurer接口并重写getAsyncExcutor方法,并返回一个ThreadPoolTaskExevutor//这样我们就获得了一个基于线程池的TaskExecutor@Overridepublic Executor getAsyncExecutor() {ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();taskExecutor.setCorePoolSize(10);//线程池维护线程的最少数量taskExecutor.setMaxPoolSize(35);//线程池维护线程的最大数量taskExecutor.initialize();return taskExecutor;}@Overridepublic AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {return null;}}
然后你的上面的程序就可以开跑了。十个线程跑调度,主要是cpu的问题
多线程抽取数据库数据,数据迁移相关推荐
- 【巨杉数据库SequoiaDB】巨杉Tech | 巨杉数据库数据高性能数据导入迁移实践
SequoiaDB 一款自研金融级分布式数据库产品,支持标准SQL和分布式事务功能.支持复杂索引查询,兼容 MySQL.PGSQL.SparkSQL等SQL访问方式.SequoiaDB 在分布式存储功 ...
- laravel mysql rand_laravel如何从mysql数据库中随机抽取n条数据(高性能) - Laravel学习网...
laravel如何高性能地从mysql数据库中随机获取n条数据,有时候我们常常会需要从数据库随机获取数据,比如:给工作人员随机分配10个订单,随机从数据库中随机抽查100个用户:这样我们就需要随机从数 ...
- oracle怎么将一列挪到另一列,详细讲解Oracle数据库的数据迁移方法
<详细讲解Oracle数据库的数据迁移方法>由会员分享,可在线阅读,更多相关<详细讲解Oracle数据库的数据迁移方法(4页珍藏版)>请在人人文库网上搜索. 1.详细讲解 Or ...
- 复制迁移数据库表数据程序
其实很简单就是用move-corresponding语句,匹配两边的相同字段,然后赋值,就可以实现简单地在数据库表之间迁移数据了. *&---------------------------- ...
- python多线程读取数据库数据_python多线程操作MySQL数据库pymysql
python多线程操作MySQL数据库pymysql 项目中使用多线程操作数据库提示错误:pymysql.err.InterfaceError: (0, "),原因是pymysql的exec ...
- ORACLE使用copy方式存储迁移,详细讲解Oracle数据库的数据迁移方法
添加所需的表空间和用户到目标数据库中:安装所需的SQL*Net2或者Net8软件,并配置用于连接数据库的别名. 在DOS命令提示符下设置oracle_sid=Oracle7_sid. 以Interna ...
- Oracle数据库迁移测试数据,Oracle数据库的数据迁移方法
Oracle数据库的数据迁移方法 发表于:2008-04-14来源:作者:点击数: 随着数据库管理系统和操作系统平台的更新换代的速度的加快,数据库管理员经常需要在两个不同的数据库之间或在两种不同的系统 ...
- Android 数据库综述(一) 数据库片的升级与数据的迁移操作
Android 数据库综述(一) 数据库片的升级与数据的迁移操作 SQLiteOpenHelper 是 Android平台提供给我们一个数据库辅助类来创建或打开数据库 onCreate(SQLiteD ...
- 多线程操作数据库时为了防止数据的增删改的混乱该在数据库层还是程序层面上进行同步?
多线程操作数据库时为了防止数据的增删改的混乱该在数据库层还是程序层面上进行同步? [问题点数:60分,结帖人jiao_zg] 不显示删除回复 显示所有回复 显示星级回复 显示得分回复 只显示楼主 收藏 ...
最新文章
- 又有多省明确开学时间!哪个省份的高校全国最早开学?
- Oracle checkpoint详解
- ps cs3中显示任何像素不大于50%选择。选区边将不可见是什么意思
- TechEmpower Web 框架性能第19轮测试结果正式发布,ASP.NET Core在主流框架中拔得头筹...
- 【qt】QT 的信号与槽机制
- Qt::Window 独立窗口
- [云计算]交换机二层端口access、trunk、hybird的理解
- 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第2节 线程实现方式_10_Thread类的常用方法_设置线程名称...
- 【翻译】CSPNet: A New Backbone that can Enhance Learning Capability of CNN
- 小学生获奖作品html,小学生优秀绘画作品图片展示
- 2020中国高校计算机大赛网络技术挑战赛,喜报:我院学子喜获2020年中国高校计算机大赛-网络技术挑战赛13项奖励...
- 机器学习:李航-统计学习方法-代码实现
- Electron常见问题 60 - 报错:Could not start audio source
- SpringBoot之Slf4j日志实现根据业务不同将日志写进不同的文件
- Python的作者吉多·范罗苏姆简介
- [Unity] ACT 战斗系统学习 9:Bolt 和 FlowCanvas
- 学习bootstra前端框架
- AutoCAD2008绿色版用法
- github学习(1): README.md编辑语法(Github Flavored Markdown)
- 希捷es级服务器级硬盘,企业级存储 希捷Barracuda ES硬盘评测