# import_data_from_file **Repository Path**: zhiaiyahong/import_data_from_file ## Basic Information - **Project Name**: import_data_from_file - **Description**: 从文件导入数据到数据库,多线程执行,且可在执行过程中动态添加执行线程,支持CSC、txt导入mysql,其他数据库暂未实现,但使用者可以根据自己需求修改。 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2019-11-13 - **Last Updated**: 2021-04-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # import_data_from_file #### 介绍 从文件导入数据到数据库,多线程执行,且可在执行过程中动态添加执行线程,支持CSV、txt导入mysql,其他数据库暂未实现,但使用者可以根据自己需求修改。 快速分割文件对UTF8格式的文件比较友好,因此在处理文件前先将文件转为UTF8格式,本项目已提供快速转化方法`FileUtil.gbkToUtf8(oldFilePath,newFilePath)` #### 软件架构 springboot + mybatis #### 使用说明 ##### 本地启动服务 1. 下载项目 2. 修改resource/mybatis/applicationContext-mybatis.xml 中的数据库配置 3. 在本地创建表 ``` ## 任务记录表 create table task_exec( type_name varchar(50) comment '类型', batch_no varchar(50) comment '批次号', insert_time timestamp default current_timestamp comment '插入时间', complete_time datetime null comment '完成时间', unique key t_b_u_k(type_name,batch_no) ) ## 测试表 create table insu( in_name unique varchar(50), in_sex varchar(50) ) ``` 4. 确保文件为utf8格式,不是的话就用`FileUtil.gbkToUtf8(oldFilePath,newFilePath)`转化 5. 按自己本地配置修改 com.yhwch.fun.service.ImportInsuTableService 中的各个方法,也可以copy这个类来实现自己的导入 6. 启动项目 7. 访问连接执行任务 ``` http://localhost:8888/insu/seg 快速分隔文件 http://localhost:8888/insu/autoSplit?a=4&s=1&u=1 自动分块执行任务 a 文件总数 s 需要分为的块数 u=1 执行select检查其他直接插入 ```` ##### 服务器启动项目 1. 下载项目 2. 修改resource/mybatis/applicationContext-mybatis.xml 中的数据库配置 3. 创建办 `任务记录表` 4. 确保文件为utf8格式,不是的话就用`FileUtil.gbkToUtf8(oldFilePath,newFilePath)`转化 5. 创建自己的导入类,并配置各项内容 6. 打包 ` mvn clean package -Dmaven.test.skip=true` 7. 将包上传到服务器 ,切到jar包目录,运行项目 `nohup java -jar import.jar > log.file 2>&1 &` 8. 访问对应链接即可开始任务 9. 如果感觉第一次分配的任务块太少,可以二次执行,已经在运行中的任务不会重复执行:如: ``` ## 共20个文件 ## 第一次分了两块,每块10个文件,服务器压力很小,想提高效率 http://localhost:8888/insu/autoSplit?a=20&s=2&u=0 ## 总文件不改变,将块数改为4,此时服务器总共运行的任务为6个 http://localhost:8888/insu/autoSplit?a=20&s=4&u=0 ``` #### 注意事项 1. 快速分隔会调整每个子文件的首位行,处理了方式是如果判断尾行不完整,将下一文件的首行与当前文件的尾行合并为一个整体,写入本文件尾行下一文件首行用AAA*替代, 所以文件中出现AAA不用管,这是无效数据。