- 博客(112)
- 资源 (7)
- 问答 (1)
- 收藏
- 关注

原创 高可用Hadoop集群的搭建
一、集群节点说明 这里用7个节点做Hadoop的HA,其中3台做zookeeper集群,3台做edits文件收集的journalnode集群,2台做失败切换zkfc,2台namenode,3台datanode,2台reourcemanage,3台nodemanager。具体的集群资源分配及ip规划如下: 主机名 IP 安装软件 mini1 192.168.9.201 JD
2018-02-17 16:58:37
572

原创 Elasticsearch-jdbc使用说明
一、elasticsearch-jdbc简介 elasticsearch-jdbc是一个将关系型数据库(RDBMS)数据导入到ElasticSearch库中的一个工具包,支持mysql、oracle、postgrey、csv等存储列式数据的容器。目前最新的版本是2.3.4.1,支持的ElasticSearch的版本为2.3.4。二、elasticsearch-jdbc的简单使用1
2018-01-14 21:25:46
9716
原创 设计模式剖析
一、一张图总览二、23种设计模式一、创建型1、单例模式(8种)1.1 饿汉式(2种)1.1.1 静态常量/** * @author zero * @description HungrySingleton 饿汉模式 * @date 2022/4/25 15:09 */public class HungrySingleton { public static void main(String[] args) { Singleton instance1 = Sing
2022-05-04 21:37:33
925
原创 Mybatis自定义插件实现
一、插件说明MyBatis 允许你在映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis 允许使用插件来拦截的方法调用包括:Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)ParameterHandler (getParameterObject, setParametersResultSetHandler (handleResultSets, han
2022-04-01 11:24:51
1191
原创 MyBatis原理解析
一、Mybatis架构图二、Mybatis核心解析1、Mybatis核心流程读取配置及mapper文件流程创建sqlSession流程执行语句流程2、Mybatis核心类SqlSessionFactoryBuilder:加载并解析配置SqlSession:创建执行sql的上下文环境MapperStatement:执行sql时的mapper文件的实体映射MapperProxy:具体执行sql的代理对象Executor:执行sql语句的执行器3、缓存机制MyBatis.
2022-03-30 17:34:15
836
原创 Spring源码编译
一、下载源码在github或者gitee上下载spring-framework的特定版本的源码,这里选择5.3.8版本,openjdk的版本为8以上。新版本用的是gradle 7,添加依赖的命令不熟悉,故使用gradle 6版本进行编译。spring源码地址二、配置仓库地址下载好源码之后,解压并修改build.gradle文件中的仓库地址,加快编译速度。编译仓库地址代码如下:repositories { maven{ url 'https://maven.aliyun.com/n
2022-03-29 18:25:19
1019
原创 MySQL推荐配置
[mysqld]port = 3306 serverid = 1 socket = /tmp/mysql.sock #避免MySQL的外部锁定,减少出错几率增强稳定性。skip-locking#禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间。但需要注意,如果开启该选项,则所有远程主机连接授权都要使用IP地址方式,否则MySQL将无法正常处理连接请求! skip-name-resolve back_log = 384key_buffer_size
2022-02-27 11:30:31
992
原创 MySQL之优化“N板斧”
MySQL之优化“N板斧”一、索引优化1、最左前缀匹配原则根据Alibaba开发手册,索引文件具有B-Tree的最左匹配特性,如果左边的值未确定,那么将无法使用此索引。如测试表student表有5千万数据,在name字段上添加索引,使用做模糊匹配执行计划如下:explain select sql_no_cache * from student where student.name like '%abc';确定左边的值,使用右查询模糊执行计划如下:explain select sql_no
2022-02-25 16:14:17
625
原创 MySQL之索引创建原则
MySQL之索引创建原则一、适合创建索引1、字段的数值有唯一性限制根据Alibaba规范,指明在业务上具有唯一特性的字段,即使是组合字段,也必须建成唯一索引。例如,学生表中的学号时具有唯一性的字段,为该字段建立唯一性索引可以快速查询出某个学生的信息,如果使用姓名的话,可能存在同名的情况,从而降低查询速度。2、频繁作为Where查询条件的字段某个字段在Select语句的Where条件中经常被使用到,那么就需要给这个字段创建索引,尤其实在数据量大的情况下,创建普通索引就可以大幅提升查询效率。比如
2022-02-24 14:19:26
4287
1
原创 MySQL之存储引擎
MySQL之存储引擎一、简介 MySQL支持的存储引擎有好几种,如Memory/InnoDB/MyISAM/CSV/ARCHIVE等。通过show engines命令可以查看MySQL所支持的存储引擎。如下图所示:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CTPJhnXx-1645604415159)(C:\Users\zero\AppData\Roaming\Typora\typora-user-images\image-20220223152241771.p
2022-02-23 16:21:05
638
转载 VMware 虚拟机扩展 CentOS7 系统磁盘空间
VMware 虚拟机扩展 CentOS7 系统磁盘空间 1.虚拟机扩展磁盘容量2.扩展系统磁盘容量3.对新增加的硬盘格式化4.添加新LVM到已有的LVM组,实现扩容 1.虚拟机扩展磁盘容量 关闭Vmware的centos7系统,才能在VMWare菜单中设置需要增加到的磁盘大小。同时要保证该系统没有快照。如果有快照的话,就无法直接扩展(这个功能无法使用),需要通过增加磁盘的方式扩展。 这里填写最终的磁盘大小,点击扩展。 这里的扩展只是增加了操作系统的磁盘空间,并没有与系统内部的文件目录挂载,..
2021-12-24 14:34:06
3527
6
原创 K8s集群部署及Kubesphere安装
K8s集群部署及Kubesphere安装K8s集群部署 kubeadm 是官方社区推出的一个用于快速部署 kubernetes 集群的工具。 这个工具能通过两条指令完成一个 kubernetes 集群的部署:创建一个 Master 节点 $ kubeadm init将一个 Node 节点加入到当前集群中 $ kubeadm join一、前置环境要求一台兼容的 Linux 主机。Kubernetes 项目为基于 Debian 和 Red Hat 的 Linux 发行版以及一些不提
2021-12-19 12:35:53
3223
转载 定时任务框架:quartz、elastic-job和xxl-job的分析对比。
概述 Quartz Java上的定时任务标准。但Quartz关注点在于定时任务而非数据,并无一套根据数据处理而定制化的流程。虽然Quartz可以基于数据库实现作业的高可用,但缺少分布式并行调度的功能 elastic-job 当当开发的弹性分布式任务调度系统,功能丰富强大,采用zookeeper实现分布式协调,实现任务高可用以及分片,目前是版本2.1.5,并且可以支持云开发 xxl-job 是大众点评员工徐雪里于2015年发布...
2021-12-17 16:25:09
1325
原创 接口幂等性
接口幂等性一、什么是幂等性 接口幂等性就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用;比如说支付场景,用户购买了商品支付扣款成功,但是返回结果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额返发现多扣钱了,流水记录也变成了两条,这就没有保证接口的幂等性。二、哪些情况需要防止用户多次点击按钮用户页面回退再次提交微服务互相调用,由于网络问题,导致请求失败。feign 触发重试机制其他业务情况三、
2021-12-16 16:35:26
120
原创 SpringBoot整合Es报错:Found interface org.elasticsearch.common.bytes.BytesReference, but class was expect
SpringBoot整合Es报错:Found interface org.elasticsearch.common.bytes.BytesReference, but class was expect出现以上原因大概率是版本兼容问题,只要在对应的pom文件中指定使用的本本即可。<properties> <java.version>1.8</java.version> <elasticsearch.version>7.4.2</elas
2021-11-29 11:48:21
1954
原创 SpringCloud系列之五服务网关
SpringCloud系列之五服务网关一、简介 在微服务项目开发过程中,经常需要对服务进行认证、鉴权、限流、动态路由、统一服务地址等操作,如果将这些操作都分散到各个服务中去做的话,必然导致大量功能重复以及维护困难等问题,微服务网关就应运而生。 Spring提供了一个微服务网关Gateway,在Gatewa与之前还有像Zuul1.x、Zuul2.x等产品作为微服务网关的实现,但是由于Zuul1.x性能表现不佳以及Zuul2.x连续断更,导致Spring自己开发一个网关产品Gateway。 Spr
2021-11-25 12:40:46
442
原创 JVM系列之虚拟机内存管理
JVM系列之虚拟机内存管理 JVM(Java Virtual Machine)所管理的内存区域根据《java虚拟机规范》分为以下几个运行时数据区域。一、程序计数器 程序计数器是虚拟机中唯一一个内存溢出(out of memory)的区域,它是一块较小的内存空间,记录了线程执行字节码的行号;每个线程都有自己程序计数器,因此这块内存区域是线程私有的;如果虚拟机正在执行一个Java方法,则程序计数器指向的正在执行的字节码的地址;如果执行的是一个Native方法,则程序计数器为Undefined。二、
2021-10-21 15:32:41
224
原创 Mybatis-plus配置多数据源后重写MetaObjectHandler不生效
配置多数据源后重写MetaObjectHandler不生效一、问题描述 项目中配置了Mysql和taos数据库两种数据源,配置之后在做数据插入时需要自动填充的字段报不能为null,这个之前在只有一个数据源的时候是没有问题的。因为实现了MetaObjectHandler做了自动填充。二、问题分析 自定义字段未按照预期自动填充,说明实现的MetaObjectHandler自定义类未生效,检查配置,开启debug,发现在插入数据时代码没有进入自定义MeteObjectHandler,同时发现配置myb
2021-09-26 13:42:08
3472
原创 Emqx开启用户名密码验证
一、Emqx认证方式介绍: 根据官网文档介绍:emqx支持内置数据库Mnesia (用户名/Client ID)认证,使用配置文件与 EMQ X 内置数据库提供认证数据源,通过 HTTP API 进行管理,足够简单轻量。EMQ X 支持使用内置数据源(文件、内置数据库)、JWT、外部主流数据库和自定义 HTTP API 作为身份认证数据源。连接数据源、进行认证逻辑通过插件实现的,每个插件对应一种认证方式,使用前需要启用相应的插件。客户端连接时插件通过检查其 username/clientid 和
2021-09-24 14:08:28
5818
原创 Docker私有仓库部署
Docker私有仓库部署一、介绍 Harbor(港口,港湾)是一个用于存储和分发Docker镜像的企业级Registry服务器。除了Harbor这个私有镜像仓库之外,还有Docker官方提供的Registry。相对Registry,Harbor具有很多优势:提供分层传输机制,优化网络传输 Docker镜像是是分层的,而如果每次传输都使用全量文件(所以用FTP的方式并不适合),显然不经济。必须提供识别分层传输的机制,以层的UUID为标识,确定传输的对象。提供WEB界面,优化用户体验 只用镜
2021-08-31 19:17:50
461
原创 Docker运行SpringBoot项目报错
Docker运行SpringBoot项目报错一、前因 SpringBoot应用中有获取图片验证码的接口,使用Docker制作完镜像后,运行镜像,服务日志报如下错误:java.lang.NullPointerException at sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1264) at sun.awt.FontConfiguration.readFontConfigFile(FontConfigurat
2021-08-31 15:46:24
3775
原创 虚拟机启动报:Failed to open /sysroot/etc/fstab:Input/output error
虚拟机启动报:Failed to open /sysroot/etc/fstab:Input/output error该报错的前面会有 /dev/dm-0的标识, 如果没有/dev/dm-0,而是其他标识,则按以下方法处理其他标识即可。umount /dev/dm-0xfs_repair -v -L /dev/dm-0...
2021-08-30 09:28:30
2175
2
转载 MySQL5.7 JSON字段性能测试
MySQL5.7 JSON字段性能测试表结构JSON字段表CREATE TABLE `invt_bin_dim_test` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `dim` json DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;传统表CREATE TABLE `invt_bi
2021-08-27 09:59:38
2652
原创 Spring Cloud Alibaba系列之四Seata
Spring Cloud Alibaba系列之四Seata Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata的使用分为两部分,一部分是Seata服务、一部分是客户端(其实就是一个注解)。一、Seata服务端安装 为了正确使用并跑起来,需要对SpringCloudAlibaba的版本做强一致性要求,各版本对应关系如下,实验采用的是最新版本。1、下载seata-server软件包:官方链接2、修改conf目录下的file.conf文件serv
2021-08-26 14:33:43
276
原创 Spring Cloud Alibaba系列之三Sentinel服务熔断及限流
Spring Cloud Alibaba系列之三Sentinel服务熔断及限流
2021-08-25 16:19:27
353
原创 SpringBoot 热部署
SpringBoot 热部署 在实际项目开发过程中,经常要修改代码,重启服务。在利用SpringBoot进行开发时,SpringBoot已经提供了devtools开发工具包来支持热部署,可以很方便的更新修改后的代码而不用重启服务。一、项目中添加devtools依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtool
2021-08-24 17:51:03
95
原创 Spring Cloud Alibaba系列之二Nacos配置中心
Spring Cloud Alibaba系列之二Nacos配置中心 Nacos的特性之一就是动态服务配置,替代了Spring Cloud Config,但在使用上确实异常的简单。一、启动Nacos服务Nacos服务启动安装可参考: Spring Cloud Alibaba系列之一Nacos安装及服务注册。二、编写服务读取配置 创建SpringBoot服务加入相应依赖及配置文件即可。1、创建服务2、编写配置文件application.ymlspring: profiles:
2021-08-01 17:50:08
131
原创 Spring Cloud Alibaba系列之一Nacos安装及服务注册
Nacos安装及服务注册 SpringCloudAlibaba依赖于SpringCloud,并且版本对应关系之间也有很大的差异,具体安装哪个版本的Nacos Server,需要参照官方文档给出的参考:组件版本说明。 如下图:1、SpringCloudAlibaba 与 Nacos的版本关系2、SpringCloud 、SpringCloudAlibaba、SpringBoot的版本依赖关系通过以上参考确定各组件版本如下:SpringCloudSpringCloudAlibab
2021-07-29 10:51:23
247
原创 Jenkins系列之六整合SonarQube
Jenkins系列之六整合SonarQube SonarQube作为一款代码质量检测工具,在实际开发的过程中对于作为代码门禁检查是非常有必要的。在Jenkins整合SonarQube之前,环境上需要先安装SonarQube软件,SonarQubu的安装很简单,但是安装的过程中会有各种各样奇葩的问题,解决方案:Centos7安装SonarQube常见问题。一、插件安装 Jenkins整合SonarQube也很简单,需要安装一个SonarQube Scanner的插件,插件的具体安装步骤参考:Jenk
2021-07-24 22:20:02
502
4
原创 Centos7安装SonarQube常见问题
Centos7安装SonarQube常见问题前言:SonarQube的不同版本对于jdk的要求是不一样的,所以在安装之前一定要检查所依赖的jdk的版本,具体版本要求官网上都有相应说明:版本要求。本文所使用的是6.7.7,对应jdk的版本至少1.8以上。 SonarQube安装完成首次启动会有三个日志,基本上大部分的错误都可以通过查看这三个日志来进行定位解决。日志都在${安装目录}/logs/,分别为es.log、sonar.log、web.log。一、sonar.log报错--> Wra
2021-07-23 22:54:47
1780
原创 Jenkins系列之五邮件通知
邮件通知 通常在实际的开发过程中,当jenkins构建成功或失败时需要发送构建的结果给项目经理或TL,以便能及时掌握项目构建情况。一、安装配置插件 Jenkins发送邮件需要安装Email Extension Template Plugin插件,插件安装可参考:插件安装。 在配置之前,需要打开发送方邮件的STMP邮件服务,以qq邮箱为例: 安装好插件之后就需要配置邮件发送的相关参数,如下所示:PS:上边配置密码的地方就是qq邮箱开启stmp服务后生成的一串字符配置好之后可以勾选【
2021-07-20 09:55:14
280
原创 Jenkins系列之三项目构建
项目构建 Jenkins中构建构建的项目的类型有几种类型,如freestyle, maven, pipeline等,其中maven类型和pipeline类型需要安装插件。maven类型安装的插件为Maven Integration;pipeline类型安装的插件为Pipeline。插件安装可参考上一篇文章:Jenkins系列之二插件安装及权限设置。可创建的项目如下图所示:下面就FreeStyle类型为例进行详细介绍:一、安装git插件并配置凭证 由于实际项目中使用git来管理代码版本较多一些,
2021-07-18 00:04:12
254
7
原创 Jenkins系列之二插件安装及权限设置
插件安装及权限设置一、安装插件 使用上一篇中创建的管理员账户登录jenkins。在安装插件界面进行插件的安装,如下图:Available页面列出了所有可安装的插件,如下来将要安装的权限控制插件-Role-based Authorization Strategy。安装完插件之后在installed列表就可以看到已安装的插件,如下:二、权限配置 安装好Role-based Authorization Strategy插件后就可以配置相关的用户权限了。1、开启权限配置开关2、创建用户P
2021-07-16 15:40:51
546
原创 Jenkins系列之一安装
Centos7 上安装Jenkins一、准备安装包 由于jenkins是采用Java编写的,所以安装jenkins之前环境上需先安装Java环境,最新版本的Jenkins需要Java8或Java11。这里以Java8为例。1、下载安装包(RPM方式)http://mirrors.jenkins-ci.org/redhat-stable/2、安装rpm -ivh jenkins-2.289.2-1.1.noarch.rpm 3、修改默认端口(可跳过)vim /etc/sysconfi
2021-07-16 14:54:13
224
原创 InfluxDb 1.8安装及整合SpringBoot
InfluxDb 1.8安装及整合SpringBoot 由于1.x 和2.x 版本差异很大,不管是在语法结构上还是在命令行的使用上。为了兼顾学习成本以及使用成本,InfluxDb采用1.8.x的版本,1.x的版本可以像使用sql语句一样丝滑的使用InfluxDb。一、安装部署(centos7)1、获取安装包wget https://dl.influxdata.com/influxdb/releases/influxdb-1.8.4.x86_64.rpm2、安装yum localinsta
2021-07-08 15:04:50
2334
原创 Stomp以wss方式连接websocket
Stomp以wss方式连接websocket一、问题描述 项目中遇到使用stomp连接websocket,当使用ws://ip:port/ws协议来连接时没有问题,但是放到服务器上却报如下错误:Mixed Content: The page at ‘https://ip:port/‘ was loaded over HTTPS, but attempted to connect to the insecure WebSocket endpoint ‘ws://{ip}:{port}/‘. This
2021-07-02 11:33:18
2281
3
原创 Java实现Base64格式验证码
Java实现Base64格式验证码 实现登录验证码一般分为两种方式:前端实现和后端实现。前端实现由于安全性考虑,就不采用那种方式了。本文主要讲述如何以后端方式生成验证码供前端调用并加以验证。一、创建验证码服务/** * @description: VerifyCodeService * @author: zero * @date: 2021/7/1 9:39 */@Service@Slf4jpublic class CaptchaService { /** * 宋体、
2021-07-01 11:55:11
1189
achartengine如何设置某一个柱状图柱子的颜色
2016-06-11
TA创建的收藏夹 TA关注的收藏夹
TA关注的人