- 博客(46)
- 收藏
- 关注
原创 Flink CDC (Mysql为例)
flink cdc mysql 对数据的解析和消费进行了二次封装,使用者只需增加简单的配置,实现FlinkConsumerListener接口,关注编写业务代码即可。
2022-07-26 13:52:22
6450
5
原创 接口防重复提交
背景进来开发了一个新增的接口,有开发伙伴反馈连续点击新增保存时,增加了两条数据原因正常的业务流程应该是点击 “新增保存” 按钮,等待返回成功,跳转查询列表,or 返回失败,当前页面提醒。问题原因如下:1.后端没有做防重复提交2.前端伙伴没有在点击新增保存按钮时loading等待返回结果。解决方案该问题前端做放重复提交or后端做防重复提交均可,因主要做后端,所以提供一个后端解决方案。前端打开新增or修改页面时,生成一个唯一字符串(可调用后端接口生成or前端生成),然后请求新增o
2022-01-17 15:41:41
1434
原创 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
242
原创 mybatis-plus通用参数统一处理
背景:实际开发中,我们经常会为表设计创建人、创建时间、更信人、更新时间等通用字段,每个接口都需要增加or修改这些字段,1是代码冗余,2则容易出错。mybatis-plus提供了一种统一处理的方案,解决了这一痛点。如果需要理解mybatis-plus的基础用法,可以查看作者的另外两篇文章Mybatis-Plus的使用_m0_37298602的博客-优快云博客https://blog.youkuaiyun.com/m0_37298602/article/details/117788047Mybatis-plus分
2021-10-20 15:17:36
1805
原创 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
1863
原创 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
469
原创 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
808
原创 手写tomcat
背景:作为后端开发者,我们的通信都是基于socket服务器,但是因为各种服务容器的流行,类似tomcat、jboss之类的socket服务器帮我们实现了这部分功能,这让我们理所当然了,甚至有些小伙伴对这类工具到底是什么都不甚清楚。项目介绍:使用netty实现,时间精力有限,功能较为简陋,旨在加深对socket服务器的理解测试:测试 servlet实现package org.kwin.test.servlet;import org.kwin.tomcat.annotation
2021-10-12 11:12:50
127
原创 手写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
956
原创 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
763
原创 服务可靠性保障-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
436
原创 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
1256
原创 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
664
原创 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
488
原创 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
1673
原创 手撸一个简单的RPC(<-_<-)
前言近期因工作需要,了解了一下netty这个nio框架,使用中觉得netty非常有意思,最近又了解了一下ZooKeeper的基本使用,看到了几篇非常好的文章,(抄袭)借鉴了一下,借助SpringBoot、Netty、ZooKeeper带你实现一个简单的RPC远程调用。准备工作实现一个RPC(Remote Procedure Call)需要涉及很多知识点,如:网络通信 心跳检测 编解码 代理 反射 序列化、反序列化 服务注册与发现(集群场景下是必须的) ...其中,网络通信、心
2021-06-24 13:19:30
288
原创 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
85
原创 request.getRequestURL()获取域名
1.背景生产环境中,我们通常使用集群防止单点问题,因此我们通过域名访问集群时需要通过代理服务器转发,同时实现负载均衡 我们域名解析指向我们的代理服务器
2021-06-15 15:34:48
2877
1
原创 Mybatis-plus分页查询
如果对mybatis-plus基本使用不清楚的可以查看作者文章简单了解下mybatis-plus:https://blog.youkuaiyun.com/m0_37298602/article/details/117788047
2021-06-11 10:47:33
195
1
原创 Mybatis-plus 代码生成器
如果对mybatis-plus基本使用不清楚的可以查看作者文章简单了解下mybatis-plus:https://blog.youkuaiyun.com/m0_37298602/article/details/117788047
2021-06-11 10:28:30
122
原创 ShedLock分布式锁机制
在springboot中常使用Scheduler做定时任务,只需要配置好@Scheduled和@EnableScheduling之后,按照cron表达式进行计划任务。但是在这
2021-06-10 17:12:35
1812
原创 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
383
原创 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
565
原创 Hadoop知识回顾一
近来心血来潮,考虑将过去两年学习的一些知识回顾一下,一来巩固知识,再来希望能够对过去的知识盲点有所领悟。1.环境虽然hadoop也能安装在windows环境下,不过我们无论是在生产还是工作调试,都会在linux环境下,而且linux基本知识是作为一个程序员必备也是必须熟悉的知识,因此还是建议将hadoop安装在linux环境下,后期我会附上linux(centos)安装教程,以及hadoo...
2020-03-28 00:18:33
227
转载 理解 Spring ApplicationListener
https://blog.youkuaiyun.com/liyantianmin/article/details/81017960
2018-12-23 21:09:50
118
转载 ContextRefreshedEvent事件使用注意事项
https://blog.youkuaiyun.com/huangshanchun/article/details/79053228
2018-12-23 21:09:08
874
原创 设计模式之十 状态模式
状态模式 定义状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。 例子我们使用《Head First 设计模式》中的糖果机例子:糖果机有NoQuarter、HasQuarter、Sold、SoldOut等状态,当然,我们后期可以根据需求加入Winner状态。首先,让我们创建一个接口,让所有的状态都必须实现这个接口:/** * 状态...
2018-09-13 16:02:30
256
原创 设计模式之九 迭代器与组合模式
迭代器与组合模式定义 迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。组合模式允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合 例子 废话不多说,先看具体案例煎饼屋和餐厅合并了,现在需要使用新的菜单,但是两者菜单实现的结构不太一样,煎饼屋使用ArrayList记录菜单,餐厅使用...
2018-09-12 14:56:26
312
原创 设计模式之八 封装算法
封装算法定义模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。 优缺点 应用场景 Java数组类的设计者提供给我们一个方便的模板方法用来排序。public static void sort(Object[] a) { Object aux[] = (Object[...
2018-09-11 15:43:43
1049
原创 设计模式之七 适配器模式与外观模式
适配器模式与外观模式定义 适配器模式将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。形象的说,如果你在国内使用一台美版的笔记本,那么你必然需要一个交流电适配器,适配器的作用就是将一种接口转换成另一种接口,以符合客户的期望。这个模式可以通过创建适配器进行接口转换,让不兼容的接口变成兼容。这可以让客户从实现的接口解耦。外观模式提供了一个统一的...
2018-09-11 10:12:56
166
原创 设计模式之六 命令模式(封装调用)
命令模式(封装调用)定义命令模式将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。 优缺点应用场景web服务器的队列请求,以及应用的日志请求 。例子命令模式可将“动作的请求者”从“动作的执行者”对象中解耦。客户负责创建命令对象。public class Client{ public Comm...
2018-09-10 16:31:04
196
原创 设计模式之五 单件模式
单件模式定义单件模式确保一个类只有一个实例,并提供一个全局访问点。优缺点优点:全局变量需要在程序启动时创建好对象(有的JVM的实现是:在用到的时候创建对象),消耗不必要的资源,而单件模式可以在我们需要时才创建对象,和全局变量一样方便,又没有全局变量的缺点。应用场景有一些对象我们其实只需要一个,比方说:线程池(threadpool)、缓存(cache)、对话框、偏好设置和注...
2018-09-10 13:40:23
297
原创 设计模式之四 工厂模式(简单工厂、工厂方法、抽象工厂)
工厂模式定义简单工厂其实并不是一个设计模式,反而比较像是一种编程习惯。有些开发人员把这个编程习惯误认为是“工厂模式”(Factory Pattern)。所有工厂模式都用来封装对象的创建。工厂方法模式(Factory Method Pattern)通过让子类决定该创建的对象是什么,来达到将对象创建的过程封装的目的。工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪...
2018-09-10 11:04:41
143
原创 设计模式之三 装饰者模式
装饰者模式定义装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。装饰者模式的目标是允许类容易扩展,在不修改现有代码的情况下,就可搭配新的行为。优、缺点优点1、装饰者模式可以提供比继承更多的灵活性2、可以通过一种动态的方式来扩展一个对象的功能,在运行时选择不同的装饰器,从而实现不同的行为。3、通过使用不同的具体装饰类以及这些装饰...
2018-09-10 10:38:37
264
原创 设计模式之二 观察者模式
观察者(Observer)模式1) 例子:报纸和杂志的订阅报社的业务就是出版报纸 向某家报社订阅报纸,只要他们有新报纸出版,就会给你送来。只要你是他们的订户,你就会一直收到新报纸。、 当你不想看到报纸的时候,取消订阅,他们就不会再送新报纸来。 只要报社还在运营,就一直会有人(或单位)向他们订阅或取消订阅报纸。出版者(Subject) + 订阅者(Observer) =...
2018-09-10 10:30:52
158
原创 设计模式之一 策略模式
策略模式定义 策略模式定义了算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。应用场景在开发过程中常用到这种情况,实现一个功能有多种算法或策略,我们需要根据不同的应用场景选择不用的算法。所以,我们需要把一个类A中经常变化或者将来可能改变的部分抽取出来,并为之实现一个接口B,类A中只需要拥有这个接口B的句柄,根据需要时,为类A注入接口B的具体实现...
2018-09-10 10:08:40
152
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人