自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 收藏
  • 关注

原创 Flink CDC (Mysql为例)

flink cdc mysql 对数据的解析和消费进行了二次封装,使用者只需增加简单的配置,实现FlinkConsumerListener接口,关注编写业务代码即可。

2022-07-26 13:52:22 6178 6

原创 AES GCM算法实现

AES GCM

2022-07-13 17:46:14 1103

原创 幂等性组件

幂等性组件,springboot-starter形式,项目依赖redission组件

2022-04-07 16:26:44 1191

原创 接口防重复提交

背景进来开发了一个新增的接口,有开发伙伴反馈连续点击新增保存时,增加了两条数据原因正常的业务流程应该是点击 “新增保存” 按钮,等待返回成功,跳转查询列表,or 返回失败,当前页面提醒。问题原因如下:1.后端没有做防重复提交2.前端伙伴没有在点击新增保存按钮时loading等待返回结果。解决方案该问题前端做放重复提交or后端做防重复提交均可,因主要做后端,所以提供一个后端解决方案。前端打开新增or修改页面时,生成一个唯一字符串(可调用后端接口生成or前端生成),然后请求新增o

2022-01-17 15:41:41 1296

原创 xml解析实体工具类

import com.alibaba.fastjson.JSON;import com.thoughtworks.xstream.XStream;import com.thoughtworks.xstream.annotations.XStreamAlias;import com.thoughtworks.xstream.converters.basic.DateConverter;import com.thoughtworks.xstream.io.xml.DomDriver;import c.

2022-01-13 18:05:03 187

原创 mybatis-plus通用参数统一处理

背景:实际开发中,我们经常会为表设计创建人、创建时间、更信人、更新时间等通用字段,每个接口都需要增加or修改这些字段,1是代码冗余,2则容易出错。mybatis-plus提供了一种统一处理的方案,解决了这一痛点。如果需要理解mybatis-plus的基础用法,可以查看作者的另外两篇文章Mybatis-Plus的使用_m0_37298602的博客-CSDN博客https://blog.csdn.net/m0_37298602/article/details/117788047Mybatis-plus分

2021-10-20 15:17:36 1548

原创 springboot Excel解析及生成玩法

背景:近日,发现了一个解析excel的springboot-starter(pom依赖如下),挺好玩,使用尤其简单,复刻了下代码,了解一下 <dependency> <groupId>com.pig4cloud.excel</groupId> <artifactId>excel-spring-boot-starter</artifactId> <ver

2021-10-19 14:51:10 1619

原创 Assembly打包

pom文件 <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.6&l

2021-10-14 17:10:03 404

原创 springboot 上传文件报错:The temporary upload location [/tmp/tomcat.*.*/*/Tomcat/*/ROOT] is not valid

原因:springboot 启动tomcat服务的时候默认会在/tmp目录下生成一个缓存文件夹,linux系统满足某种条件会清理/tmp路径,导致报错。思路:很明显这个缓存目录是用来缓存上传文件的,当上传的文件进行缓存时,找不到缓存目录,导致IOException2021-10-13 11:15:02,189 ERROR (CommonExceptionHandler.java:24)- error isorg.springframework.web.multipart.MultipartExc

2021-10-13 11:45:18 643

原创 手写tomcat

背景:作为后端开发者,我们的通信都是基于socket服务器,但是因为各种服务容器的流行,类似tomcat、jboss之类的socket服务器帮我们实现了这部分功能,这让我们理所当然了,甚至有些小伙伴对这类工具到底是什么都不甚清楚。项目介绍:使用netty实现,时间精力有限,功能较为简陋,旨在加深对socket服务器的理解测试:测试 servlet实现package org.kwin.test.servlet;import org.kwin.tomcat.annotation

2021-10-12 11:12:50 93

原创 手写SpringBoot(Spring + orm)

项目基本内容:springboot:借助tomcat作为socket服务器(后续会手写一个tomcat服务器);spring:实现了mvc、Ioc,DI,aop、事务;orm:将mapper加载到spring的容器池中、注解式sql,save、update、getById、getAll等基础方法的封装。项目思路基本介绍:1.SpringApplication工具类,启动tomcat,配置DispatcherServlet2.DispatcherServlet 初始化加载配置,并创建容

2021-10-11 12:28:20 905

原创 Spring Cloud Zuul网关 上传大文件 not present

背景:spring cloud平台的服务,需要上传大文件,上传60m文件没有问题,但是上传一个110m文件,开始报如下错误:解决方案如下:spring: servlet: multipart: enabled: true max-file-size: 200MB max-request-size: 200MB spring 上传大文件需要修改上述配置,但如果通过zuul上传大文件,上述配置远远不够,zuul网关针对大文件做了一些限制,官网S.

2021-09-29 17:48:25 666

原创 服务可靠性保障-watchdog

背景:生产环境中如果服务挂掉,影响生产,因此写了一个简单的服务保障脚本,借助linux的crontab进行watchdog的保障,可保证服务器重启后服务被拉起配置文件[SYS]#最大失败次数max_fail_size=3#监测周期sleep_time=20#单个日志文件10Mlog_size=10000000[SERVICE]#监听的服务进程main_process=/**/**/**/**/**.jar#监听的端口号port=9012#服务启动命令restart_com

2021-09-26 12:09:24 276

原创 Springboot项目启动脚本

#!/bin/bashCURRENTPATH=`cd \`dirname $0\`\/..; pwd`#需注意如项目根目录下包含多个.jar文件则不可用cd $CURRENTPATHJARFILE=$(ls -l |grep .jar$ | awk '{print$9}')FILEPATH=$CURRENTPATH"/"$JARFILE# 堆内存设置JAVA_OPTS="-Xms2g -Xmx2g"#NewRatio young与old比例, SurvivorRatio eden与.

2021-09-26 12:00:52 1203

原创 Spring Cloud Config 问题:Cannot pull from remote ***.git the working tree is not clean

背景还原:微服务更新了git上的配置,担心 配置中心读取本地缓存,遂删除本地缓存,重启config服务后,报错:Cannot pull from remote ***.git the working tree is not clean这个错误还是相对较为清晰,本地的git文件not clean,即本地文件有修改,无法远程拉取最新的文件,只需要强制拉取即可,配置如下:spring: cloud: config: server: git: .

2021-09-14 12:18:48 551

原创 git访问

1.查找github地址http://www.github.com.ipaddress.com/记录 140.82.112.3 github.com2.查找域名地址http://www.global.ssl.fastly.net.ipaddress.com/记录199.232.69.194 github.global.ssl.fastly.net3.查找静态资源地址http://www.assets-cdn.github.com.ipaddress.com/...

2021-08-21 10:10:46 440

原创 SpringCloud配置中心获取配置信息异常

重启微服务时,服务启动报错,发现未获取到配置信息,进入config服务定位,日志如下2021-07-15 15:12:05,962 INFO (ConfigClusterResolver.java:43)- Resolving eureka endpoints via configuration2021-07-15 15:16:02,586 ERROR (DirectJDKLog.java:182)- Servlet.service() for servlet [dispatcherServlet]

2021-07-15 17:00:44 1529

原创 手撸一个简单的RPC(<-_<-)

前言近期因工作需要,了解了一下netty这个nio框架,使用中觉得netty非常有意思,最近又了解了一下ZooKeeper的基本使用,看到了几篇非常好的文章,(抄袭)借鉴了一下,借助SpringBoot、Netty、ZooKeeper带你实现一个简单的RPC远程调用。准备工作实现一个RPC(Remote Procedure Call)需要涉及很多知识点,如:网络通信 心跳检测 编解码 代理 反射 序列化、反序列化 服务注册与发现(集群场景下是必须的) ...其中,网络通信、心

2021-06-24 13:19:30 223

原创 ZooKeeper部署及基本使用

简介ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务

2021-06-21 14:46:41 351

原创 CentOS8安装Docker

安装步骤:1. 下载docker-ce的repocurl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo2. 安装依赖(这是相比centos7的关键步骤)yum install https://download.docker.com/linux/fedora/30/x86_64/stable/Packages/containerd.io-1.2.6-3.3

2021-06-19 12:13:20 56

原创 request.getRequestURL()获取域名

1.背景生产环境中,我们通常使用集群防止单点问题,因此我们通过域名访问集群时需要通过代理服务器转发,同时实现负载均衡 我们域名解析指向我们的代理服务器

2021-06-15 15:34:48 2658 1

原创 Mybatis-plus分页查询

如果对mybatis-plus基本使用不清楚的可以查看作者文章简单了解下mybatis-plus:https://blog.csdn.net/m0_37298602/article/details/117788047

2021-06-11 10:47:33 159 1

原创 Mybatis-plus 代码生成器

如果对mybatis-plus基本使用不清楚的可以查看作者文章简单了解下mybatis-plus:https://blog.csdn.net/m0_37298602/article/details/117788047

2021-06-11 10:28:30 89

原创 Mybatis-Plus的使用

前言mybatis是我们常用的orm框架,我们通过在xml中编写sql语句caozuoshu

2021-06-11 09:31:10 270

原创 ShedLock分布式锁机制

在springboot中常使用Scheduler做定时任务,只需要配置好@Scheduled和@EnableScheduling之后,按照cron表达式进行计划任务。但是在这

2021-06-10 17:12:35 1651

原创 Hadoop知识回顾二——单节点安装(standalone)

1.环境准备CentOS 7 请先安装配置好jdk通过下面命令获取hadoop-3.2.1安装包,如果未安装wget命令,使用(yum -y install wget)安装。wget -O hadoop-3.2.1.tar.gz http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-3.2.1/hadoop-3.2.1.tar.gz...

2020-03-31 23:33:50 355

原创 centos7 安装

1.环境准备虚拟机:VMware-workstation-full-14.1.3linux:centos 7 (阿里云镜像:http://mirrors.aliyun.com/centos/7/isos/x86_64/)ssh工具:MobaXterm-Professional-12.0虚拟机及ssh工具 (链接:https://pan.baidu.com/s/1Juu217KCn...

2020-03-30 00:25:47 489

原创 Hadoop知识回顾一

近来心血来潮,考虑将过去两年学习的一些知识回顾一下,一来巩固知识,再来希望能够对过去的知识盲点有所领悟。1.环境虽然hadoop也能安装在windows环境下,不过我们无论是在生产还是工作调试,都会在linux环境下,而且linux基本知识是作为一个程序员必备也是必须熟悉的知识,因此还是建议将hadoop安装在linux环境下,后期我会附上linux(centos)安装教程,以及hadoo...

2020-03-28 00:18:33 195

转载 理解 Spring ApplicationListener

https://blog.csdn.net/liyantianmin/article/details/81017960

2018-12-23 21:09:50 92

转载 ContextRefreshedEvent事件使用注意事项

https://blog.csdn.net/huangshanchun/article/details/79053228

2018-12-23 21:09:08 820

原创 设计模式之十 状态模式

状态模式 定义状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。 例子我们使用《Head First 设计模式》中的糖果机例子:糖果机有NoQuarter、HasQuarter、Sold、SoldOut等状态,当然,我们后期可以根据需求加入Winner状态。首先,让我们创建一个接口,让所有的状态都必须实现这个接口:/** * 状态...

2018-09-13 16:02:30 204

原创 设计模式之九 迭代器与组合模式

迭代器与组合模式定义 迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。组合模式允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合 例子 废话不多说,先看具体案例煎饼屋和餐厅合并了,现在需要使用新的菜单,但是两者菜单实现的结构不太一样,煎饼屋使用ArrayList记录菜单,餐厅使用...

2018-09-12 14:56:26 272

原创 设计模式之八 封装算法

封装算法定义模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。 优缺点 应用场景 Java数组类的设计者提供给我们一个方便的模板方法用来排序。public static void sort(Object[] a) { Object aux[] = (Object[...

2018-09-11 15:43:43 981

原创 设计模式之七 适配器模式与外观模式

适配器模式与外观模式定义 适配器模式将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。形象的说,如果你在国内使用一台美版的笔记本,那么你必然需要一个交流电适配器,适配器的作用就是将一种接口转换成另一种接口,以符合客户的期望。这个模式可以通过创建适配器进行接口转换,让不兼容的接口变成兼容。这可以让客户从实现的接口解耦。外观模式提供了一个统一的...

2018-09-11 10:12:56 128

原创 设计模式之六 命令模式(封装调用)

命令模式(封装调用)定义命令模式将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。 优缺点应用场景web服务器的队列请求,以及应用的日志请求 。例子命令模式可将“动作的请求者”从“动作的执行者”对象中解耦。客户负责创建命令对象。public class Client{ public Comm...

2018-09-10 16:31:04 160

原创 设计模式之五 单件模式

单件模式定义单件模式确保一个类只有一个实例,并提供一个全局访问点。优缺点优点:全局变量需要在程序启动时创建好对象(有的JVM的实现是:在用到的时候创建对象),消耗不必要的资源,而单件模式可以在我们需要时才创建对象,和全局变量一样方便,又没有全局变量的缺点。应用场景有一些对象我们其实只需要一个,比方说:线程池(threadpool)、缓存(cache)、对话框、偏好设置和注...

2018-09-10 13:40:23 232

原创 设计模式之四 工厂模式(简单工厂、工厂方法、抽象工厂)

工厂模式定义简单工厂其实并不是一个设计模式,反而比较像是一种编程习惯。有些开发人员把这个编程习惯误认为是“工厂模式”(Factory Pattern)。所有工厂模式都用来封装对象的创建。工厂方法模式(Factory Method Pattern)通过让子类决定该创建的对象是什么,来达到将对象创建的过程封装的目的。工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪...

2018-09-10 11:04:41 114

原创 设计模式之三 装饰者模式

装饰者模式定义装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。装饰者模式的目标是允许类容易扩展,在不修改现有代码的情况下,就可搭配新的行为。优、缺点优点1、装饰者模式可以提供比继承更多的灵活性2、可以通过一种动态的方式来扩展一个对象的功能,在运行时选择不同的装饰器,从而实现不同的行为。3、通过使用不同的具体装饰类以及这些装饰...

2018-09-10 10:38:37 238

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

    观察者(Observer)模式1) 例子:报纸和杂志的订阅报社的业务就是出版报纸 向某家报社订阅报纸,只要他们有新报纸出版,就会给你送来。只要你是他们的订户,你就会一直收到新报纸。、 当你不想看到报纸的时候,取消订阅,他们就不会再送新报纸来。 只要报社还在运营,就一直会有人(或单位)向他们订阅或取消订阅报纸。出版者(Subject) + 订阅者(Observer) =...

2018-09-10 10:30:52 127

原创 设计模式之一 策略模式

策略模式定义 策略模式定义了算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。应用场景在开发过程中常用到这种情况,实现一个功能有多种算法或策略,我们需要根据不同的应用场景选择不用的算法。所以,我们需要把一个类A中经常变化或者将来可能改变的部分抽取出来,并为之实现一个接口B,类A中只需要拥有这个接口B的句柄,根据需要时,为类A注入接口B的具体实现...

2018-09-10 10:08:40 121

空空如也

空空如也

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

TA关注的人

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