- 博客(29)
- 收藏
- 关注

原创 RocketMQ多实例踩坑记录及分析
背景在一次上线过程中,发现工程中的两个rocketmq实例一直监听的同一个消息发送者(实际是有两个不同的地址)。同时查看rocket的client日志,发现的确连接的都是一个地址,故以为是配置文件没有读取到。可实际再次测试,该情况还是发生了。真正的原因是rocketmq低版本下,同一个jvm虚拟机默认只会启动一个mq实例。现象及原因现象查看工程下的/logs/rocketmq_client.log日志(若服务部署在k8s中需进入容器查看)。发现两个rocketmq实例注册的远端地址都是第一个地址
2021-08-06 15:10:53
1444

原创 【SpringBoot】基于BeanDefinitionRegistryPostProcessor实现配置文件读取动态注入多个Bean
之前有写过一篇文章【设计模式】基于SpringBoot实现的策略模式,通过策略模式可以实现对于不同的参数,调用不同的bean,实现对于代码的最少侵入。基于这种方式,可以通过读取配置文件,注入到bean中,实现多个bean的配置方法。但是这种方式存在的问题就是:配置文件每增加一个配置,需要增加一个bean配置类。 多个配置增加的时候容易遗漏,容易出错。因此,本文将针对这种情况,基于BeanDefinitionRegistryPostProcessor实现配置文件读取动态注入多个Bean。一、Be.
2020-10-27 17:04:21
4984
2
原创 【SpringBoot】基于自定义注解实现接口幂等性方法
近期需要对接口进行幂等性的改造,特此记录下。一、背景在微服务架构中,幂等是一致性方面的一个重要概念。一个幂等操作的特点是指其多次执行所产生的影响均与一次执行的影响相同。在业务中也就是指的,多次调用方法或者接口不会改变业务状态,可以保证重复调用的结果和单次调用的结果一致。二、常见场景1.用户重复操作在产品订购下单过程中,由于网络延迟或者用户误操作等原因,导致多次提交。这时就会在后台执行多条重复请求,导致脏数据或执行错误等。2.分布式消息重复消费消息队列中由于某种原因消息二次发送或者
2021-03-02 15:27:30
2729
2
原创 【Nacos应用笔记】Nacos配置中心搭建及动态刷新配置及踩坑
nacos配置中心搭建及自动刷新配置。Caused by: java.lang.IllegalStateException: The configuration of the pool is sealed once started. Use HikariConfigMXBean for runtime changes.导致的数据源与自动刷新配置冲突解决方案。
2020-05-31 14:55:23
21552
8
原创 记一次现网k8s中pod连接数据库异常的问题分析及解决实践(tcp_tw_recycle与tcp_tw_reuse内核参数修改)
在k8s环境中,node节点上的pod网络互联互通是采用网络插件结合etcd实现的。 默认情况下pod访问集群外部的网络走的是对应node节点的NAT规则。在这次连接中,由于在pod内连接数据库经过了一次NAT转换,客户端TCP请求到达数据库,修改目的地址(IP+端口号)后便转发给数据库服务器,而客户端时间戳数据没有变化。对于数据库来说,请求的源地址是node节点IP,所以在数据库看来,原先不同的客户端请求经过NAT的转发,会被认为是同一个连接,加上不同客户端的时间可能不一致,所以就会出现时间戳错乱的现象。
2020-04-26 19:49:36
4862
2
原创 基于K8s+docker搭建SpringCloud微服务工程(三)-- 工程服务的集群搭建与配置
在上一篇(二)Zuul网关的集群搭建与配置中,我们将网关搭建完毕。有了服务发现及注册,以及网关,一个基本的框架就算搭建完成,接下来就是不同的工程服务,通过容器部署在k8s集群中,注册在Eureka和Zuul网关上就行。一.搭建工程服务首先我们需要搭建好自己的console微服务工程,具体的搭建我这就不具体细说,这里并不需要对我们本身的微服务进行特殊的修改及配置,所有的配置均可以在k8s...
2020-04-13 20:08:32
1565
原创 SpringCloud中基于Feign的异步回调解决方案(SpringBoot+Async+Future实现)
近期,需要对之前的接口进行优化,缩短接口的响应时间,但是springcloud中的feign是不支持传递异步化的回调结果的,因此有了以下的解决方案,记录一下,仅供参考。一、背景对于一个页面上的所有实例有一个查询权限的接口,同时有四个操作类型的需要查询且接口仅支持单个实例单个操作类型操作。简单来说,假设实例查询退订权限需要1秒钟,那么四个操作共需4秒钟,一共20个实例的话,那么实际所需时间为...
2020-03-20 15:02:03
17516
原创 基于K8s+docker搭建SpringCloud微服务工程(二)-- Zuul网关的集群搭建与配置
在上一篇(一)服务注册与发现Eureka的集群搭建与配置中,我们将基本的Eureka搭建完毕,接下来就需要搭建好对外暴露服务的Api服务,在我的项目中,使用的zuul作为api-gateway,接下来我将详细讲解,在工程中是如何配置并对外暴露端口提供服务的。一.搭建zuul网关服务首先我们需要搭建好自己的微服务Zuul工程,具体的搭建我这就不具体细说,这里并不需要对我们本身的微服务进行特...
2020-03-13 20:11:21
2015
5
原创 基于K8s+docker搭建SpringCloud微服务工程(一)-- 服务注册与发现Eureka的集群搭建与配置
近日,由于公司项目标准化改造需要,需要将docker-swarm编排的容器化部署的工程改造成使用k8s编排部署,因此有了以下的学习及研究的过程。阅读本文需要有K8S的基础知识,了解微服务的基本概念及docker的基本使用。k8s的学习从0到入门可以推荐一个不错的学习地址:https://kuboard.cn/learning将网站从头看到尾,基本也可以入门了。一. 搭建Eur...
2020-02-28 11:00:34
3433
2
原创 【学习笔记】使用proguard进行的JAVA 代码混淆(基于Maven的SpringBoot工程)
今天1024,整理一篇之前的记录,以此纪念1024,1024K = 1GB(一级棒)。由于公司要求,需要将入库版本的代码进行混淆,因此进行了这一项毫无意义的工作,多方调查后,终于成功实现混淆。下面我将介绍下我是如何将poguard嵌入maven工程中,进行打包的。使用方法,将proguard.cfg文件放置于pom文件同级目录下,同时在pom文件中进行配置即可打包。避坑指南:pom文...
2019-10-24 21:03:27
1282
原创 【学习笔记】mysql 自带aes_encrypt()加密与aes_decrypt()解密及乱码问题解决
由于安全性要求,需要对用户敏感信息进行加密处理。因此使用到了mysql的自带AES加密解密方法。其中使用的秘钥采用的静态常量注入的方式。常量类及常量属性:本次使用的mapper.xml方式,其他方式的话参考sql语句,也是可以达到一样的效果的。插入加密字段:HEX( ) 函数将插入值转换为16进制${ }使用占位符将常量类中的静态常量加入,作为加密秘钥AES_...
2019-09-02 19:49:51
22229
4
原创 【学习笔记】JAVA8使用Stream实现List操作
JAVA8使用Stream实现List操作Java 8引入了全新的Stream API。这里的Stream和I/O流不同,它更像具有Iterable的集合类,但行为和集合类又有所不同。 stream是对集合对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作,或者大批量数据操作。 只要给出需要对其包含的元素执行什么操作,比如 “过滤掉长度大于 10 的字符串”、“获取每个字...
2019-07-31 19:41:07
2054
原创 【SpringBoot】使用jasypt将数据库明文密码加密(结合SpringBoot实现)
最近需要将数据库的明文密码进行加密,故使用到了jasypt加密,特此记录。下面是我的使用过程。一、准备工作1.1 pom依赖 <!-- 加密依赖 --> <dependency> <groupId>com.github.ulisesbocchio</groupId> ...
2019-05-30 20:37:21
3222
2
原创 【问题解决】SpringBoot Test方法无法注入Bean
简单的记录下使用SpringBoot自带的Test方法的一个坑。很简单的两点却卡了我不少时间,比较容易疏忽。问题:使用Test方法验证时,启动时始终提示无法注入Bean.解决办法:1.首先检查包名,包路径是否一致,如图所示:2.继承ApplicationTest类这种方法较为简单,直接在测试类上继承对应的ApplicationTest类。这样的话就会启动时自动注入bea...
2019-04-11 19:51:24
14564
2
原创 【问题解决】SpringBoot工程无法找到父依赖 parent-pom Failure to find com.xxx:parent-pom:pom:1.0.0.RELEASE
总结下碰到的BUG,之前遇到忘记记录下来,导致又进行了重复无用的搜索定位解决BUG操作。问题:Non-resolvable parent POM for com.alili:base-model:[unknown-version]: Failure to find com.alili:parent-pom:pom:1.0.0.RELEASE解决办法:总结在前:记住在一个新的环...
2019-04-09 21:12:24
25127
7
原创 【设计模式】基于SpringBoot实现的策略模式
策略模式定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。我自己的理解就是通过接口实现不同的方法,同时又可以根据自己的选择自动选择使用哪个接口的实现。情境: 某客户需要订购多个资源,每一个资源在不同的资源池下面,不同的资源池下面的资源又是不同的。由于不想使用多个if else来判断用户选择的资源池来进行资源的选择,所以使用...
2019-03-15 16:44:09
19184
10
原创 【Kali】将~目录下中文文件夹名字修改为英文
近日,安装了kali(安全开发人员必备神器),看桌面的中文文件夹名字很不爽,就改成了英文名,没想到在桌面显示了所有的文件,查找资料才发现改名之后还需要将配置文件修改之后重启才能生效,否则文件将找不到路径,全部显示在桌面上。1.配置文件位置:vim ~/.config/user-dirs.dirs修改为自己想要的名字,接着重启系统即可。...
2019-01-17 20:56:35
5468
1
原创 【SpringCloud】搭建高可用分布式配置中心(Spring Cloud Config)(二)全过程详解(自动刷新)解决webhooks 400错误
本文基于第一篇搭建好手动刷新的基础上进行的自动刷新。详见(一)全过程详解(手动刷新)。在搭建好第一步的手动更新的配置中心之后,要实现自动更新就很简单了。一. config-client添加依赖pom.xml文件中添加: <dependency> <groupId>org.springframework.cloud<...
2019-01-17 20:41:27
1783
3
原创 【SpringCloud】搭建高可用分布式配置中心(Spring Cloud Config)(一)全过程详解(手动刷新)Spring Cloud 2.0.2.RELEASE
由于网上资料大多数基于SpringBoot2.0以下版本搭建配置中心,而2.0版本以上的资料较小,因此基于SpringCloud2.0.2.RELEASE搭建了一个手动刷新的配置中心,在(二)全过程详解(自动刷新)WebHooks中将会讲解,该如何实现自动刷新配置。话不多说,接下来就是如何实现。一.新建Config-Respoity项目我是在码云上建立的配置库,在github上也可以,...
2019-01-17 16:27:04
664
原创 【docker】基于Harbor搭建自己的私有镜像仓库-全过程详解
最近学习服务的编排,慢慢的先把自己学习的东西整理整理,记录下来,共同学习。下面的步骤都是基于Linux系统,本文采用的是kali,这是一个很强大的基于Linux的安全开发人员的开发的系统,有兴趣的可以了解下哦。1.下载harbor并安装首先我们需要在github上搜索harbor下载地址。下载地址:https://github.com/goharbor/harbor/releases...
2019-01-15 21:21:57
4838
2
原创 【docker】解决docker拉取镜像超时timeout 或者Cannot download Docker image from repository
近日,在公司内部的虚拟机上安装的docker,迟迟无法拉取到镜像,最后多方搜索,并且科学上网,解决问题。问题:特殊情况:我的虚拟机无法连接外网,需要通过堡垒机进行跳转,但是虚拟机已经配置堡垒机转发还是无法连接。解决方案:使用docker的系统环境替代系统的环境(适用于本身无法连接外网的情况)ERROR:Trying to pull repository registry.cn-...
2018-12-27 20:13:34
22146
2
原创 【IDEA】解决SpringBoot工程打包部署报错:No main manifest attribute, in XXX.jar
由于需要将文件直接打包部署在linux系统下面,之前都是部署在docker上,通过DockerFile进行直接启动,没有出现过这样的问题,因此记录下问题。问题出现或报错: No main manifest attribute, in XXX.jar解决办法: 将需要打包的SpringBoot工程中的pom文件修改为如下:<plugin...
2018-12-27 19:41:10
21759
6
原创 【小技巧】使用NetCat工具发送日志信息
之前登录虚拟机时,由于在只有通过vnc登录的方式才能登录虚拟机,导致无法下载日志或者查看全部的日志信息,经大神指点,发现一个十分好用的方法,可以将日志信息上传到termbin.com中,直接打开网址查看。具体使用方法:1.首先检查是否安装netcat。 2.如果没有安装则需要安装nc yum install nc3.成功安装后,可以使用这个nc命...
2018-11-29 19:56:57
1816
原创 【笔记】SpringMVC中@ModelAttribute与@RequestBody的区别
最近在写代码的过程中,发现之前项目都是使用的@ModelAttribute注解,而自己的一贯使用都是@RequestBody,在网上找资料也没有发现写的十分具体的博客,因此自己写了个SpringBoot的样例进行了测试验证。 @ModelAttribute与@RequestBody都是用来注解解析前端发来数据,并自动对应到所定义的字段名称。 这里先放结论,使用@Mode...
2018-10-15 14:40:14
10804
5
原创 【解决办法】JAVA服务端解决跨域问题 CORS请求头方式
最近与前端进行本地联调时,发生了跨域的问题,无法访问我的服务端地址,使用了以下的方式进行了解决。解决的办法是通过fileter中写入ACCESS-Control-Allow的头信息,进行跨域访问,代码如下:public class CrossDomainFilter implements Filter{ @Override public void destroy() { // T...
2018-08-31 16:39:05
14992
4
原创 【笔记】抽象方法与方法重写的区别
【问题】:既然子类继承父类可以重写父类方法,那在父类中写一个空的实现方法和写一个抽象方法的区别在哪呢?抽象方法是指abstract修饰的,且在类中没有方法体的方法;子类方法的重写是指继承父类的某个实例方法,这个方法的类型和父类方法的类型一致或者是父类方法的类型的子类型,并且这个方法的名字、参数个数、参数的类型和父类的方法完全相同。 如代码所示:public abstract cl...
2018-08-07 21:02:17
4090
2
原创 【IDEA】【Git】pull代码始终无法pull到最新的代码或者提示pull no items 【解决方式】
最近pull代码老是提示pull no items,但是本地并不是最新的代码,看了各种博客始终无法解决,最后靠自己的方式解决。下面是解决方法。方法:1.首先git --> repository --> fetch fetch就是将远程主机的最新内容拉到本地,检查后决定是否合并到本地分支上2.其次点击git --> repository --> rebase ...
2018-07-31 18:00:55
42927
13
原创 【IDEA】plugins安装插件不成功,下载失败【解决办法】
使用IDEA中,需要用到插件,在plugins中始终无法下载插件的解决办法1.若是始终无法在线下载插件,除了手动安装解压好的插件,如下:2.第二种方法就是,在settings中的system settings--> updates--> use secure connection,如下图所示,不勾选这个选项可以成功在线下载插件,最后重启下IDEA即可正常使用插件...
2018-07-31 16:39:37
13863
原创 【IDEA】【GIT】 push 时 出现如下错误 Push to origin/master was rejected 无法上传代码到gerrit解决办法
最近项目上传代码到gerrit上,一直提示拒绝push,无法上传。最后成功解决。1.首先先要在本地pull最新代码并解决冲突。2.若是已经解决冲突还是无法上传,可以查看本地项目中是否放入钩子。3.若是push中没有push to gerrit 选项,则是没有在IDEA中安装gerrit插件。需要在settings中的plugins中安装gerrit即可成功上传。 ...
2018-07-31 15:02:34
2965
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人