java+反射+多线程+生产者消费者模式+读取xml(SAX)入数据库mysql-【费元星Q9715234】

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: java+反射+多线程+生产者消费者模式+读取xml(SAX)入数据库mysql-【费元星Q9715234】 说明如下,不懂的问题直接我【费元星Q9715234】 1.反射的意义在于不将xml tag写死在sax 的代码中,直接配置到一个bean就可以了。

java+反射+多线程+生产者消费者模式+读取xml(SAX)入数据库mysql-【费元星Q9715234】

说明如下,不懂的问题直接我【费元星Q9715234】

1.反射的意义在于不将xml tag写死在sax 的代码中,直接配置到一个bean就可以了。

2.多线程分工明确,线程各做各的任务,生产者只用了一个线程,使用多线程没有意义,瓶颈在IO

3.SAX读取超大文件的性能较好,dom等均不佳。

4.总的瓶颈在DB的入库,可以使用insert ,好一点使用spring 预编译,保证全数据的入库。我采用的是mysql 的load,性能提升8倍左右,缺点是没有对数据中的阿拉伯文等语种做处理,

 

 

 

 1 /**
 2  * <a> 读xml的管 理类 </a>
 3  *
 4  * @author: feiyuanxing@baidu.com
 5  * @time 2016/12/27
 6  */
 7 public class ReadXmlManger {
 8     private static final Logger logger = LoggerFactory.getLogger(ReadXmlManger.class);
 9 
10     public static String insertTempFile;
11     public static String updateTempFile;
12 
13     /**
14      * 各种字符型的入库 还没有做
15      *
16      * @param args
17      */
18     public static void main(String[] args) {
19         Long starTime = System.currentTimeMillis();
20         String needAnalysisFileDir = "D:\\creditcode\\xml\\";
21         insertTempFile = "D:\\creditcode\\tmp\\tmpInsert.sql";
22         updateTempFile = "D:\\\\creditcode\\\\tmp\\\\tmpDelete.sql";
23 
24         if (args.length == 3) {
25             needAnalysisFileDir = args[0];
26             insertTempFile = args[1];
27             updateTempFile = args[2];
28             System.out.println("argument is right:" + args.length + Arrays.toString(args));
29         }
30         // else {
31         //            System.out.println("argument is not right:" + args.length + Arrays.toString(args) + " ,over...");
32         //            System.exit(1);
33         //            return;
34         //
35         //        }
36         // 对各种连接做初始化
37         ImportDataUtil.getConnet();
38         // 加载文件路径到队列中
39         ImportDataUtil.getXmlDirToQueue(needAnalysisFileDir);
40         // 执行将数据中的md5 列加载得到内存中
41         ImportDataUtil.getSourecXmlList();
42 
43         // 创建初始化流
44         ImportDataUtil.createWriter(insertTempFile, updateTempFile);
45         logger.info("begin compare...");
46         // 读xml到队列中
47         XmlData.pool.execute(new ReadXmlThread(CreditCode.class));
48         // 从队列中取值比较完后写到txt中
49         XmlData.pool.execute(new CompareThread(CreditCode.class));
50         // 等待所有子线程执行完
51         while (true) {
52             if (XmlData.pool.isShutdown()) {
53                 // 将txt中的数据load到数据库中
54                 loadData();
55                 Long endTime = System.currentTimeMillis();
56                 logger.info("compare over ,all read " + XmlData.atomicIntegerSC.get() + " ;");
57                 logger.info("Import the data complete, takes " + (endTime - starTime) / 1000 + " seconds;");
58                 return;
59             }
60         }
61     }
62 
63     // 都执行完执行
64     public static void loadData() {
65         // 将最后的新增加数据load到source文件中
66         ImportDataUtil.dumpInsertBuilder2File();
67 
68         // 将txt文件load到数据中  false未启用
69         CreditCode creditCode = null;
70         logger.info("Start the load data for the last time....");
71         logger.info("The mission were increased: " + XmlData.currentAddNum.get() + " tiao data");
72         ImportDataUtil.loadFile(insertTempFile, CreditCode.class);
73 
74         // 清空md5表
75         ImportDataUtil.clearTmpTable();
76         // 将集合中剩余的md5写到文件中
77         logger.info("Began to set in the rest of the md5 written to a file ");
78         ImportDataUtil.dumpUpdateBuilder2File();
79         // load进数据 and 级联删除数据
80         logger.info("Delete data load and start cascading delete data...");
81         ImportDataUtil.sourceFile(updateTempFile);
82         XmlData.context.close();
83 
84     }
85 
86 }

 

类列表

1 BeanListHandler
2 CompareThread
3 ImportDataUtil
4 ReadXmlThread
5 WriteFileUtil
6 XmlColumn
7 XmlData
8 XmlSAXParse

 

未来星开发团队--狒狒 QQ:9715234
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
1
分享
相关文章
MySQL底层概述—3.InnoDB线程模型
InnoDB存储引擎采用多线程模型,包含多个后台线程以处理不同任务。主要线程包括:IO Thread负责读写数据页和日志;Purge Thread回收已提交事务的undo日志;Page Cleaner Thread刷新脏页并清理redo日志;Master Thread调度其他线程,定时刷新脏页、回收undo日志、写入redo日志和合并写缓冲。各线程协同工作,确保数据一致性和高效性能。
MySQL底层概述—3.InnoDB线程模型
|
4月前
|
Java—多线程实现生产消费者
本文介绍了多线程实现生产消费者模式的三个版本。Version1包含四个类:`Producer`(生产者)、`Consumer`(消费者)、`Resource`(公共资源)和`TestMain`(测试类)。通过`synchronized`和`wait/notify`机制控制线程同步,但存在多个生产者或消费者时可能出现多次生产和消费的问题。 Version2将`if`改为`while`,解决了多次生产和消费的问题,但仍可能因`notify()`随机唤醒线程而导致死锁。因此,引入了`notifyAll()`来唤醒所有等待线程,但这会带来性能问题。
103 1
Java—多线程实现生产消费者
|
6月前
|
Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧
【10月更文挑战第20天】Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧,包括避免在循环外调用wait()、优先使用notifyAll()、确保线程安全及处理InterruptedException等,帮助读者更好地掌握这些方法的应用。
64 1
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
191 4
|
6月前
|
java与XML文件的读写
java与XML文件的读写
60 3
【Java新纪元启航】JDK 22:解锁未命名变量与模式,让代码更简洁,思维更自由!
【9月更文挑战第7天】JDK 22带来的未命名变量与模式匹配的结合,是Java编程语言发展历程中的一个重要里程碑。它不仅简化了代码,提高了开发效率,更重要的是,它激发了我们对Java编程的新思考,让我们有机会以更加自由、更加创造性的方式解决问题。随着Java生态系统的不断演进,我们有理由相信,未来的Java将更加灵活、更加强大,为开发者们提供更加广阔的舞台。让我们携手并进,共同迎接Java新纪元的到来!
138 11
【多线程-从零开始-捌】阻塞队列,消费者生产者模型
【多线程-从零开始-捌】阻塞队列,消费者生产者模型
87 0
Java设计模式-工厂方法模式(4)
Java设计模式-工厂方法模式(4)
|
7月前
|
uniapp:使用DCloud的uni-push推送消息通知(在线模式)java实现
以上展示了使用Java结合DCloud的uni-push进行在线消息推送的基本步骤和实现方法。实际部署时,可能需要依据实际项目的规模,业务场景及用户基数进行必要的调整和优化,确保消息推送机制在保证用户体验的同时也满足业务需求。
389 0
深入理解Java并发编程:线程安全与锁机制
【5月更文挑战第31天】在Java并发编程中,线程安全和锁机制是两个核心概念。本文将深入探讨这两个概念,包括它们的定义、实现方式以及在实际开发中的应用。通过对线程安全和锁机制的深入理解,可以帮助我们更好地解决并发编程中的问题,提高程序的性能和稳定性。

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等