自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(77)
  • 问答 (1)
  • 收藏
  • 关注

原创 webconfig-boot分布式项目Web一站式配置

Springboot项目web配置,为了规范项目,很多项目已经要求全局配置一些公用的组件,例如异常捕获、参数校验、统一返回参数等。所以webconfig就是为了解决此类问题,封装好通用的参数并提供可插拔的配置

2024-03-15 17:42:33 377

原创 myabtis流式查询

流式处理在大数据方面应用比较广泛。随着数据的爆发式增长,流式处理的方式也被应用到日常的工具中,如JDK的对于集合处理的Stream流、Redis5.0新增的数据结构Stream专门来处理消息等。流式查询指的是查询成功后不是返回一个集合而是返回一个迭代器,应用每次从迭代器取一条查询结果。流式查询的好处是能够降低内存使用。今天要分享的是Mybaits的流式查询。Mybatis流式查询通过使用游标一次处理一条数据的方式,减少了内存的占用,从而提高了大数据量查询的效率。

2023-11-02 13:33:20 152

原创 Spring源码-refresh(1)

refresh是Spring的核心流程,主要包含13个方法。这13个方法中主要又包含3个方法。如图:其中标记星号的代表主要的方法。从方法中后面的分支数据也可以看出,主要的方法中存在大量的逻辑处理,后面我们会慢慢分解开来梳理。本章内容主要梳理前四个方法。

2023-10-30 16:18:34 119

原创 Spring源码解析-注册配置信息

注册配置类的信息。其中为传入的配置类class。通过的方法。已经注册了系统自带的处理器以及方法。就可以直接解析配置类中的属性和方法了。最终调用的是方法,遍历配置类以此处理。主要处理的流程如下:读取配置类的信息,将信息封装到对象中。通过注解工具处理中的注解。将配置类的和beanName封装成将注册到中,也就是当前的中。注册信息主要是三个属性beanNamealiases。将这些属性注册到当前的Context(registry)中。

2023-10-27 14:24:16 120

原创 SSE 推送技术

Server-Sent Events(SSE)技术,它是一种用于实现服务器向客户端实时单向推送数据的Web技术。SSE基于HTTP协议,允许服务器将数据以事件流(Event Stream)的形式发送给客户端。客户端通过建立持久的HTTP连接,并监听事件流,可以实时接收服务器推送的数据。之前分享了一篇关于websocket技术的文章。本篇算是之前内容的一个补充。

2023-09-27 13:15:10 384

原创 Spring源码解析-构造函数

构造函数中,主要创建两个对象分别用来读取注解参数和classpath下的文件AnnotatedBeanDefinitionReader 专门读取注解参数的ReaderClassPathBeanDefinitionScanner 专门读取classpath下的文件,例如yml、properties等。可以通过扫描指定的包或类来自动检测和注册带有特定注解的组件,例如@Service、@Repository和@Controller等。使用。

2023-09-05 15:11:39 192

原创 Spring源码解析-总览

Spring源码一直贯穿我们Java的开发中,只要你是一个Java开发人员就一定知道Spring全家桶。Spring全家桶为我们一共一站式服务,IOC、AOP更是Spring显著特性。但是Spring到底怎么为我们提供容器,管理资源的呢?下来,我们将一步步探究Spring源码内幕。本章节主要讲述Spring源码的概述。

2023-09-01 14:18:48 221

原创 设计模式之责任链模式

责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递,所以职责链将请求的发送者和请求的处理者解耦了。

2023-05-12 15:36:28 534 1

原创 关于使用Lombok的注意事项

Lombok项目是一个Java库,它会自动插入您的编辑器和构建工具中,从而为你优化Java代码。通过注解的方式代替我们手动生成gettersettertoString等方法。虽然现在的IDE可以帮我们自动生成,但是整个类显的很臃肿。尤其类的属性太多时,查看属性非常不方便。使用Lombok可以使我们的代码更加简洁,可以说是程序员的福音。官网地址:https://projectlombok.org/因为种种原因有人抵触它,有人喜欢它,这就仁者见仁智者见智了。撇开Lombok。

2023-05-10 16:14:21 1132

原创 LiteFlow规则引擎的入门

LiteFlow是一个非常强大的现代化的规则引擎框架,融合了编排特性和规则引擎的所有特性。利用LiteFlow,你可以将瀑布流式的代码,转变成以组件为核心概念的代码结构,这种结构的好处是可以任意编排,组件与组件之间是解耦的,组件可以用脚本来定义,组件之间的流转全靠规则来驱动。LiteFlow拥有开源规则引擎最为简单的DSL语法。十分钟就可上手。详细可见官网:https://liteflow.yomahub.com/组件其实就是一个Bean,继承LiteFLow提供的不同NodeComponent。

2023-04-23 10:08:25 4669 5

原创 Sprinboot聚合项目归荑

在创建springboot项目时,都会有一个Main方法。如果将Springboot项目设计成聚合项目时,我们是不是要把所有的子项目都按照Springboot的方式创建呢?如果是会出现什么问题,以及我们怎么解决呢?如果我们使用maven项目+Springboot项目混合使用,会有什么问题呢?这些都是今天我们要探讨的问题。

2023-04-19 15:52:06 748

原创 分布式链路追踪Skywalking

Skywalking是一个国产的开源框架,2015年有吴晟个人开源,2017年加入Apache孵化器,国人开源的产品,主要开发人员来自于华为,2019年4月17日Apache董事会批准SkyWalking成为顶级项目,支持Java、.Net、NodeJs等探针,数据存储支持,H2、Mysql、Elasticsearch、TiDB等,跟Pinpoint一样采用字节码注入的方式实现代码的无侵入,探针采集数据粒度粗,但性能表现优秀,且对云原生支持,目前增长势头强劲,社区活跃。

2023-03-09 09:50:42 758

原创 微服务项目结构最佳实践

微服务项目中,我们会把项目细化,按照功能模块拆分成不相同的微服务,每一个微服务都是一个独立的moudle。该moudle的既是服务也是应用,也就是我们原始的单体项目架构。每一个moudle不复杂的时候,这样的拆分就可以了。但是,当moudle里面的配置较多的时候,其实还可以针对moudle继续细分。下面就按照继续细分的思路展开说明。2、拆分思路按照应用层、服务层、持久层以及公用层拆分成四大模块。

2023-02-07 16:22:34 837

原创 基于Canal+kafka监听数据库变化的最佳实践

工作中,我们很多时候需要根据某些状态的变化更新另一个业务的逻辑,比如订单的生成,成交等,需要更新或者通知其他的业务。我们通常的操作通过业务埋点、接口的调用或者中间件完成。但是状态变化的入口比较多的时候,就很容易漏掉某些地方。代码维护起来也比较麻烦。今天介绍阿里出品的【canal】中间件完成数据库字段的监听。

2022-12-22 15:55:06 2808

原创 基于Feign接口的全链路拦截器

单体应用时,我们经常会把一些共享数据,比如登录信息等放在session里面,当然也可以放在ThreadLocal里面。随着业务复杂度的提高,分布式应用越来越主流。单机的存储的思想已经不适用了,共享session应运而生,比如nosql、session复制等技术方案。分布式架构中SpringCloud使用尤为广泛。如果想通过Feign接口的调用隐式的传递一些参数,比如用户ID、名称,接口的验签等,我们应该怎么实现呢。今天通过传递用户名到feign服务端,来使用来实现, 同时对比一下web的拦截器的区别。

2022-11-16 19:17:42 4343 1

原创 SpringCloud Feign传递Date参数时差问题的解决方案

使用SpringCloud的朋友,再试传递Date参数的时候,有没有遇到时间差的问题呢

2022-10-09 18:04:11 3145 2

原创 优雅的处理参数校验以及异常

return new JsonResult(false, "参数memberSid为空");}return new JsonResult(false, "参数test为空");}相同的参数在不同的地方运用就是出现类型的冗余的代码。如果我们要快速开发要么把参数校验复制一份出来,要么抽成公用的方法。重复的代码本来就是代码重构和优化的一个表象,所以这种方式本身不可取。抽成公用方法确实是一个不错的方法,但是未能从本质像解决。由此,看能不能使用框架的技术去解决这样问题。

2022-10-08 15:03:15 987

原创 TreeMap根据value排序遇到的问题及分析

1、前言针对集合排序,我们通常都会借助具有排序功能的集合,来处理我们的数据。比如ArrayList,TreeMap等。但是使用不同的排序工具,可能会遇到不同的问题。2、案例分析2.1 需求:根据HashMap中的数据,按照value排序。例如:/*排序之前的结果: key:value = a:3 key:value = b:5 key:value = c:1 key:value = d:4 key:value = e:2要求输出结果为: key:value = c:1.

2021-08-18 17:21:35 1183

原创 重试框架spring-retry的探索与揭秘

1、前言 在项目中,我们经常会遇到网络波动,或者调用第三方接口偶尔异常的情况。为了保证数据的可用性、程序的及健壮xing

2021-06-11 19:08:32 645

原创 java设计模式之观察者模式

1、前言 观察者模式:当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)又叫发布-订阅模式(Publish/Subscribe)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。2、应用场景及说明 主要用来解决一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。从游戏角度出发,就是从被动定时拉取,变成主动推送的方式。比如红色警戒中【尤里】控制对方工具,只有【尤里】时候对方工具才能解...

2020-09-21 18:26:33 526

原创 springboot集成webSocket实现网络实时通讯

1、前言 在很多业务场景中,对实时数据要求比较高,我们就不能采用轮训拉取的方式来获取数据了。就可以采用websocket的长链接的形式,实时有服务端或者客户端推送数据,已达到数据的实时展示。2、websocket简介SpringBoot官方推荐的基于STOMP实现,STOMP:即Simple Text Orientated Messaging Protocol,它是一个简单的文本消息传输协议,属于 WebSocket 的子协议, 提供了一个可互操作的连接格式,允许STOMP客户端与任意...

2020-08-04 16:37:46 3267 1

原创 大数据之使用datax完成rds到hdfs,hdfs到rds的导入导出

1、前言 mysql等数据存储技术,随着海量数据的不断增加,已经不能满足我正常的业务需求。大数据技术带来的数据仓库为此带来很多解决方案。今天基于京东云的环境简单的搭建一个数据数据仓库,使用阿里出品的datax完成数据的导入和导出。2、导入导出工具简单介绍 DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute...

2020-07-17 17:39:36 1908

原创 Springboot源码分析(二)

梳理springboot的启动流程图:

2020-06-03 21:54:45 163

原创 Springboot源码分析(一)

阅读源码有助于项目中问题原因的查找,也方便我们对在项目中的程序的拓展。然而阅读源码是一个痛苦的过程,记录一下自己的学习过程吧。1、Main方法开始再进去看看SpringApplication实例化过程// SpringApplication 实例化过程public SpringApplication(ResourceLoader resourceLoader, C...

2020-04-16 17:30:51 216

原创 IntelliJ IDEA的基本配置以及插件

1、前言终于放弃Eclipse,拥抱Idea了。idea的提示更友好一下,但是代码检查非常严格。同样的代码在eclipse上能跑起来,在idea上可能就会多一写编译的处理。可能是因为是新手,所以使用的时候有点障碍。对于新的开发工具,还是要尝试去玩玩的。这里记录下一些基础的配置,方便我们开发的使用。2、Eclipse 和Idea 的区别 不管哪一种软件,对于我们来说都是服...

2020-03-11 18:09:50 1077 2

原创 使用DFA算法模型构建敏感词过滤器

1、前言 开发过程使用文本编辑器上传文本时,有时候我们需求检测敏感字。对于少量的文字,我直接使用indexOf或者正则去判断敏感词是否存在。但是当文字量较大时,性能就会变得很差。这里简单学习了DFA算法模型来创建索引,将敏感词变成树形结构,方便查找,提高查询效率。2、DFA算法的数据结构 DFA算法的目的就是讲词语分词整个,形成一个树形结构。每一个关键词一定是的从根节点到尾结...

2019-11-13 18:34:22 1496

原创 Springboot集成aop的简单使用

1、前言 之前看到别人写的代码,没有设置任何东西,发现结果值变化了。比如,插入和修改数据的时候经常记录操作人的信息。不用设值,入库就会有操作人的信息。还有其他一些日志、监控等。这都是采用了aop切面的方式。2、依赖引入<!-- 切面 --><dependency> <groupId>org.springframework.boot&...

2019-11-08 10:01:21 642

原创 springboot集成Mail邮件,发送邮件

1、前言 企业中,需要我们对一些数据进行监控,或者将数据导出发给指定的人。简单的通知采用的短信的形式,但是复杂的数据导出给其他人,就会采用邮件的方式。并且这样成本比较低。Spring框架本身提供了Mail的支持,当然目前流行的springboot框架对邮件的支持更加友好。下面以springboot集成Mail为例。2、引入依赖<!-- 邮件 --><de...

2019-11-07 17:31:17 822

原创 Springboot项目对jsp页面的支持

1、前言Springboot项目的和maven项目的结构有所不同,如图:springboot项目在resources下面有两个包:static,templates,但是maven项目下没有。 springboot项目在src下的main文件夹是空的,但是maven项目下有一个webapp包以及webapp下的文件结构springboot推荐使用模板引擎比如:thymeleaf。th...

2019-10-08 16:55:08 551

原创 Springboot集成Kafka的简单使用

1、简介 Kafka是分布式发布-订阅消息系统。它最初由LinkedIn公司开发,之后成为Apache项目的一部分。Kafka是一个分布式的,可划分的,冗余备份的持久性的日志服务。它主要用于处理活跃的流式数据。在消息队列中,Kafka具有强大的吞吐量。2、初体验 Kafka2.3.0 包结构: 在bin下有WIN平台和Linux的启动脚本,在此以WIN...

2019-09-06 15:24:05 1173

原创 优雅的使用SpringCloud

1、前言 SpringCloud 是现在比较流行的微服务架构,随着微服务的流行,更多企业也从传统的架构向微服务架构转型。转型的过程中,为了兼容之前的服务架构,部分企业选择了双注册中心(指Dubbo和Cloud)。所以开发者在改造的时候,非常掣肘,只能在原来的基础上做一些调整。最后代码看起来有点似驴非马的感觉,当然这是对于一个有代码洁癖的人的感觉,哈哈哈。。。功能当然是完全OK的。...

2019-08-02 14:23:55 246

原创 使用shiro标签遇到的坑

1、前言使用shiro框架做权限控制是不错的选择,在使用shiro标签的过程中,是否会遇到一些坑呢。恰好笔者遇到了,在此记录一下。2、shiro标签坑的描述标签:<shiro:haspermission name="你的权限"></shiro:haspermission>当使用的标签具有层级关系的时候,就有可能掉坑里,并且出不来。例如:第一层级...

2019-03-18 10:34:28 3315 3

原创 java设计模式之空对象模式

1、前言在开发中,经常会出现各种“NullPointException”这样的异常。好的空对象设计模式可以有效防止空指针异常,但是空对象设计模式有它一定的是使用场景。下面先来了解一下空对象设计模式吧。2、空对象的设计思想空对象设计模式一般用于创建多个(大量)的类似对象,创建一个抽象的类来定义共同的属性或者方法,其继承的具体实现类完成特定实现,另外专门创建一个空对象实现该抽象类,对调用的...

2019-01-29 15:31:22 395

原创 JSZip 的简单介绍

1、前言     前端处理一些批量文件或者图片时候,通过使用异步上传,减少表单一次性提交的的数据量。但是图片或者文件有删除的时候,服务器上真实的图片不容易删除。找了一些资料发些了JSZip这个技术,可以将文件或者图片打包成一个Zip文件。这就大大减少了数据的传输量。简单记录一下JSZip的用法2、JSZip简介这是一个JavaScript类库,用来操作.zip文件的工具。使用主要引...

2019-01-11 12:18:39 32614 10

原创 java设计模式之建造者模式

1、前言建造者模式(Builder Pattern) 又名生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。建造者模式 是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。简单来说就是专人做专事。2、建造者模式包含的角色...

2018-12-02 17:07:24 411 3

原创 Eclispe开发,本地开发配置HTTPS协议证书

1、前言现在很多开发网站为了安全,会使用https协议。但是给开发带来了不小的麻烦,我们eclispe默认的协议是http协议,https协议的接我就会都请求不到,好烦人,只能盲开发。后台通过网上资料配置了本地证书就可以实现,但是按照网上教程配置之后总会有一些小问题,不能友好的访问。故此,笔者记录了一下自己配置的过程。2、使用工具SUN公司提供了keytool的工具,为我们解决了这个问...

2018-11-23 13:00:23 841

原创 base64图片打成Zip包上传,以及服务端解压的简单实现

1、前言上传图片一般采用异步上传的方式,但是异步上传带来不好的地方,就如果图片有改变或者删除,图片服务器端就会造成浪费。所以有时候就会和参数同步提交。笔者喜欢base64图片一起上传,但是图片过多时就会出现数据丢失等异常。因为tomcat的post请求默认是2M的长度限制。2、解决办法有两种:① 修改tomcat的servel.xml的配置文件,设置 maxPostSize=...

2018-11-16 17:32:03 2309

原创 springboot集成mybatis注解开发,thymeleaf的简单使用

1、前言之前玩过使用xml配置文件集成mybatis,这次为了集成thymeleaf模板,选用简单的注解完成数据库的查询。集成工具无非是引入依赖,添加配置完成此相关功能。玩过之后,记录一下学习的过程,以备后续使用。2、依赖引入使用springboot开发,建议装上springboot相关的插件,这样能省去很多操作。 &lt;dependency&gt;...

2018-10-29 10:39:47 939

原创 学习Google guava工具类

1、前言好的工具类能节约开发者的开发成本,今天学习一个新的工具类guawa。guawa是谷歌出品的一款开源java工具类,提供一些常用的方法。2、坐标&lt;dependency&gt;    &lt;groupId&gt;com.google.guava&lt;/groupId&gt;    &lt;artifactId&gt;guava&lt;/artifactId&gt;    &lt...

2018-05-29 15:05:54 1450

原创 学习Apache commons-beanutils工具类

1、前言初学java时,使用过beanUtils封装javabean参数,使用框架之后,由框架自动封装。慢慢淡忘了这个工具类,今天来学习学习!2、导入依赖 <dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils&l...

2018-05-28 10:17:29 3922

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除