自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 深入解析Spring使用枚举接收参数和返回值机制并提供自定义最佳实践

本文的目的在于提供一种在 restful接口兼容使用code接收枚举参数的实现方案。文章目录一 目标与思路0 起因1 目标2 思路二 代码实现1 通用code枚举接口2 转换器工厂类3 Spring MVC 配置类三 相关知识一 目标与思路0 起因《阿里巴巴Java开发手册》将接口中枚举的使用分为两类,即 接口参数和接口返回值,并规定:接口参数可以使用枚举类型,但接口返回值不可以使用枚举...

2019-01-14 09:54:10 7550 1

原创 Spring Security 5.0的DelegatingPasswordEncoder详解

本文参考自Spring Security 5.0.4.RELEASE 的官方文档,结合源码介绍了DelegatingPasswordEncoder,对其工作过程进行分析并解决其中遇到的问题.包括There is no PasswordEncoder mapped for the id "null"的非法参数异常的正确处理方法PasswordEncoder1 NoOpPasswordE...

2018-05-07 14:30:32 9053 5

原创 空间索引 S2 学习指南及Java工具类实践
原力计划

原先公司使用相对主流的geohash生成空间索引进行区域查询,后来发现geohash对于大区域查询表现极不良好,经调研测试,改用google的s2。因为涉及的资料、工具较多,特此记录,以备后用。文章目录一 学习指南0 介绍说明1 s2 对比 geohash 的优点2 相关资料二 Java实践一 学习指南0 介绍说明班门不弄斧,这里推荐 halfrost 大神的空间搜索系列文章,推荐先浏...

2020-04-29 01:23:21 235

原创 HBCK2修复RIT实践笔记

本文记录了作者使用HBCK2工具对线上HBase发生RIT状态的处理

2020-04-16 01:40:39 249

原创 最强大的Docker插件 fabric8io/docker-maven-plugin

fabric8io的插件不仅支持docker镜像构造(build),镜像推送(push),还支持对容器操作(如run,stop,remove等),也就是说它可以实现对Docker从构建镜像到运行和推送完整的控制流程,这是它独树一帜的地方. 在众多docker-maven插件中,fabric8io的docker-maven-plugin毫无疑问是最强大的. 现在网上相关的教程大多是使用spoti...

2019-01-18 00:53:26 9134 4

原创 Paxos学习笔记及图解

一 从CAP定理到Paxos算法1 CAP定理CAP定理是相对于一个分布式计算系统而言的,首先需要了解C、A、P的定义:C:Consistency一致性:所有节点持有相同最新数据副本(对外一致)A:Availability可用性:所有节点都能提供数据副本,但不一定最新(对外可用,但不一定好用)P:Partition tolerance分区容错性:分区即指系统在一定的通信时限内不能...

2019-01-10 13:49:08 714

原创 Java 设计模式 轻读汇总版

一 创建类模式1 单例模式2 简单工厂和工厂模式3 抽象工厂模式4 建造者模式5 原型模式二 结构类模式1 代理模式2 适配器模式3 装饰模式4 门面模式5 桥接模式6 组合模式7 享元模式三 行为类模式1 策略模式2 观察者模式3 责任链模式4 模板方式模式5 状态模式6 迭代器模式7 命令模式8 备忘录模式9 访问者模式10 中介者模式11 解...

2018-12-24 22:26:39 480

原创 从零写分布式RPC框架 系列 2.0 (4)使用BeanPostProcessor实现自定义@RpcReference注解注入

之前服务提供方 RpcServer 我们是使用 ApplicationContextAware 来扫描 @RpcService 注解,添加一个注解即可实现服务暴露。现在,我们用 BeanPostProcessor 来实现服务注入,自动将服务实现类注入到被@RpcReference注解标记的接口上。首先我会先介绍 BeanPostProcessor 的相关信息,以及有所了解的直接跳到第二部分即可。...

2018-12-01 16:42:35 704

原创 从零写Spring注解版框架系列 IoC篇 (2)实现 @Component、@Autowired、@Qualifier注解

一 结构设计首先创建一个 Maven 工程 winter-core,这里我们我们只需要依赖于 commons-lang 工具包,另外还有测试用的 junit 包。再创建各个类如下:核心注解在 annotation 包下,util 包下是 ClassUtil 工具类 和 StringUtil 工具类,真正的核心组件是 BeanFactory 下的 ClassPathAnnotaionAppli...

2018-11-30 22:28:55 193

原创 从零写Spring注解版框架系列 IoC篇 (1) 框架设计

一 设计思想1 IoC的定义IoC 全称为 Inversion of Control,翻译为 “控制反转”,它还有一个别名为 DI(Dependency Injection),即依赖注入。所谓 IoC ,就是由 Spring IoC 容器来负责对象的生命周期和对象之间的关系2 Spring中的 IoC模块结构传统xml模式下的Spring实现IoC由几个模块组成:Resourc...

2018-11-30 18:34:59 144

原创 从零写分布式RPC框架 系列 2.0 (3)RPC-Server和RPC-Client模块改造

2.0版本RPC-Server改动不大,主要变化在于RPC-Client使用了服务地址缓存,并引入监控机制,第一时间获取zk集群中服务地址信息变化并刷新本地缓存。另外,RPC-Client还使用了RpcClientProperties开放对负载均衡策略和序列化策略的选择。系列文章:专栏:从零开始写分布式RPC框架手写通用类型负载均衡路由引擎(含随机、轮询、哈希等及其带权形式)实现 序列化引...

2018-11-23 16:27:45 565

原创 从零写分布式RPC框架 系列 2.0 (2)RPC-Common模块设计实现

RPC-Common模块相对于1.0版本复杂了很多,最主要的变化在于将 Rpc的Netty处理器从RPC-Server和RPC-Client收回。1.0 版本的设计思路是尽可能减少冗余依赖,所以RPC-Common一般只放通用的功能。现在则是尽可能都放在RPC-Common模块,以方便工程升级复杂化后的统一协调管理。以后功能将集中在一个模块下(名字不一定还是RPC-Common),RPC-Serv...

2018-11-23 14:16:43 220

原创 从零写分布式RPC框架 系列 2.0 (1)架构升级

针对1.0版本的性能问题,本版本做了从服务地址列表缓存等方面做了优化处理,并加入负载均衡引擎、序列化引擎、服务端限流等新功能,并对通信模型进行改造,使其支持新特性、避免粘包半包问题并对后续升级改造留下支持空间。具体可见 项目GitHub地址 。本文将介绍 2.0 版本的逻辑架构和模型设计,部分内容在 从零写分布式RPC框架 系列 1.0 (1)架构设计 已有说明,此处不再赘述。0 版本说明增...

2018-11-23 10:40:54 240

原创 实现 序列化引擎(支持 JDK默认、Hessian、Json、Protostuff、Xml、Avro、ProtocolBuffer、Thrift等序列化方式)

本文将实现一个包含JDK默认、Hessian、Json、Protostuff、Xml、Avro、ProtocolBuffer、Thrift等序列化方式的序列化引擎。用户可以提供使用 SerializerEngine 方便快捷地切换序列化方法实现。文章目录一 使用效果二 总体结构1 结构图2 组件介绍序列化方法分类序列化方法场景推荐3 相互关系三 结构实现1 ISerializer2 Serial...

2018-11-18 16:37:13 457

原创 手写通用类型负载均衡路由引擎(含随机、轮询、哈希等及其带权形式)

本文记录了通用类型负载均衡路由引擎(工厂)的实现过程和思路。通过路由引擎获取指定枚举类型的负载均衡器,降低了代码耦合,规范了各个负载均衡器的使用,减少出错的可能,并简化了其对应带权负载均衡的实现(提供默认实现),而无需另外编写和集成。文章目录一 使用效果二 总体结构1 结构图2 组件介绍3 相互关系三 结构实现1 RouteStrategy2 WeightGetAble3 WeightUtil4...

2018-11-15 20:34:31 429

原创 从零写分布式RPC框架 系列 1.0 (5)整合测试

本篇将对前面几篇文章作整合处理,使用spring-boot-starter的形式进行发布。

2018-11-08 18:05:26 229

原创 从零写分布式RPC框架 系列 1.0 (4)RPC-Client模块设计实现

RPC-Client模块负责创建 动态代理对象 供 服务消费者 使用,而动态代理对象的方法执行则是通过RPC调用RPC-Server的服务实现。即RPC-Client屏蔽了底层的通信过程,使得服务消费者可以基于接口透明使用服务提供者的服务。一 介绍1 整体结构2 模块介绍整体结构如下:RpcClientRPC-Client模块核心类,也是服务消费者会直接使用到的类。该类负责根据传入...

2018-11-08 14:46:48 263

原创 从零写分布式RPC框架 系列 1.0 (3)RPC-Server模块设计实现

RPC-Server模块负责(1)将@RpcService注解标记的服务和自身信息注册到ZK集群,(2)对外提供RPC服务实现,处理来自RPC-Client的请求。该模块整体的核心类为 RpcServer ,而真正处理请求的核心类是 RpcServerHandler 。另外还有一个 ZKServiceRegistry 负责和 ZK集群交互。一 介绍1 整体结构2 模块介绍注意,因为最终是...

2018-11-07 21:20:32 302

原创 从零写分布式RPC框架 系列 1.0 (2)RPC-Common模块设计实现

RPC-Common模块提供RPC-Server和RPC-Client的通用对象,封装统一规则,使RPC Server和RPC Client 可以基于同一协议通信。主要包含底层通信的Netty所需的编码解码器(RpcEncoder,RpcDecoder),实现自定义协议的传输对象(RpcRequest、RpcResponse)以及编码解码器对Java对象序列化(反序列化)使用的工具 ProtoSe...

2018-11-07 13:04:59 259 1

原创 依赖排除 provided,optional 和 exclusion 最全区分指南

本文将介绍 Maven工程中3种避免依赖冲突的手段 provided,optional 和 exclusion 及其使用场景,并对其进行比较区分,最后以一个应用实例来做归纳总结。本人在网上寻找相关说明时大多语焉不详,模棱两可,有些甚至自己也没弄明白,故根据官方说明和自身试验写下此文,如有纰漏,还望指教。转载需经本人同意,注明出处方可转载。文章目录一 介绍1 scope设为provided2 op...

2018-11-06 14:23:13 1373

原创 从零写分布式RPC框架 系列 1.0 (1)架构设计

本系列文章的目的是搭建出一个基于Netty,Zookeeper和SpringBoot的简易分布式RPC框架,并且发布到Maven中央仓库以 spring-boot-starter 的形式对外提供开箱即用的服务。1.0 版本使用 protobuf 来做序列化,最终的使用形式比较接近于 Dubbo 。最终效果可见:https://github.com/linshenkx/rpc-netty-sprin...

2018-11-06 12:40:02 468 1

原创 使用gpg插件发布jar包到Maven中央仓库 完整实践

本文记录了在maven环境下使用gpg插件将 jar 包部署到中央仓库的完整实践过程。相对于网上其他教程使用oss-parent作为父工程的方法,这种方法入侵度低,自由度高,也是官方推荐使用的。实践过程解决了gpg验证以及javadoc注解不规范的问题。文章目录先行知识1. 项目基础配置2. Maven发布相关网址一 注册并提交工单(register sonatype)二 使用gpg生成密钥三 ...

2018-11-03 18:55:51 2981 6

原创 SonarQube学习系列2:Maven+SonarQube 最佳实践

本文记录了Maven工程使用SonarQube完成代码评估,并对其中指定模块进行排除和项目权限管理等有些代码是使用相关插件或工具生成的,这些代码通常存在高冗余或书写不规范现象,不符合代码质量要求,但不影响使用,应排除在代码质量评估之外本文基于上一篇文章的基础配置本文将通过一个gRPC项目作为例子,该项目有 eureka-server,lib,provider,consumer 4个模块,其中...

2018-10-22 12:36:50 3977 1

原创 SonarQube学习系列1:安装和初始化、安全配置

本文将通过docker安装SonarQube,并进行相关初始化配置(如中文配置)和安全性配置(禁止游客访问项目和禁止游客提交代码质量评估等)一 安装安装之前请注意SonarQube的要求,具体请见:https://docs.sonarqube.org/display/SONAR/Requirements个人或小团队使用时硬件要求内存至少在2GB以上并预留1GB供系统使用SonarQube默...

2018-10-21 22:26:35 1753

原创 Docker搭建私有Nexus-maven仓库

本文使用docker镜像实现nexus的一键部署,并且进行相关配置,测试完成maven工程的打包上传文章目录一 利用Docker镜像搭建Nexus仓库1 建立 nexus-data 数据卷2 启动镜像二 完成Nexus设置修改密码添加用户获取仓库url三 配置本地Maven0 maven 配置文件基础知识1 配置 servers2 配置profile3 配置activeProfiles4 配置镜...

2018-10-20 15:59:07 503

原创 Spring Boot 2+gRPC 学习系列2:搭建Spring Cloud +gRPC集群项目

本项目基于Spring Boot 2.0.5+yidongnan/grpc-spring-boot-starter 2.0.1.RELEASE+SpringCloud Finchley.SR1,通过2个grpc-eureka-server模拟Eureka集群,多个可横向弹性扩容的grpc-spring-cloud-provider负责提供gRPC服务,再用grpc-spring-cloud-co...

2018-10-14 09:26:07 6298 4

原创 Spring Boot 2+gRPC 学习系列1:搭建Spring Boot 2+gRPC本地项目

本项目基于Spring Boot 2.0.5+yidongnan/grpc-spring-boot-starter 2.0.1.RELEASE一 项目结构1 项目结构根项目(com.linshen:grpc-springboot-lin:1.0-SNAPSHOT)下有3个子模块:grpc-lib:包含原始proto文件,并负责将其转换为java代码grpc-server:grpc服务端...

2018-10-13 10:45:17 10937

原创 Excel解析easyexcel工具类

本文使用基于阿里的easyexcel编写的工具类对xls后缀的Excel文件(即03版)读取并写成xlsx后缀的Excel文件(即07版),中间转换过程使用String二维数组和对象列表两种形式.easyexcel 项目git地址为: https://github.com/alibaba/easyexcel官方使用指南见: https://github.com/alibaba/easyexce...

2018-10-06 16:19:48 18650 5

原创 使用Minikube在本地部署单节点Kubernetes集群及操作

本文使用最新版本的Minikube完成在本地部署单节点Kubernetes集群,并以nginx集群为例,展示使用kubectl完成对集群的扩展,收缩,滚动升级以及回滚操作等.安装方法参照 最后 ,因为我本来就安装了Docker,所以没有再去安装一个Hypervisor(如VirtualBox和KVM),不过得注意启动Minikube的时候要指定 –vm-driver=none ,另外,由于国内网...

2018-09-20 10:08:47 1530

原创 SpringBoot下使用Jasypt工具类加密属性配置

本文介绍了SpringBoot下使用Jasypt对属性进行加密,其中密文的获取使用工具类而非终端的方式.项目github地址为:https://github.com/ulisesbocchio/jasypt-spring-boot一. 集成jasypt集成jasypt主要有以下三种方式1. 直接加依赖项目中使用了@SpringBootApplication或@EnableAut...

2018-09-16 10:48:07 3554

原创 Docker使用 linuxserver/letsencrypt 生成SSL证书最全解析及实践

本文详细介绍了linuxserver/letsencrypt 项目,并用了http和dns两种校验方式进行了实践.一 官方介绍linuxserver/letsencrypt1 使用2 参数二 实践使用http方式验证使用dns方式验证第一步 完成域名服务器配置第二步 完成域名服务器API-KEY相关配置并启动一 官方介绍linuxserv...

2018-09-13 21:05:44 2883

原创 nslookup指令在linux下使用qt查询提示Invalid option: qt=

nslookup在windows和linux下使用方法不同,网上一些教程并没有指出这种差异,导致了一些使用上的误解.故作本文当做记录,方便以后查询使用.一 介绍Nslookup(name server lookup)( 域名查询):是一个用于查询 Internet域名信息或诊断DNS 服务器问题的工具. NSLookup可以指定查询的类型,可以查到DNS记录的生存时间还可以指定使用那...

2018-09-13 09:06:17 1657

原创 Dockerfile实现MySQL定时备份

本文利用自定制Dockerfile实现在mysql容器内自动定时备份,避免了在宿主机设置cron定时任务所带来的高耦合操作,更易于部署和搬迁.欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流...

2018-09-09 15:11:26 3352 2

原创 Docker一键搭建 FastDFS单机版 图片服务器

本教程基于docker和docker-compose环境,使用了morunchang/fastdfs镜像(包含nginx访问模块).可快速实现FastDFS的单机图片服务器部署.1 建立docker文件结构文件结构如下 2 编写docker-compose文件docker-compose.yml文件如下version: '3'services: tracke...

2018-09-06 17:11:05 3780 8

原创 Jenkins详细实践:SpringBoot+Jenkins+Gitlab+Docker-Maven插件

本文使用SpringBoot项目完成一个简单的Jenkins实践,利用docker-maven插件实现Docker从build到run再到push的完整流程,大大简化了Jenkins相关工作,不必再为Jenkins配置证书和编写额外的脚本.写在前面简化的关键在于fabric8io的docker-maven-plugin插件,利用它可以实现用maven指令对docker远程控制,网上其他文章...

2018-07-19 20:41:33 7806

原创 Docker 守护进程+远程连接+安全访问+启动冲突解决办法 (完整收藏版)

本文根据官方资料实践而成,同时对于本人操作时遇到的问题加以整理总结.通过本文,你应该能够实现通过自定义证书实现对远程Docker主机的安全访问和控制.尊重劳动成果,未经本人允许不得转载.一 Docker服务端,客户端和CA证书二 使用OpenSSL创建CA和服务端密钥key步骤1:生成CA私钥ca-key.pem步骤2:使用CA私钥生成自签名CA证书ca.pem步骤3:生成服务器...

2018-07-17 18:17:53 5227 4

原创 Spring Boot 2+Dubbo 学习系列3:dubbo-ops 之 Dubbo Admin

Dubbo Admin 是dubbo-ops 三模块中最容易使用的,因为它和其他两个(dubbo monitor和dubbo registry)不同,Dubbo Admin本身就是一个Spring Boot应用,也就是说它可以使用fat jar或者在IDE直接运行.而其他两个则是用脚本运行. 接下来我们看看Dubbo Admin怎么部署.因为本身就是Spring Boot应用,所以其实就跟普...

2018-07-13 16:36:45 2151

原创 Spring Boot 2+Dubbo 学习系列2:搭建Spring Boot 2+Dubbo+Zookeeper集群

本项目使用当前(2018年7月)最新的官方正式版本实践,SpringBoot 2.0.3+dubbo-spring-boot-starter 0.2.0(即dubbo2.6.2) 文章主要参考了Dubbo在Apache的项目主页的文档,还有Dubbo Spring Boot 工程在github的说明和例子一 项目结构项目结构项目名为dubbo,其下分3个模块base-interfac...

2018-07-12 21:51:38 12006 10

原创 Spring Boot 2+Dubbo 学习系列1:使用Docker部署zookeeper

单机使用一个容器是直接运行下列指令即可:docker run --name my-zookeeper --restart always -d zookeeper此镜像包括EXPOSE 2181 2888 3888(zookeeper客户端端口,跟随端口,选择端口),因此将其与其他容器链接时其将自动可达。由于Zookeeper“快速失败”,最好始终重启它(restart always)。...

2018-07-12 15:29:38 1176 1

原创 Java程序员应该懂的字符编码知识

一 先行知识1 概念定义字符(Character): 各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。字符集(Character set) 多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,常见字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、 GB18030字符集、Unicode字符集等。Unicode Unicode是为整合全世...

2018-07-09 09:59:30 218 1

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