自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 easy-rule规则引擎使用

轻量级的规则引擎,易于学习的api简单来说,规则引擎就是一个函数:y=f(x1,x2,…,xn)将业务代码和业务规则分离,解耦业务决策和业务代码的绑定关系。

2024-05-22 11:24:57 663

原创 quartz源码分析

在上一章quartz的使用-CSDN博客有讲关于quartz的使用,包括常规使用,结合mysql存储做分布式调度和结合springboot使用,本篇文章主要做定时调度的主流程源码分析。

2024-04-17 09:52:54 807

原创 quartz的使用

是OpenSymphony开源组织在Job scheduling领域又一个开源项目,完全由Java开发,可以用来执行定时任务,类似于java.util.Timer。功能更强大。

2024-04-16 17:24:03 338

原创 arthas的搭建和使用

Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。

2024-04-11 15:46:10 862

原创 springboot-admin使用及原理剖析

spring.boot.admin.ui.brand是springbootadmin页面顶部显示内容。其中列举了开发的所有端口信息内容,其中有关于应用的日志级别、jvm、spring的ioc相关信息。spring.boot.admin.client.url表示admin服务端的地址和端口。spring.boot.admin.ui.title 表示html页面的标题内容。可以在dashboard的主页面看到相关的应用注册信息,包括注册的应用和实例个数。的实现具体的原理可以翻看一下上一章的源码分析。

2024-04-08 15:18:17 1004

原创 SpringMvc之映射器HandlerMapping

在springmvc的处理流程中,第一步就是查询请求对应的映射器,然后组装成处理器链处理请求,本文意在梳理该过程在springboot actuator中有很多的监控信息可以通过暴露"端点"的方法让外部获取应用的信息,而端点的暴露即和以上过程大体相当在图3所示的springboot actuator的自定义端点是通过WebMvcEndpointHandlerMapping暴露的。

2024-03-26 17:11:09 1295

原创 JSqlParser的使用

JSqlParse是一款很精简的sql解析工具,它可以将常用的sql文本解析成具有层级结构的语法树,我们可以针对解析后的节点进行处理(增加、移除、修改等操作),从而生成符合我们业务要求的sql,比如添加过滤条件等等JSqlParse采用访问者模式项目结构非常简单,从截图上看就5个包。如果对源码感兴趣的可以直接从github上下载源码包调试。其中expression包包含了所有的sql表达式的抽象对象:statement包含了所有sql语句的类型,比如:增删改查,ddl语句,rollback语句等等。

2024-03-22 18:24:14 1938

原创 xxl-job源码分析

com.xxl.job.admin.core.trigger.XxlJobTrigger:定时任务真正的触发器,通过上面的ringThread传入的定时任务相关参数信息,通过路由器(com.xxl.job.admin.core.route.ExecutorRouter)计算获取最终需要发送http请求的客户端地址,发起调用请求,完成定时任务调度。dashboard在启动的时候初始化类com.xxl.job.admin.core.conf.XxlJobAdminConfig,关于任务调度的入口就是在这个类。

2024-03-15 18:14:09 929

原创 xxl-job

XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用执行器:通过xxl-job注册到dashboard上的应用,可以理解成xxl-job的一个客户端任务:注册到dashboard上的每个应用的任务先简单理解即可,后续在源码分析篇会详细介绍。

2024-03-15 11:29:34 747

原创 Jmeter扩展---自定义取样器

Jmeter已经内置了各种协议的取样器,已经能满足常用的性能压测需求。且在前面一章Jmeter扩展开发--自定义java取样器-CSDN博客中也有关于Java取样器的扩展开发,不过有时候我们期望能定制自己的取样器和界面。为此,需要对Jmeter做扩展,自定义取样器开发在自定义取样器开发中有两个类需要重点介绍该类是自定义Jmeter取样器的ui显示类,可以直接像操作Swing一样编辑Jmeter取样器的ui界面,如上图2所示。

2024-03-14 14:29:45 1051

原创 Jmeter扩展开发--自定义java取样器

jmeter内置了包括:http、https、tcp等各种协议的支持,通常情况只需要做简单的参数配置即可使用。

2024-03-14 12:19:00 911

原创 java非对称加解密

非对称加密:加密和解密使用不同的秘钥的加解密方法。一般的,用公钥做加密,私钥做解密使用常用的加解密有:RSA、ECC、DSA,在java中使用最多的是RSA。

2023-12-25 15:12:55 407

原创 java对称加密

Advanced Encryption Standard)是一种对称加密算法,AES 算法比 DES 算法更安全,加密和解密速度也更快注意:AES加密算法的key的长度必须是:16、24、32。

2023-12-22 18:26:56 372

原创 java常用密码简介及代码实现

当 URL 路径或者查询参数中,带有中文或者特殊字符的时候,就需要对 URL 进行编码(采用十六进制编码格式)。URL 编码的原则是使用安全字符去表示那些不安全的字符使用示例public static final String DEMO_STR= "法律";@Test又叫Hash算法、散列函数、数字摘要、消息摘要,是一种单向算法(不可逆),可以根据该算法对目标信息生成固定长度的唯一hash值,不能逆向计算(不可通过计算的hash值反推目标信息)。

2023-12-22 17:07:43 467 1

原创 maven常用插件简介及配置模板

maven-assembly-plugin是maven的官方插件,在使用时可以不用指定groupId。该插件主要用于将项目打包成归档文件(fat-jar)maven-shade-plugin是maven的官方插件,在使用时可以不用指定groupId。该插件可以制作归档文件(fat-jar)、包的重命名、配置文件追加等等,功能十分强大maven-antrun-plugin是maven的官方插件,在使用时可以不用指定groupId。该插件用于创建指定目录,并把指定目录的文件拷贝到目标目录下。

2023-12-21 10:59:06 678

原创 自定义maven插件

一般的maven插件使用时需要引入插件的gav(groupId,artifactId,version)就可以正常使用了。一般的结构如下: 包含插件的gav,还有一组可执行器<execution>。在每个<execution>里面包含有如下结构一个可执行器的结构如上,其中各标签释义如下:<configuration>表示该可执行器的配置项,后续在自定义实现maven插件中会详细的描述<id>就是取个名字,别重复就行了<phase>表示该可执行器在maven的生命周期的哪个阶段生效,如果不配置,使用插件默认的,

2023-12-20 16:36:03 892

原创 日志门面slf4j和各日志框架

简单日志门面(Simple Logging Facade For Java)SLF4J主要是为了给Java日志访问提供一套标准、规范的API框架,其主要意义在于提供接口,具体的实现可以交由其他日志框架,如log4j、logback、log4j2。对于一般的Java项目而言,日志框架会选择slf4j-api作为门面,配上具体的实现框架,中间使用桥接器完成桥接。所以我们可以得出SLF4J最重要的两个功能就是对于日志框架的绑定以及日志框架的桥接。

2023-12-08 14:37:47 1172

原创 log4j2日志框架使用

log4j2支持四种类型的配置文件:XML/JSON/YML/Properties(后缀支持的不只4种),由四种解析器完成。最终会由ConfigurationFactory#getConfiguration完成配置文件加载初始化。log4j2的配置文件语法树如下:结构清晰。

2023-12-08 11:50:19 396

原创 log4j日志框架的使用

当调用logger.info打印日志时,和logback的流程基本一样,也是先组装成一个LoggingEvent对象,然后一次遍历logger对象的Appender列表(无appender列表的继承子父对象)完成日志输出。log4j的配置文件可以理解成有2部分 1根日志记录器 2 各appender(输出源)配置。在loggerManager的静态代码块中,完成对配置文件的读取和解析。然后组装成框架的Logger对象、appender对象完成初始化操作。loggerManager的静态代码块。

2023-12-07 17:39:25 610

原创 logback日志框架使用

p = %le = %level【等价】 日志级别 %-5p 表示打印日志级别,且左对齐5个字符的距离。%F = %file 【等价】 发出日志请求的java源文件名字 ---不推荐,耗性能。%L = %line 【等价】 java文件中请求的行号 ---不推荐,耗性能。%M = %method 日志请求发出的方法的方法名----不推荐,耗性能。%C = %class【等价】打印全类名 ---不推荐,耗性能。%m = %msg = %message 日志正文信息。%t = %thread 线程名称。

2023-12-07 14:45:34 642

原创 docker启动nginx

在nginx中,server_name指令用于指定虚拟主机的域名或IP地址。它可以用于匹配请求的主机头(HTTP请求头中的。该配置打开了下划线的自定义请求头可以被转发,默认nginx的转发是不会转发下划线的请求头。字段),从而确定哪个虚拟主机应该处理该请求。

2023-12-05 14:18:40 481

原创 springboot应用支持https实现

keytool -genkey -alias (别名) -dname "CN=(姓名),OU=(组织单位名称),O=(组织名称),L=(城市名称),ST=(省),C=(国家)" -storetype (密钥仓库类型) -keyalg (生证书的算法名称) -keysize (密钥长度,证书大小) -keystore (指定生成证书的位置和证书名称) -validity (证书有效期,天单位)切换到jdk目录下bin目录,执行。一 jdk自带证书生成。二 配置https协议。

2023-12-05 11:24:07 726

原创 hadoop集群搭建

hadoop1 hadoop2 hadoop3 ip分别为:192.168.56.211,192.168.56.212,192.168.56.213。

2023-11-09 15:09:58 653

原创 docker创建elasticsearch、elasticsearch-head部署及简单操作

b 第7574行 var inspectData = s.contentType === "application/x-www-form-urlencoded" &&改为 var inspectData = s.contentType === "application/json;a 第6886行 :/contentType: "application/x-www-form-urlencoded。1 docker exec -it {elasticearch-head}容器名称 /bin/bash。

2023-10-13 15:33:08 918

原创 docker搭建rocketmq集群

刷盘策略,取值为:ASYNC_FLUSH,SYNC_FLUSH表示同步刷盘和异步刷盘;#刷盘策略,取值为:ASYNC_FLUSH,SYNC_FLUSH表示同步刷盘和异步刷盘;#刷盘策略,取值为:ASYNC_FLUSH,SYNC_FLUSH表示同步刷盘和异步刷盘;#有三个值:SYNC_MASTER,ASYNC_MASTER,SLAVE;#有三个值:SYNC_MASTER,ASYNC_MASTER,SLAVE;#有三个值:SYNC_MASTER,ASYNC_MASTER,SLAVE;

2023-10-11 13:49:36 228

原创 docker搭建rabbitmq集群

如果在执行 "rabbitmqctl join_cluster --ram rabbit@node2"报错,分别进入三台虚拟机docker容器中:docker exec -it {containerName} bash。分别在3台机器上执行:docker pull rabbitmq:3.9.5-management。浏览器访问:http:192.168.56.104:15672。#跟机器1的消息队列建立关系。#跟机器1的消息队列建立关系。1 拉取rabbitMq镜像。2 启动rabbitMq容器。

2023-10-10 15:23:15 419

原创 使用docker搭建kafka集群、可视化操作台

注意:103和104启动kafka的区别就是指定不同的KAFKA_BROKER_ID,如果是以配置文件启动的,在配置文件中修改即可。本次基于docker搭建kafka集群,zookeeper使用单实例。b 启动zookeeper容器。e 拉取kafka-map镜像。f 启动kafka-map容器。a 拉取zookeeper镜像。c 拉取kafka镜像。d 启动kafka容器。a 拉取kafka镜像。b 启动kafka容器。

2023-10-10 14:05:14 551 1

原创 使用docker创建redis实例、主从复制、哨兵集群

masterauth 123456 ------这是因为,当master节点down之后再次重启,会从新的master节点同步数据,需要密码验证。appendonly yes -----持久化。appendonly yes -----持久化。c 切换到redis配置文件映射目录/mydata/redis/conf。appendonly yes -----持久化。

2023-10-09 15:10:14 224

原创 使用docker搭建nacos单机、集群 + mysql

docker nacos

2023-10-08 16:36:40 779

原创 spring aop源码解析

org.springframework.aop.framework.autoproxy.AbstractAutoProxyCreator spring的aop实现的入口类org.springframework.aop.Pointcut spring的aop的顶层切面接口org.aopalliance.aop.Advice spring的aop的顶层通知接口org.springframework.aop.Advisor aop的顶层接口,从语义上包含了:pointcut和advice。

2023-09-15 18:22:09 123

原创 sentinel客户端和dashboard交互

在前面的章节中:通过阐述sentinel简单使用、滑动窗口、核心流程源码分析把sentinel限流、熔断等主要功能说明清楚了,但我们在实际使用的过程中,不可能通过硬编码的方式设置规则,且规则也没法直观的维护,为此肯定是需要通过sentinel dashboard维护限流熔断规则。com.alibaba.csp.sentinel.transport.init.CommandCenterInitFunc#init方法完成初始化和调用,同时注意到:在正式调用start之前,做了一些初始化操作。

2023-08-09 16:45:11 758

原创 sentinel核心流程源码解析

sentinel核心流程

2023-08-08 20:01:17 804

原创 sentinel---滑动窗口的实现原理

sentinel--滑动时间窗口

2023-08-08 15:20:20 1032

原创 sentinel简单使用

Dcsp.sentinel.api.port=8719 ---通信端口号。-Dcsp.sentinel.dashboard.server=localhost:8718 表示dashboard把自己本身也注册到dashboard上显示。-Dcsp.sentinel.dashboard.server=192.168.56.102:8858 ---dashbaord地址。

2023-08-07 11:59:56 840

原创 从0到1搭建spring cloud alibaba +springboot+nacos+dubbo微服务

以上:即完成了spirng cloud alibaba的微服务框架搭建,注意cloud ,springboot,alibaba的版本依赖!spring cloud alibaba版本选择:2.2.6.RELEASE。spring cloud 版本选择:Hoxton.SR9。springboot版本:2.3.2.RELEASE。使用nacos做配置中心和注册中心+dubbo做RPC调用。

2023-06-29 19:29:01 574

原创 iostat命令详解

svctm 表示平均每次设备I/O操作的服务时间(以毫秒为单位)(如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,如果await的值远高于svctm的值,则表示I/O队列等待太长, 系统上运行的应用程序将变慢)-y:跳过不显示第一次报告的数据,因为iostat使用的是采样统计,所以iostat的第一次输出的数据是自系统启动以来的累计的数据(该参数十分重要,第一次统计数据几乎无意义)] | ALL } ] 显示磁盘分区的相关统计信息(默认粒度只到磁盘,没有显示具体的逻辑分区)

2023-06-27 16:56:06 545

原创 cpu个数、核数、超线程的一些概念

每颗物理CPU可以有1个或者多个物理内核,通常每颗物理CPU的内核数都是固定的,cpu核数就是指单块CPU上面能处理数据的芯片组的数量,如双核、四核等 (cpu cores)物理cpu个数:物理CPU数就是实际服务器中插槽上的CPU个数,主板上实际插入的cpu数量。总逻辑CPU数 = 物理CPU个数 * 每颗物理CPU的核数 * 超线程数。逻辑cpu个数:物理CPU个数 * 每颗物理CPU的核数 * 超线程数。CPU总核数 = 物理CPU个数 * 每颗物理CPU的核数。每个CPU都具有独立的资源。

2023-06-27 14:59:50 2765

原创 docker安装rabbitMq集群

e RABBITMQ_ERLANG_COOKIE='rabbit_mq' 设置rabbitmq的cookie为“rabbit_mq”,可以自定义为其他文本,容器保持一致即可。-e RABBITMQ_DEFAULT_USER=admin 设置rabbitmq默认用户为admin。-e RABBITMQ_DEFAULT_PASS=admin 设置rabbitmq默认密码为admin。--add-host=node3:192.168.56.104 修改容器内部的hosts。#跟机器1的消息队列建立关系。

2023-04-17 11:52:47 203

原创 junit的基本使用

新建一个源代码目录来存放我们的测试代码,即将测试代码和项目业务代码分开。测试方法必须使用public void 进行修饰,不能带任何的参数。测试类所在的包名应该和被测试类所在的包名保持一致。测试方法上必须使用@Test进行修饰。可以区分各注解的运行先后顺序。

2023-04-14 13:40:56 467

原创 docker构建rocketMq集群

需要往集群中添加其他的brokerji节点,只需要从第四部开始即可(需要拉取docker镜像)、修改响应的配置参数和启动参数即可。只有在启动了namesrv的机器上才添加该参数,集群中的其他节点不需要添加该参数。#刷盘策略,取值为:ASYNC_FLUSH,SYNC_FLUSH表示同步刷盘和异步刷盘;集群中各broker节点只需要连接到相同的NAMESRV_ADDR并且在上面的配置文件中指定唯一的brokerId即可。#broker名称,master和slave使用相同的名称,表明他们的主从关系。

2023-04-12 12:02:35 378

空空如也

空空如也

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

TA关注的人

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