slf4j

Java实现大批量数据导入导出(100W以上) -(一)导入

断了今生、忘了曾经 提交于 2020-10-25 11:23:57
最近业务方有一个需求,需要一次导入超过100万数据到系统数据库。可能大家首先会想,这么大的数据,干嘛通过程序去实现导入,为什么不直接通过SQL导入到数据库。 大数据量报表导出请参考: Java实现大批量数据导入导出(100W以上) -(二)导出 一、为什么一定要在代码实现 说说为什么不能通过SQL直接导入到数据库,而是通过程序实现: 1. 首先,这个导入功能开始提供页面导入,只是开始业务方保证的一次只有<3W的数据导入; 2. 其次,业务方导入的内容需要做校验,比如门店号,商品号等是否系统存在,需要程序校验; 3. 最后,业务方导入的都是编码,数据库中还要存入对应名称,方便后期查询,SQL导入也是无法实现的。 基于以上上三点,就无法直接通过SQL语句导入数据库。那就只能老老实实的想办法通过程序实现。 二、程序实现有以下技术难点 1. 一次读取这么大的数据量,肯定会导致服务器内存溢出; 2. 调用接口保存一次传输数据量太大,网络传输压力会很大; 3. 最终通过SQL一次批量插入,对数据库压力也比较大,如果业务同时操作这个表数据,很容易造成死锁。 三、解决思路 根据列举的技术难点我的解决思路是: 1. 既然一次读取整个导入文件,那就先将文件流上传到服务器磁盘,然后分批从磁盘读取(支持多线程读取),这样就防止内存溢出; 2. 调用插入数据库接口也是根据分批读取的内容进行调用; 3.

使用feilong发企业微信机器人

倾然丶 夕夏残阳落幕 提交于 2020-10-24 17:12:48
使用 #feilong# https://www.oschina.net/p/feilong 发企业微信机器人 企业微信机器人在日常的使用场景中越来越多, 比如服务器关键任务告警,定时发通知提醒等等, 和短信相比即免费又不像短信逐渐只有接收验证码的功能, 那么问题来了,如何使用feilong来发送企业微信机器人呢? 简单 3 步 第1步: jar 依赖 必要依赖 <dependency> <groupId>com.github.ifeilong</groupId> <artifactId>feilong</artifactId> <version>3.0.9</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpmime</artifactId> <version>4.5.12</version> <exclusions> <exclusion> <artifactId>httpclient</artifactId> <groupId>org.apache.httpcomponents</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org

大话设计模式读书笔记(访问者模式)

浪尽此生 提交于 2020-10-24 03:53:44
人物:大鸟,小菜 事件:小菜和大鸟聊男人和女人的区别。小菜道,男人成功时,背后多半有一个伟大的女人,女人成功时,背后大多有一个不成功的男人;男人失败时,闷头喝酒,谁也不用劝,女人失败时,两眼汪汪,谁也劝不了;男人恋爱时,凡事不懂也要装懂,女人恋爱时,遇事懂也要装作不懂。大鸟道,既然你都这样说了,那我们今天就将男人女人和访问者模式一起,混着学。 访问者模式: 1.简介访问者模式 2.用访问者模式实现案例,并简述优缺点 访问者模式 1.概念:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 2.结构图: 男人女人案例结合访问者模式 1.访问者模式的前提:访问者模式适用于数据结构相对稳定的系统。即状态类抽象的稳定,因为类别只有男人和女人,所以状态类中抽象的方法时稳定的,如果有很多类别的话,没加一个类别,就需要在状态各个类中加一个方法,不符合开放封闭原则。 2.结构图: 3.代码示例: Action状态的抽象类: public abstract class Action { /** * 得到男人结论或反映 * * @param concreteElementA */ public abstract void getManConclusion(Man concreteElementA); /** * 得到女人结论或反映 * *

Java实现DDD中UnitOfWork

半城伤御伤魂 提交于 2020-10-21 21:35:37
Java实现DDD中UnitOfWork 背景 Maintains a list of objects affected by a business transaction and coordinates the writing out of changes and the resolution of concurrency problems. Unit of Work --Martin Fowler Unit Of Work模式,由马丁大叔提出,是一种数据访问模式。UOW模式的作用是在业务用例的操作中跟踪对象的所有更改(增加、删除和更新),并将所有更改的对象保存在其维护的列表中。在业务用例的终点,通过事务,一次性提交所有更改,以确保数据的完整性和有效性。总而言之,UOW协调这些对象的持久化及并发问题。 Uow的本质 UOW跟踪变化 UOW维护了一个变更列表 UOW将跟踪到的已变更的对象保存到变更列表中 UOW借助事务一次性提交变更列表中的所有更改 UOW处理并发 对于以上这些点,在C#的EF框架中,DBContext已经实现。 而这里主要描述如何用java实现以上要点。 Repository 将仓储Repo作为聚合的范型类 在Repo中维护一个聚合与聚合状态的集合 在Repo中每次add/update/delete等操作时,将操作的聚合对象,和其最终状态存入集合中

SpringBoot 的 logback 日志配置

怎甘沉沦 提交于 2020-10-15 05:42:19
1. 在 resources 目录下创建日志的配置文件 logback-spring.xml , 这是 SpringBoot 官方约定的名称 参考spring官方文档代码 <?xml version="1.0" encoding="UTF-8"?> <configuration> <property name="logger.path" value="D:/logs" /> <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" /> <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" /> <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" /> <!-- 彩色日志格式 --> <property

Springboot集成flowable modeler web流程设计器

六月ゝ 毕业季﹏ 提交于 2020-10-14 13:54:59
之前画流程图都是用tomcat启动flowable modeler,但是这样启动就不能在分配任务用户/用户组的时候查询自己系统里的数据。所以现在需要把flowable modeler集成到项目里来。 之前自己也搜索了很多文章,都感觉不是很清晰,可能也是因为我刚接触不久。现在自己集成好了之后,记录一下自己学习的结果。 首先需要创建一个springboot应用,pom文件中引入相关jar包: <properties> <java.version>1.8</java.version> <flowable.version>6.4.1</flowable.version> <lombok.version>1.18.0</lombok.version> <fastjson.version>1.2.9</fastjson.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <type>pom</type> <scope>import</scope> </dependency> <!--Spring Cloud-->

【MQ】RabbitMQ 交换机案例代码

爷,独闯天下 提交于 2020-10-09 00:24:31
RabbitMQ Exchange类型: Direct交换机:完全按照Key进行投递 Topic交换机:对Key进行模式匹配后进行投递: *匹配一个词,#匹配一个或多个词 Fanout交换机:不需要key,通过广播模式,将消息投递到该交换机绑定的所有队列 Headers交换机: 根据消息头部决定队列消息分发 1. Direct Exchange: 默认交换机 /** * Direct 交换机:完全按照RouteKey进行消息投递(默认交换机) * @author zhiwei_yang * @time 2020-8-4-9:45 */ @Slf4j public class DirectExchange { private final static String QUEUE_NAME = "DIRECT_EXCHANGE_QUEUE"; private final static String ROUTE_KEY = QUEUE_NAME; private final static String EXCHANGE_NAME = "DirectExchange"; public static void main(String[] argv) throws Exception { //创建连接内部的通道,用于发送和接收信息 Channel channel = RabbitMqUtil

微信点餐系统(十二)-买家与卖家端连通

随声附和 提交于 2020-10-01 11:49:42
章节感悟 1.cookie的设置与注销 2.redis的使用,数据插入与删除 3.AOP的使用 4.全局捕获异常 5.微信模板消息推送 6.webSocket消息推送 买家与卖家端连通 卖家信息表 dao 开发和 service 开发 1. 创建卖家信息表 seller_info create table seller_info( seller_id varchar( 32) not null , username varchar( 32) not null , password varchar( 32) not null , openid varchar( 64) not null comment '微信openid' , create_time timestamp not null default current_timestamp comment '创建时间' , update_time timestamp not null default current_timestamp on update current_timestamp comment '更新时间' , primary key(seller_id) ) comment '卖家信息表'; 2.DAO 实体映射 SellerInfo 3.SellerInfoRepository 4. 创建 SellerService

为什么阿里巴巴禁止使用Apache Beanutils进行属性的copy?

邮差的信 提交于 2020-09-30 14:51:49
在日常开发中,我们经常需要给对象进行赋值,通常会调用其set/get方法,有些时候,如果我们要转换的两个对象之间属性大致相同,会考虑使用属性拷贝工具进行。 如我们经常在代码中会对一个数据结构封装成DO、SDO、DTO、VO等,而这些Bean中的大部分属性都是一样的,所以使用属性拷贝类工具可以帮助我们节省大量的set和get操作。 市面上有很多类似的工具类,比较常用的有 1、Spring BeanUtils 2、Cglib BeanCopier 3、Apache BeanUtils 4、Apache PropertyUtils 5、Dozer 那么,我们到底应该选择哪种工具类更加合适呢?为什么阿里巴巴Java开发手册中提到禁止使用Apache BeanUtils呢? 由于篇幅优先,关于这几种工具类的用法及区别,还有到底是什么是浅拷贝和深拷贝不在本文的讨论范围内。 本文主要聚焦于对比这几个类库的性能问题。 性能对比 No Data No BB,我们就来写代码来对比下这几种框架的性能情况。 代码示例如下: 首先定义一个PersonDO类: public class PersonDO { private Integer id; private String name; private Integer age; private Date birthday; //省略setter/getter

零成本实现接口自动化测试 – Java+TestNG 测试Restful service

核能气质少年 提交于 2020-09-30 07:37:29
接口自动化测试 – Java+TestNG 测试 Restful Web Service 关键词 :基于Rest的Web服务,接口自动化测试,数据驱动测试,测试Restful Web Service, 数据分离,Java+Maven+TestNG 本文主要介绍如何用Java针对Restful web service 做接口自动化测试(数据驱动),相比UI自动化,接口自动化稳定性可靠性高,实施难易程度低,做自动化性价比高。所用到的工具或类库有 TestNG, Apache POI, Jayway rest-assured,Skyscreamer - JSONassert 简介: 思想是数据驱动测试,用Excel来管理数据,‘Input’ Sheet中存放输入数据,读取数据后拼成request 调用service, 拿到response后写入 ‘Output’ Sheet 即实际结果, ‘Baseline’为基线(期望结果)用来和实际结果对比的,‘Comparison’ Sheet里存放的是对比结果不一致的记录,‘Result’ Sheet 是一个简单的结果报告。 Maven工程目录结构: 详细介绍 核心就一个测试类HTTPReqGenTest.java 由四部分组成 @BeforeTest 读取Excel (WorkBook) 的 ‘Input’ 和 ‘Baseline’ sheet