自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(93)
  • 资源 (2)
  • 收藏
  • 关注

原创 docker一站式安装Java开发环境

安装dockerdocker安装MySQL参考:https://juejin.cn/post/6844904122932871182docker pull mysql:8.0docker images |grep mysqldocker run --name mysql01 \-p 3306:3306 \-v /app/mysql/my.cnf:/etc/mysql/my.cnf \-v /app/mysql/data:/var/lib/mysql \-v /app/mysql/lo

2021-12-22 23:30:40 4603 1

原创 测试环境里由于发送MQ数据过大产生的问题

前几天在测试环境中,测试测试一个业务需要发送大数据给MQ,其他服务收到数据后进行处理数据。本来在业务量比较小,现场是没有这种问题的,但是测试环境经过无数轮疯狂造数据(你懂的),然后发送到MQ的数据就变的比较大了,最后通过排查发现是RocketMQ设置了发送最大消息的配置,详细如下分析:(以下报文和代码都是本地自己复现的示例)很明显,报错【 Caused by CODE: 13 DESC: the message body size over max value, MAX: 4194304】,意思是请求体

2024-04-28 14:17:51 282 2

原创 RocketMQ

Producer:消息生产者,负责生产消息,一般由业务系统负责生产消息。一个消息生产者会把业务应用系统里产生的消息发送到Broker服务器。RocketMQ提供多种发送方式:同步发送、异步发送、顺序发送、单向发送。同步和异步方式均需要Broker返回确认消息,单向发送不需要。Consumer:负责消费消息,一般是后台系统负责异步消费。一个消息消费者会从Broker服务器拉取消息,并将其提供给应用程序。从用户应用的角度而言提供两种消费形式:拉取式消费、推动式消费。

2024-04-23 15:22:29 827

原创 RabbitMQ学习记录

Brocker:消息队列服务器实体Exchange**(**消息交换机):它指定消息按什么规则,路由到哪个队列。Queue(消息队列载体):每个消息都会被投入到一个或多个队列。Binding(绑定):它的作用就是把exchange和queue按照路由规则绑定起来。Routing Key(路由关键字):exchange根据这个关键字进行消息投递;vhost:权限数据隔离。Producer**(**消息生产者):就是投递消息的程序。Consumer(消息消费者):就是接受消息的程序;

2024-04-18 20:07:23 767 1

原创 Spring缓存

Spring Cache 是 Spring 提供的一整套的缓存解决方案。虽然它本身并没有提供缓存的实现,但是它提供了一整套的接口和代码规范、配置、注解等,这样它就可以整合各种缓存方案了,比如 Redis、Ehcache,我们也就不用关心操作缓存的细节。Spring 3.1 开始定义了 org.springframework.cache.Cache 和 org.springframework.cache.CacheManager 接口来统一不同的缓存技术,并支持使用注解来简化我们开发。Cache。

2024-04-03 09:28:41 743 1

原创 线程池的异常处理机制

一次开发过程中,送审之后向三方OA系统推送代办,其中由于优化的原因使用到线程池中间有一个判断,该不该推送,然后使用el表达式进行判断,但是测试环境中el表达式配置的不标准,导致现象就是没有推送,也没有日志,子线程就像停住了,没啥动静了。

2023-11-21 20:15:51 199

原创 macos死机后IDEA打不开,Cannot connect to already running IDE instance.

进入:/Users/lzq/Library/Application Support/JetBrains。找到IDEA的目录删除隐藏文件夹 .lock。

2023-11-15 16:52:18 1092

原创 Flowable从入门到源码分析

工作流,是把业务之间的各个步骤以及规则进行抽象和概括性的描述。使用特定的语言为业务流程建模,让其运行在计算机上,并让计算机进行计算和推动。工作流解决的痛点在于,解除业务宏观流程和微观逻辑的耦合,让熟悉宏观业务流程的人去制定整套流转逻辑,而让专业的人只需要关心他们应当关心的流程节点。BPM:Business Process Management,业务流程管理BPMN:Business Process Modeling Notation,BPMN是一个广泛接受与支持的,展现流程的注记方法,是一种图形化表示业务流

2023-04-20 22:41:44 2663 1

原创 Atomic包

Atomic包里的类基本都是使用Unsafe实现的,Unsafe只提供了三种CAS方法,compareAndSwapObject,compareAndSwapInt和compareAndSwapLong,AtomicBoolean是先把Boolean转换成整型,再使用compareAndSwapInt进行CAS,所以原子更新double也可以用类似的思路来实现。第一点需要满足的条件,就是需要大量的计算,并且当需要并行计算的时候,我们可以考虑使用 LongAccumulator。变量,也就是这个整型的值。

2023-04-05 17:46:32 416

原创 定时任务系列(9)-Quartz启动核心原理之错过调度

前面再次查询一次处于WAITING状态的trigger,拿到所有失火的数据再找到trigger,将trigger封住成。这里在获取锁前再查询一次是否有失火的任务,获取锁的开销是很大的,这里的处理尽量避免获取锁。先通知所有的监听失火的监听器,然后修改具体的trigger,再重新将trigger写入数据库。的一个内部类,同集群的初始化方法一样,这里的初始化方法也执行了线程的执行。首先获取misfired的job,根据不同策略设定的调度时间,重新调度任务。,再针对每个Trigger更新下次调度时间。

2022-11-15 22:38:58 1189

原创 定时任务系列(8)-Quartz启动核心原理之集群

的初始化方法如上,调用了内部的manage()方法,通过manage方法来检测心跳和故障转移,后使用了配置的线程执行了集群线程。先查询出所有的调度示例,如果是第一次加载,就加载当前实例,如果是之后,就需要判断实例是不是故障,故障判断:触发时间+阈值>当前时间。如果是集群模式,根本不需要考虑失火的问题,多个实例可以不间断调度。第一次启动来调用肯定是没有初始化的,就不用考虑失火的问题,如果是初始化过的,需要考虑失火恢复任务。是基于内存的,不会存在什么需要初始化失火策略的问题,所以默认是不实现的。

2022-11-14 23:08:49 1434

原创 定时任务系列(7)-Quartz启动核心原理之JobStoreSupport

如果trigger的job设置为@DisallowConcurrentExecution,并且已经添加到result中,则将其放回timeTriggers集合中,继续寻找下一个trigger。如果存在需要触发的tiggerKey,通过查询tiggerKey查询出需要触发的Trigger。触发器,该触发器将在两个给定时间戳之间按触发时间的升序触发,然后按优先级降序触发。这样,返回accuired状态的trigger,也能获取了一组需要触发的触发器。状态的才能继续执行,将trigger的状态改为执行中。

2022-10-30 21:27:52 625

原创 定时任务系列(6)-Quartz启动核心原理之RAMJobStore

是否存在数据,这里是前面绑定触发器后存入的,依次移除第一个,timeTriggers的数据结构是TreeSet是一颗红黑树,所以是有序的树。先判断是否存在更早的触发器,如果存在,需要清除当前trigger,调度更早的trigger。通知所有的监听器,先通知trigger的监听器,再通知任务否决监听器,再通知job的监听器。如果真的存在失火的数据,这里会根据失火的处理策略修改trigger的下次调度时间。遍历前面的封装的trigger,如果在之前存在异常,就将这个trigger的状态由。

2022-10-30 21:27:12 687 2

原创 定时任务系列(5)-Quartz绑定任务和触发器核心原理

首先判断缓存中是否存在key值的数据,如果存在,不允许重复创建相同JobName和JobGroup的任务,报错。注册好触发器后,判断触发器是否是暂停的,并将状态改为暂停;如果是已阻止的,状态改为已阻止。首先看一下jobExists方法,这个查询数据库,看是否已经存在数据。获取JobStore后调用注册的方法,这里我们分两种:内存型。这里获取DB操作的驱动,这里以MySQL为例,实现类为。如果任务存在,则报错。最后,存在就修改数据库的触发器,不存在就新增。类似注册任务,这里包装一个。类似一个包装类,包装了。

2022-10-23 16:14:29 914

原创 定时任务系列(4)-Quartz创建Scheduler调度器核心原理

Quartz启动原理所有都起始于,有两个是实现类和。中提供一个的方法,获取一个默认的Scheduler。这里直接new一个StdSchedulerFactory,并调用了方法。

2022-10-18 08:29:26 1075

原创 定时任务系列(3)-Quartz动态定时任务

Quartz定时任务框架经常用于系统后台业务异步处理。平常我们使用时,主要是通过手工编写配置代码文件方式添加修改定时任务,然后重启系统。有时候我们需要根据业务运营需要,动态添加修改定时任务,比如添加新的定时任务、修改任务执行时间、暂停定时任务、删除定时任务等,并且监控定时任务状态,而又不想重启系统,这时就需要系统具备动态管理定时任务的功能。Quartz提供了一系列组件,支持动态管理定时任务的功能。

2022-10-17 13:33:49 2747

原创 定时任务系列(2)-Quartz初步认识

Quartz是Java定时任务领域一个非常优秀的框架,由OpenSymphony(一个开源组织)开发,这个框架进行了优良地解耦设计

2022-10-16 23:06:46 497

原创 定时任务系列(1)-简单定时任务

Timer 类实现定时任务的优点是方便,因为它是 JDK 自定的定时任务,但缺点是任务如果执行时间太长或者是任务执行异常,会影响其他任务调度,所以在生产环境下建议谨慎使用。

2022-10-16 20:47:51 196

原创 Springboot集成Webservice

简介Web Service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的交互操作的应用程序Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范实施的应用之间, 无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据。Web Service是自描述、 自包

2021-08-08 22:25:16 1557

原创 SpringBoot注解

@Autowired

2021-08-01 21:39:09 167

原创 雪花算法生成id

SnowFlake算法生成id的结果是一个64bit大小的整数,它的结构如下图:雪花生成的id有64位,其中第1位是符号位,第2至42位是41位的时间戳,第42位至52位是10位的工具机器,包括5位数据中心和5位机器id,第53位到64位是12位的序列号。SnowFlake可以保证:● 所有生成的id按时间趋势递增● 整个分布式系统内不会产生重复id(因为有datacenterId和workerId来做区分)...

2021-07-17 17:28:15 6839 3

原创 程序包org.yaml.snakeyaml不存在

在springboot中解析的Yaml,找不到org.yaml.snakeyaml,但是我在依赖里面可以找到这个包,我用的springboot的版本是2.2.2,找了网上也没有什么好解决的办法,尝试更换sprringboot的版本,我换成2.5.0后成功了。 <springboot.version>2.5.0</springboot.version>...

2021-07-17 16:43:36 4788

原创 Thymeleaf格式化LocalDatetime时间格式

Thymeleaf格式化LocalDatetime时间格式不需要加入任何的格外的包,在spring-boot-starter-thymeleaf下已经存在关于融合java8time的包。否则引入<dependency> <groupId>org.thymeleaf.extras</groupId> <artifactId>thymeleaf-extras-java8time</artifactId> <vers

2021-07-11 23:32:21 477

原创 树形结构开发

后端返回前端树形的开发工具类直接上代码缺点:没有加入权重,导致只能按照id的顺序打印希望能看到的人帮我修改一下代码,并放在评论中。package org.xiaov.core.tree;import org.springframework.util.ReflectionUtils;import org.xiaov.core.bean.JSONHelper;import org.xiaov.core.string.StringHelper;import org.xiaov.execption

2021-05-21 22:41:38 144

原创 http中常用的状态码

http中常用的状态码这是一个jdk中的http包里的状态码,但是编译的时候却没有这个类,好像是在什么opeanjdk中才有吧,我也不是特别清楚,后来我在orcale的官网上找到的这个类,基本上包含了所有http的状态码。package org.xiaov.http;/** * @description: http协议的一些状态码 * @author: xiaovcloud * @date: 2021/2/1 14:29 * @version:1.0 */public class Cod

2021-02-21 14:48:00 195

原创 springboot集成redis客户端

springboot集成redis客户端首先导入需要的maven坐标<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <version>${springboot.version}</version></depende

2021-01-30 17:04:10 188 2

原创 Spring Boot的全局异常处理

首先有一个自定义的返回结果集package com.lzq.vo;import lombok.Builder;import lombok.Data;import lombok.extern.slf4j.Slf4j;import java.io.Serializable;@Data@Builder@Slf4jpublic class ResultVO implements Serializable { private static final long serialVersi

2021-01-23 13:35:51 83

原创 从无到有搭建一个自己的前后端分离的博客系统

前期的准备建表暂时想到了8张表xiaov_sys: 系统表xiaov_sys_log:系统的操作日志xiaov_sys_view:来访者xiaov_category:分类标签xiaov_article_info:文章信息xiaov_article_category:文章的分类标签xiaov_article_comment:文章的评论xiaov_comment:评论内容,is_about用来区别是不是处于关于我的评论creat database blog;use blog;## s

2020-12-19 14:57:50 333 2

原创 设计模式——模板模式

在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。主要解决的问题: 一些方法通用,却在每一个子类都重新写了这一方法。模板方法模式是基于”继承“的;优点:提高代码复用性将相同部分的代码放在抽象的父类中,而将不同的代码放入不同的子类中实现了反向控制通过一个父类调用其子类的操作,通过对子类的具体实现扩展不同的行为,实现了反向控制 & 符合“开闭原

2020-11-14 09:53:45 83

原创 线程池基础全概述

简介线程池就是首先创建一些线程,它们的集合称为线程池。使用线程池可以很好地提高性能,线程池在系统启动时即创建大量空闲的线程,程序将一个任务传给线程池,线程池就会启动一条线程来执行这个任务,执行结束以后,该线程并不会死亡,而是再次返回线程池中成为空闲状态,等待执行下一个任务。使用线程池的优势:降低系统资源消耗,通过重用已存在的线程,降低线程创建和销毁造成的消耗;提高系统响应速度,当有任务到达时,通过复用已存在的线程,无需等待新线程的创建便能立即执行;可以对线程进行管理:线程池可以提供定时、定期,

2020-09-15 18:19:03 90

原创 JVM初步入门

JVM的体系结构程序计数器一块较小的内存空间, 是当前线程所执行的字节码的行号指示器,每条线程都要有一个独立的 程序计数器,这类内存也称为“线程私有”的内存。正在执行 java 方法的话,计数器记录的是虚拟机字节码指令的地址(当前指令的地址)。如 果还是Native方法,则为空。栈是描述java方法执行的内存模型,每个方法在执行的同时都会创建一个栈帧(Stack Frame) 用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中

2020-09-14 11:49:29 85

原创 正则表达式

正则表达式整理元字符代码说明.匹配除换行符以外的任意字符\w匹配字母或数字或下划线或汉字\s匹配任意的空白符\d匹配数字^匹配字符串的开始$匹配字符串的结束\b匹配字符串的结束重复代码说明*重复零次或更多次+重复一次或更多次?重复零次或一次{n}重复n次{n,}重复n次或更多次{n,m}重复n到m次POSIX 字符类(仅 US-ASCII)语法说明

2020-09-12 11:08:01 253

原创 排序算法——快速排序

快速排序时间复杂度:O(nlogn)最坏时间复杂度: O(n^2)最好时间复杂度: O(nlgn)空间复杂度:O(lgn)不稳定算法原理在排序的数组中选择一个基准,(我这里选择右边界的数作为基准)。伪造两个指针leftPtr和rightPtr,leftPtr指向第一个数,rightPtr指向基准值前面一个数。leftPtr向后扫描,找到第一个大于基准值的索引,rightPtr向前扫描,找到第一个小于基准值的索引,交换两个索引的值。当leftPtr>rightPtr的时候表示

2020-07-20 14:42:15 97

原创 Java实现cache的原理

package com.whpu.utils;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import java.util.*;import java.util.concurrent.ConcurrentHashMap;public class CacheUtil { @Data @AllArgsConstructor @NoArgsCons

2020-07-17 17:04:15 238

原创 JavaWeb注册的邮件激活

首先在数据库表里面建立使用uuid生成的唯一序列在pom文件中加入mail的依赖<!--mail--> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.7</version> </dependency>引入MailUtils工具类pa

2020-07-10 22:48:03 513

原创 Spring-Springmvc-Mybatis框架整合

前言使用工具IDEA整合先上结构图搭建基础环境数据库文件sqlSET FOREIGN_KEY_CHECKS=0;-- ------------------------------ Table structure for user-- ----------------------------DROP TABLE IF EXISTS `user`;CREATE TABLE `user` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT,

2020-07-08 18:01:27 186 1

原创 手把手教你IDEA集成tomcat

下载tomcat进入apache tomcat的官方网站下载,地址https://tomcat.apache.org/download-90.cgi下载好后,解压就可以了。新建web项目如果项目已经建好,请跳转点击跳转进入到界面后配置自己的Java版本,选择new 找到自己jdk目录,完成jdk的配置。这里我们主要讲解集成tomcat,最开始打开Application server这里应该什么都没有,我这里以前已经就新建过了。点击new后,点击Tomcat Server选择你刚才解压的

2020-06-28 16:39:44 1729

原创 排序算法——归并排序

归并排序时间复杂度:O(nlogn)最坏时间复杂度: O(nlgn)最好时间复杂度: O(nlgn)空间复杂度:O(n)稳定两路归并算法思路:分而治之(divide - conquer);每个递归过程涉及三个步骤分解: 把待排序的 n 个元素的序列分解成两个子序列, 每个子序列包括 n/2 个元素.治理: 对每个子序列分别调用归并排序MergeSort, 进行递归操作合并: 合并两个排好序的子序列,生成排序结果.代码实现:public class MergeSort {

2020-06-26 22:39:53 172

原创 面向对象的基本概念

面向对象三大特征封装利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体。数据被保护在抽象数据类型的内部,尽可能地隐藏内部的细节,只保留一些对外的接口使其与外部发生联系。用户无需关心对象内部的细节,但可以通过对象对外提供的接口来访问该对象。优点:减少耦合:可以独立地开发、测试、优化、使用、理解和修改减轻维护的负担:可以更容易被理解,并且在调试的时候可以不影响其他模块有效地调节性能:可以通过剖析来确定哪些模块影响了系统的性能提高软件的可重用性降

2020-06-22 13:39:14 188

原创 设计模式——观察者模式

当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。主要解决的问题:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。观察者模式所涉及的角色有:抽象主题(Subject):抽象主题角色把所有对观察者对象的引用保存在一个聚集(比如ArrayList对象)里,每个主题都可以有任何数量的观察者。抽象主题提供一个接口,可以增加和删除观察者对象,抽象主题角色又叫做抽象被观察者

2020-06-21 16:58:06 170

layim.js资源文件

layui.js资源,请使用高版本JQuery(3.0+),用户下载的资源仅供用户个人学习、研究、技术交流等非营业性使用,不得以任何方式用于任何商业或营利性用途,请下载后24小时内删除

2020-06-27

layim.css资源文件

layui.css资源,用户下载的资源仅供用户个人学习、研究、技术交流等非营业性使用,不得以任何方式用于任何商业或营利性用途,请下载后24小时内删除

2020-06-27

空空如也

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

TA关注的人

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