文档类
文章平均质量分 85
菠萝-琪琪
这个作者很懒,什么都没留下…
展开
-
kafka每秒千万级优化思路
如果秒级产生150MB的数据,如果Consumer消费的速度不够快,那么8G的PageCache可能不到半小时就没了,那么就会带来新的问题了,consumer消费的数据由于在PC上面找不到,就会不停的去硬盘查找数据,那么内存度和交换度的性能是数量级的差别,新的Topic数据大概率会存储在日志数量最少的borker磁盘上,如果这部分topic数据量比较大,那么就会导致存储不均衡,这个borker磁盘会率先报警,部分borker磁盘到达存储阈值后会对kafka带了很大的性能影响。可以通过如下命令查看迁移状态。原创 2022-10-12 19:19:15 · 1509 阅读 · 0 评论 -
性能和成本的综合架构:单元化架构
第一次听见单元化架构的小伙伴可能一时有点懵,听说过微服务架构、网格架构等但是单元化架构是什么鬼?其实在我们手机里面很多常用APP都是单元化架构,类似高德导航、金融银行类APP都是将单元化架构进行了很多年,我们都知道导航类APP对于请求RT和请求稳定性都是十分严格的,如果RT延迟很高,等你已经路过某个路口了,导航突然告诉你需要拐弯....这个时候的你是不是心里一万个草泥马涌出来了,那么这个导航APP你到家肯定立刻就卸载了。...原创 2022-07-24 18:57:08 · 2580 阅读 · 1 评论 -
ClickHouse 深度解析第二篇
ClickHouse 诞生之处是为了服务Yandex自家的WEB流量分析产品Metrica,在超过20万亿数据的场景下,ClickHouse能做到90%查询在一秒内返回的效果,但是对于一款OLAP的数据库来说也有不适用的场景:不支持事务 不擅长根据主键按行进行查询 不擅长按行删除数据为了获得极致的查询性能,OLAP数据库会相应放弃很多其他功能的弱化ClickHouse是一款列式存储+数据压缩的数据库,数据压缩的本质就是对一定步长内的重复数据进行转换,案例:压缩前:abcdefg...原创 2022-04-17 11:33:26 · 1414 阅读 · 0 评论 -
用Java设计实现多实例多库查询
服务的边界职责:大数据层取数统一实现入口(数据源的路由,ADB/CK/HBASE... 大数据操作层数据源的路由) 支持多实例、多库、多表的异构数据查询通过 查询 语义分析+元信息解析,拆解 查询输入 中的异构数据源处理,所有异构数据处理采用异步 Callback 方式解决的问题:多个数据来源写入到不同实例、不同库中,并且一个圈选可以支持圈多个实例(不同库)中的标签、事件数据 单表数据量过大,目前只能通过压缩保留时间解决,需要可以进行按时间段拆表分表查询数据单实例配置上限问题,实例升级..原创 2022-03-08 21:04:14 · 4194 阅读 · 0 评论 -
SQL 解析原理和使用场景
Github 地址:https://github.com/j-easy/easy-ruleshttps://github.com/j-easy/easy-rules原创 2022-01-09 16:27:23 · 4324 阅读 · 0 评论 -
Sonar-扫描插件自定义扩展
数据平台-研发一组-得物版Sonar开发规约已经制作完成阿里很早之前出过一个流传在坊间的《Java开发手册.pdf》,这个里面定义了很多开发规范,其中最基本必须要遵守的规范阿里出了一套Sonar插件来帮助扫描说的开发插件其实本质就是利用源设计者留下的入口拿到源事件然后进行实现,最终你的实现会在你不知道的时间,不知道的地点被调度执行,这就是设计模式的魅力,保证了开闭原则下进行了功能扩展那么Sonar的设计者为我们留下了哪些入口呢?这个时候我们经常会百度、谷歌,一...原创 2021-06-13 08:30:07 · 3899 阅读 · 1 评论 -
PII欧洲已经强制执行了,中国还会远吗?
什么是个人识别信息?PII?个人识别信息(即 PII)指与身份已识别或可识别的自然人(“数据主体”)有关的任何信息,包括 适用的当地法律定义的个人数据。可识别身份的自然人指可直接或间接识别其身份的人士,特别 是通过姓名、身份证号码、地址数据、网上识别特征之类的识别特征来识别其身份,或参照该自 然人在身体、心理、基因、精神、经济、文化或社会身份方面特有的一种或多种因素来识别其身份。欧洲PII实行要求是哪些?用户未经授权的隐私信息不得私自采集存储 用户有删除个人隐私诉求时,服务企业必须在整个系..原创 2021-06-08 17:22:37 · 356 阅读 · 0 评论 -
TimingWheel 令人拍案叫绝的设计
常规时间轮都知道时钟有指针、刻度、每刻度表示的时长等属性,Netty时间轮的设计也差不多,只是时钟的指针有时、分、秒,而Netty只用了一个指针。那么Netty是如何把定时任务加入时间轮的呢?下面先看一幅时间轮的构造图当指针指向某一刻度时,它会把此刻度中的所有task任务一一取出并运行那么问题来了:时间轮的指针走一轮是多久? 时间轮是采用什么容器存储这些task的? 定时任务的运行时间若晚于指针走一轮的终点(见图7-1中的N),则此时此任务该放在哪个刻度?刻度的间隔时间标注为tickD原创 2021-04-16 23:50:20 · 233 阅读 · 0 评论 -
JVM-G1 性能调优思路与实战
现在大多数公司的Java生产版本都是再JDK8,所以本次性能调优主要针对G1来展开GC的主要回收区域就是年轻代(young gen)、老年代(tenured gen)、持久区(perm gen),在jdk8之后,perm gen消失,被替换成了元空间(Metaspace),元空间会在普通的堆区进行分配。垃圾收集为了提高效率,采用分代收集的方式,对于不同特点的回收区域使用不同的垃圾收集器。系统正常运行情况young是比较频繁的,full gc会触发整个heap的扫描和回收。在G1垃圾收集器中,最好的优化状原创 2021-04-16 15:14:46 · 3497 阅读 · 0 评论 -
一图读懂RocketMQ核心工作流程
废话不多说,说的太多也容易忘记,就上一张图来解释RMQ核心组件得交互流程吧,当然如果小伙伴想要深入了解原理得话还是需要去阅读源码,对着每个核心组件慢慢琢磨得原创 2021-03-24 10:35:14 · 281 阅读 · 0 评论 -
Linux-IO全整理:BIO/NIO/IO多路复用解析
BIO 同步阻塞BIO是Blocking IO的意思。在类似于网络中进行read,write,connect一类的系统调用时会被卡住。举个例子,当用read去读取网络的数据时,是无法预知对方是否已经发送数据的。因此在收到数据之前,能做的只有等待,直到对方把数据发过来,或者等到网络超时。对于单线程的网络服务,这样做就会有卡死的问题。因为当等待时,整个线程会被挂起,无法执行,也无法做其他的工作。于是,网络服务为了同时响应多个并发的网络请求,必须实现为多线程的。每个线程处理一个网络请求。线..原创 2021-03-23 17:40:12 · 305 阅读 · 0 评论 -
Lambda底层原理最强解析
最近再次重温Lambda函数编程这本书的时候,思考起第一次看这本书只是为了了解如何深入使用Lambda,却没有去思考为什么可以Lambda了,话比较绕口~~哈哈你可能会好奇Java编译器是如何实现Lambda表达式,而Java虚拟机又是如何对它们进行处理的。如果你认为Lambda表达式就是简单地被转换为匿名类,那就太天真了。由于Lambda表达式提供了函数式接口中抽象方法的实现,这让人有一种感觉,似乎在编译过程中让Java编译器直接将Lambda表达式转换为匿名类更直观。不过,匿名类有着种种不尽如人原创 2021-03-20 10:52:57 · 1835 阅读 · 0 评论 -
互联网新概念:云原生
在进入21世纪后成长起来的新一代公司,已经找到了更好的做事方法。谷歌公司是一个伟大的创新者,它和其他一些互联网巨头一起,发展出了新的IT模式。据估计,谷歌在其世界各地的数据中心里运行着200万台服务器,那么是怎么做到得呢?图展示了一个系统的示意图,它几乎经常描述的“坏”系统相反这个系统的目标如下:■ 简单且可以频繁地在生产环境中进行发布。■ 运维具有稳定性和可预测性。你应该已经熟悉了这些因素的反面因素:■ 碎片化的变化会造成发布缓慢和不稳定,可重复性则相反。■ 有风险的部署会导致原创 2021-03-15 22:13:30 · 362 阅读 · 1 评论 -
转型架构师过程中必须知道得核心架构要素
关于什么是架构,一种比较通俗的说法是“最高层次的规划,难以改变的决定”,这些规划和决定奠定了事物未来发展的方向和最终的蓝图。从这个意义上说,人生规划也是一种架构。选什么学校、学什么专业、进什么公司、找什么对象,过什么样的生活,都是自己人生的架构。具体到软件架构,维基百科是这样定义的:“有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计”。系统的各个重要组成部分及其关系构成了系统的架构,这些组成部分可以是具体的功能模块,也可以是非功能的设计与决策,他们相互关系组成一个整体,共同构成了原创 2021-03-13 19:46:20 · 99 阅读 · 0 评论 -
解锁面试必问题:ThreadLocal 正确姿势
ThreadLocal 百度上面对于他的解释已经非常非常多了,但是很多其实都是复制来复制去,并且很多都是说的错的,最离谱的是百度上面头几页说ThreadLocal在Set的时候内部的ThreadLocalMap存放的Key是当前线程对象...,真的简直在虾扯蛋,不知道误导了多少人ThreadLocal的API非常简单,这里就不在描述了,主要针对他源码以及设计思路来分析设计者的用意,要了解ThreadLocal原理那么先要了解Thread和ThreadLocalMap是啥...Thread是Java种原创 2021-02-17 22:01:00 · 135 阅读 · 0 评论 -
Java的类加载过程
前言一个Java文件从编码完成到最终执行,一般主要包括两个过程编译 运行编译,即把我们写好的java文件,通过javac命令编译成字节码,也就是我们常说的.class文件。运行,则是把编译生成的.class文件交给Java虚拟机(JVM)执行。而我们所说的类加载过程即是指JVM虚拟机把.class文件中类信息加载进内存,并进行解析生成对应的class对象的过程。举个通俗点的例子来说,JVM在执行某段代码时,遇到了class A, 然而此时内存中并没有class A的相关信息,于是JV原创 2021-02-11 00:17:40 · 1336 阅读 · 3 评论 -
2021 情人节程序猿的你在干嘛
还在赶项目进度而忘记吃饭甚至忘记给女朋友惊喜的你,知道老板已经已经在为情人节狂欢了吗?好了,这些都没有关系,谁叫你是程序猿呢,程序猿的情人节就要跟别人不一样,程序猿要是有喜欢的人(没有也假设有),那各种表白送情意的招儿那还少吗?什么?一脸懵逼? 下面还是给大家普及普及吧一直认为情人节最好的礼物就是...|Java 程序猿|在生命结束之前,每天都会爱你多一点|C程序猿|without u(没有了你),我再也不能对 the world(这个世界) ...原创 2021-02-09 21:08:11 · 255 阅读 · 0 评论 -
MySQL MVCC 原理及实现
什么是MVCCMultiversion Concurrency Control:多版本并发控制,提供并发访问数据库时,对事务内读取的到的内存做处理,用来避免写操作堵塞读操作的并发问题(提高并发读写性能)。MVCC主要适用于Mysql的RC(读已提交),RR(可重复读)隔离级别问题(痛点)A正在读数据库中某些内容,而B正在给这些内容做修改(A,B为两个单独的事务),A可能看到一个不一致的数据,在B没有提交前,如何让A能够一直读到的数据都是一致的或读到的数据一直是最新的呢?每个用户连接原创 2021-02-08 20:51:06 · 401 阅读 · 0 评论 -
消息中间件设计探究
消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,成为异步RPC的主要手段之一。 当今市面上有很多主流的消息中间件,如老牌的ActiveMQ、RabbitMQ,炙手可热的Kafka,阿里巴巴自主开发的Notify、MetaQ、RocketMQ等。 本文不会一一介绍这些消息队列的所有特性,而是探讨一下自主开发设计一个消息队列时,你需要思考和设计的重要方面。过程中我们会参考这些成熟消息队列的很多重要思想。 本文首先会阐述什么时候你需要一个消息队列原创 2021-02-05 13:32:16 · 285 阅读 · 0 评论 -
JWT 新一代认证登录方案
JWT 全称是 JSON Web Token,是目前非常流行的跨域认证解决方案,在单点登录场景中经常使用到。有些人觉得它非常好用,用了它之后就不用在服务端借助 redis 实现认证过程了,但是,还有一部分人认为它生来就有缺陷,根本不能用。传统的认证方式从一个登录场景说起你平时用过那么多网站和 APP,其中有很多都是需要登录的吧,那咱们就选一个场景出来说说。以一个电商系统为例,如果你想要下单,首先需要注册一个账号,拥有了账号之后,需要输入用户名(比如手机号或邮箱)、密码完成登录过程。之后你原创 2021-02-03 22:20:22 · 369 阅读 · 0 评论 -
如何再工作中让自己成长
如何学习在繁忙的工作中,持之以恒、不断学习和进步是一件艰巨的任务,需要坚强的毅力和坚定的决心。如果方法不得当,更是事倍功半。幸好我们的古人和现在哲人已经总结了很多优秀的学习方法论,这里汇总了一些重要原则。遵循这些方法必会对大家的工作学习大有裨益。贵在坚持有报道指出,过去几十年的知识量超过之前人类几千年的知识量总和。而计算机领域绝对是当代知识更新最快的领域之一,因此,工程师必须要接受这样一个现实,现在所掌握的深厚知识体系很快就会被淘汰。要想在计算机领域持续做优秀架构师,就必须不停的学习,掌握最新技原创 2021-02-02 22:09:01 · 692 阅读 · 0 评论 -
TCP 协议中的滑动窗口使用
滑动窗口协议:TCP协议的使用 维持发送方/接收方缓冲区 缓冲区是 用来解决网络之间数据不可靠的问题,例如丢包,重复包,出错,乱序在TCP协议中,发送方和接受方通过各自维护自己的缓冲区。通过商定包的重传机制等一系列操作,来解决不可靠的问题。问题一:如何保证次序?提出问题:在我们滑动窗口协议之前,我们如何来保证发送方与接收方之间,每个包都能被收到。并且是按次序的呢?发送方发送一个包1,这时候接收方确认包1。发送包2,确认包2。就这样一直下去,知道把数据完全发送完毕,这样就结束了.原创 2021-02-01 20:51:05 · 438 阅读 · 0 评论 -
理解分布式事务
分布式事务分布式事务顾名思义就是要在分布式系统中实现事务,它其实是由多个本地事务组合而成。对于分布式事务而言几乎满足不了 ACID,其实对于单机事务而言大部分情况下也没有满足 ACID,不然怎么会有四种隔离级别呢?所以更别说分布在不同数据库或者不同应用上的分布式事务了。2PC2PC(Two-phase commit protocol),中文叫二阶段提交。二阶段提交是一种强一致性设计,2PC 引入一个事务协调者的角色来协调管理各参与者(也可称之为各本地资源)的提交和回滚,二阶段分别指的..原创 2021-01-31 20:22:33 · 130 阅读 · 0 评论 -
MongoDB 4.2 分片集群搭建
1 部署结构1.1 集群结构典型的三分片Mongo集群如下图所示,包含三类组件:查询路由、配置服务器、分片。其中查询路由为mongos进程,配置服务器和分片都是mongod进程。配置服务器和分片都采取副本集(replica set)来确保可用性和健壮性,每个副本集最少包含三个节点。查询路由都是单实例运行,没有副本集机制,可根据需要增加实例数量,也可以在外部添加负载均衡。上图中每个方框仅代表功能集合,不代表物理位置。实际部署时,为了避免单点故障,同一个副本集中的成员,应该部署在不同主机上...原创 2021-01-29 00:01:31 · 1928 阅读 · 0 评论 -
ThreadPoolExecutor线程池实现原理及其实践
随着计算机行业的飞速发展,摩尔定律逐渐失效,多核CPU成为主流。使用多线程并行计算逐渐成为开发人员提升服务器性能的基本武器。J.U.C提供的线程池:ThreadPoolExecutor类,帮助开发人员管理线程并方便地执行并行任务。了解并合理使用线程池,是一个开发人员必修的基本功。1.1 线程池是什么线程池(Thread Pool)是一种基于池化思想管理线程的工具,经常出现在多线程服务器中,如MySQL。线程过多会带来额外的开销,其中包括创建销毁线程的开销、调度线程的开销等等,同时也降低了计算机的原创 2021-01-28 00:46:45 · 535 阅读 · 0 评论 -
架构师的方法论
1.架构思维相信很多人,谈起架构,第一印象,就是各种各样的架构图,有一个高高在上的人,坐在那里,阔谈自己的理念。诚然画图是架构师的一项日常工作,但通过一张图,来道出事物发展的本质,却是另外一种功夫。做了这么多年的程序员之后,如果只有打开了Idea才会思考架构,或者是敲起了Sql代码才会理解业务,细细想来,只能是自己的功夫不到,理解不透罢了。架构的第一印象,不应该是多流行的技术,或者是多么高性能的框架,而是它能不能满足业务的需求,既不能跑不动,也不能太超前。那么架构是什么?从理论上讲,它描述了系统原创 2021-01-26 21:43:36 · 763 阅读 · 0 评论 -
CMS 常见问题分析和解决方案
1.0引言自 Sun 发布 Java 语言以来,开始使用 GC 技术来进行内存自动管理,避免了手动管理带来的悬挂指针(Dangling Pointer)问题,很大程度上提升了开发效率,从此 GC 技术也一举成名。GC 有着非常悠久的历史,1960 年有着“Lisp 之父”和“人工智能之父”之称的 John McCarthy 就在论文中发布了 GC 算法,60 年以来, GC 技术的发展也突飞猛进,但不管是多么前沿的收集器也都是基于三种基本算法的组合或应用,也就是说 GC 要解决的根本问题这么多年一直都.原创 2021-01-25 00:34:17 · 6212 阅读 · 2 评论 -
通过ReentrantLock的源码解析AQS的原理
Java中的大部分同步类(Lock、Semaphore、ReentrantLock等)都是基于AbstractQueuedSynchronizer(简称为AQS)实现的。AQS是一种提供了原子式管理同步状态、阻塞和唤醒线程功能以及队列模型的简单框架1 ReentrantLock1.1 ReentrantLock特性概览ReentrantLock意思为可重入锁,指的是一个线程能够对一个临界资源重复加锁。为了帮助大家更好地理解ReentrantLock的特性,我们先将ReentrantLock跟原创 2021-01-19 11:28:33 · 746 阅读 · 2 评论 -
Java8 Optional优雅空值判断
API介绍先介绍一下API,与其他文章不同的是,本文采取类比的方式来讲,同时结合源码。而不像其他文章一样,一个个API罗列出来,让人找不到重点。1、Optional(T value),empty(),of(T value),ofNullable(T value)这四个函数之间具有相关性,因此放在一组进行记忆。先说明一下,Optional(T value),即构造函数,它是private权限的,不能由外部调用的。其余三个函数是public权限,供我们所调用。那么,Optional的本质,就是内原创 2021-01-15 12:48:06 · 3844 阅读 · 5 评论 -
JVM垃圾回收算法详解
标记-复制算法标记—复制算法,主要解决了标记—清除算法之后内存过于碎片化的问题,它是将可用的内存区域划分为大小相等的两块内存(当然也不一定非要相等),在进行垃圾收集时,现将存活的对象标记,然后将标记的存活对象复制到另一半空闲的内存区域,最后将之前的一半区域中所有对象完全清除用来存放之后新生的对象。这样就解决了使用标记—回收算法之后内存碎片化的问题,而且在对象内存分配时也极为简单,只需要移动堆顶指针,按顺序分配即可,简单高效。缺点也极为明显: 如果某块内存区域中在进行垃圾回收时,有大量的存活原创 2021-01-15 00:21:15 · 312 阅读 · 0 评论 -
JVM 运行时内存空间详解
相关概念方法区只是JVM规范中定义的一个概念,用于存储静态变量、常量池、符号引用、类信息、JIT编译后的代码等数据,具体放在哪里,不同的实现可 以放在不同的地方。永久代是HotSpot虚拟机特有的概念,是对方法区的实现,别的JVM没有永久代的概念。(虽然去除了永久代,但是方法区作 为概念上的区域仍然存在) JDK8的HotSpot VM已经是以前的HotSpot VM与JRockit VM的合并版,也就是传说中的“HotRockit”,只是产品里名字还是叫HotSpot VM。 所以对于说JDK8原创 2021-01-13 14:40:47 · 305 阅读 · 0 评论 -
什么是Redis NUMA陷阱!
NUMA陷阱的概述:我们公司的基础架构部有个云Redis平台,其中Redis实例在申请的时候可以自由选择需要的内存的大小。然后就引发了我的一个思考,Redis单实例内存最大申请到多大比较合适?假设母机是64GB内存的物理机,如果不考虑CPU资源的的浪费,我是否可以开一个50G的Redis实例?于是我在Google上各种搜索,讨论这个问题的人似乎不多。找到唯一感觉靠谱点的答案,那就是单进程分配的内存最好不要超过一个node里的内存总量,否则linux当该node里的内存分配光了的时候,会在自己node转载 2021-01-10 21:54:14 · 562 阅读 · 0 评论 -
快速读懂UML类图绘制规范
架构师或者项目经理可能经常需要绘制UML类图,但是很多人却绘制的很不规范,其实UML针对Java是有专业规范存在的,下面开始详解一.类属性描述:在UML类图中,类使用包含类名、属性(field) 和方法(method) 且带有分割线的矩形来表示,比如下图表示一个NoticeAction类,它包含notice和noticeService这2个属性,以及saveNotice()等方法。...原创 2019-04-10 21:43:45 · 7229 阅读 · 6 评论 -
解决nginx访问日志记录post数据
1. 问题描述nginx 在获取post数据时候,如果是中文,则转换成16进制显示在日志文件中,如下图所示。日志格式为: log_format postdata '$remote_addr | $request_body | $resp_body';此篇文章记录下解决此次问题的过程。最新版本解决方式适合nginx 1.11.8 以上版本在nginx 1.11.8 以上版本中log_format 增...原创 2018-02-28 12:41:49 · 14548 阅读 · 0 评论 -
Java 操作Solr搭建高性能搜索引擎
目前比较适合Java的搜索引擎搭建一般会选用Solr,底层操作会使用Solrj交互,其实Solr也是基于Lucene。实施过程中发现网上很多关于Java集成Solr的文档都是基于Solr5+版本的,而对于Solr7+版本的文档很少,并且很多都是坑,所以花了不少时间把自己再部署过程中的经验分享出来。 首先去官网 Apache Solr官网 下载Solr的7.1,然后上传至服务器,原创 2017-11-17 17:24:32 · 5832 阅读 · 0 评论 -
Mysqldump 相关参数详解
参数参数说明--all-databases , -A导出全部数据库。mysqldump -uroot -p --all-databases--all-tablespaces , -Y导出全部表空间。mysqldump -uroot -p --all-databases --all-tablespaces--no-tablesp原创 2017-10-18 18:48:23 · 1320 阅读 · 0 评论 -
Linux 常用实用命令整合
1.删除30分钟前的.sql结尾的文件find /xx/xx -nmin +30 -type f -name *.sql | xargs rm -f 2.linux下查询tomcat进程使用情况ps -ef | grep tomcat3.杀掉某个目录下的所有tomcat进程ps aufx|grep tomcat|grep 509|awk '{print $2}'原创 2017-09-13 15:17:00 · 379 阅读 · 0 评论 -
深入理解HTTP幂等性
Programming.log - a place to keep my thoughts on programming理解HTTP幂等性基于HTTP协议的Web API是时下最为流行的一种分布式服务提供方式。无论是在大型互联网应用还是企业级架构中,我们都见到了越来越多的SOA或RESTful的Web API。为什么Web API如此流行呢?我认为很大程度上应归功于翻译 2017-08-15 18:07:39 · 361 阅读 · 0 评论 -
Linux下使用expect和另外一台机器通过SSH进行持续性交互
我们平时在写一些Linux脚本的时候需要操作多台机器,可能需要连接到不同机器执行不同命令并且需要根据机器返回状态进行下一步的命令,这种交互操作脚本编写时就需要使用到Expect方式了。#!/usr/bin/expect -f set port port_no set user user_name set host host_name set password my_pa原创 2017-08-17 17:41:59 · 824 阅读 · 0 评论 -
SpringBoot配置使用Log4j2
根据官方描述Log4j2比Log4j的并发性能高十几倍,具体本人并未实际测试,那么如果我们要使用Log4j2的话应该如何配置呢,其实配置过程很简单。1.先将SpringBoot自带的日志存储Logback禁用 2.在Maven中引入Log4j2的包 3.在application.properties文件中加入logging.config=classpath:log原创 2017-08-17 15:00:56 · 3712 阅读 · 0 评论