- 博客(113)
- 收藏
- 关注
原创 springboot 注解+AOP实现接口方法出入参打印
针对加入spring bean容器的实例方法,通过注解+aop实现打印方法调用的出入参,通过注解可以配置是否打印出入参,出入参中的单列集合或双列集合是否打印,选择非全量打印只会打印集合的大小/*** 入参* 是否打印全量参数 true-集合类型全量打印 false-集合类型只打印数量/*** 出参* 是否打印全量参数 true-集合类型全量打印 false-集合类型只打印数量/*** 是否打印入参 默认打印/*** 是否打印出参 默认打印/*** 入参。
2024-01-08 09:29:10 878
原创 Springboot部署ELK实战
本文主要介绍了通过docker-compose搭建elk,包含ElasticSearch、Logstash、Kibana,搭配SpringBoot、logback收集日志,完成整个日志搜索平台的实现
2023-08-04 18:54:26 1280
原创 JDK线程池中到底该设置多少线程数才比较合适
很多小伙伴觉得,线程池中设置多少线程数,或者说创建的JDK线程池中核心线程数、最大线程数该设置多少比较合适,一般都是通过CPU核数去计算的,但是需要对处理业务的特点去设计。
2023-03-26 23:56:02 765
原创 Rabbitmq如何保证消息可靠性的全面解析
Rabbitmq保证消息的可靠性主要针对一下几种途径体现:生产者发送消息到交换机、生产者直接发送消息到队列、交换机投递消息到队列、交换机队列消息持久化问题、消费者消费消息情况,通过ack、nack确认消息是否发送成功或者消费失败,通过本地重试机制、失败策略避免循环消息重入队到失败的过程,并衍生死信交换机、延迟队列、惰性队列的使用场景
2023-03-21 12:05:00 985
原创 Java容器的fail-fast fail-safe策略详细解读
fail-fast的容器是不允许在遍历或者迭代的时候修改值 ,每次指针下移的时候都会判断modCount!= expectedModCount,如果不一致则抛出并发修改异常ConcurrentModificationException迭代器一旦创建就会记录当前modCount的值,所以可能出现多个迭代器遍历出的结果不一样的情况。
2023-03-14 21:42:01 405
原创 SpringAop+注解实现SpringBoot动态数据源切换&&AbstractRoutingDataSource源码解析
通过Spring AOP + 注解来替换当前线程ThreadLocal中的值,并且通过重写AbstractRoutingDataSource类重写determineCurrentLookUpKey()方法,实现动态数据源切换,满足功能实现的代码0侵入性,并且高度解耦,实现可拔插功能效果
2023-02-27 12:34:50 1401
原创 高并发多级缓存架构解决方案 && OpenResty、canal搭建及使用流程
本文提供了高并发多级缓存架构解决方案,梳理客户端发送请求到响应处理请求的整个链路流程,并且详细描述了高并发下如何将请求流程进行拆分,充分利用Nginx、OpenResty、Redis高并发读写能力,以及为保证中间件服务高可用性而搭建集群,并且通过设置多级缓存,规避了tomcat高并发能力不足的缺陷,足以经受大规模并发考验
2023-01-14 21:04:04 1204
原创 Redis高可用心路历程以及多种业务场景下的使用模式
本文主要分析了单节点下redis的缺陷以及多场景下的使用方法、针对可能出现的问题进行的了分析,根据业务场景从单节点过渡到主从复制、哨兵集群、分片集群。
2023-01-10 16:53:19 914
原创 搭建Redisson流程以及解读MutilLock源码解决分布式锁的主从一致性问题
本文主要介绍了Redisson服务端采用docker的方式进行搭建,并且详细介绍了Redisson提供的MutilLock的源码执行流程
2023-01-09 09:30:01 1017
原创 Redisson获取/释放分布式锁流程中使用的方法以及watchDog机制相关源码分析
本文通过解读源码的方式详细介绍了通过Redisson获取/释放分布式锁的流程以及执行watchDog机制的过程,充分解读了Redisson如何解决使用redis set nx ex 命令带来的锁不可重入、锁超时释放以及锁误删的问题
2023-01-06 13:00:25 1574
原创 @EnableAutoConfiguration中@Import注解对于ImportSelector与DeferredImportSelector接口实现类的细节与区别
@EnableAutoConfiguration中@Import注解对于ImportSelector与DeferredImportSelector接口实现类的细节与区别,包括对AutoConfigurationImportSelector对于@Import注入的自动配置流程分析
2022-12-14 17:58:31 568
原创 阿里云镜像仓库org.springframework.boot:spring-boot-maven-plugin版本更新导致打包失败问题&&class file version 61.0 适配失败
由于生产环境的pom文件没有指定该插件的版本号,导致一直拉取的都是最新的版本,而最新的spring-boot-maven-plugin 支持Class编译版本号为61,只有jdk17才能够适配。maven打包失败的最主要问题就是,生产环境构建服务时使用了阿里云镜像,昨晚阿里云更新最新的 spring-boot-maven-plugin 插件版本如下。解决方案:指定spring-boot-maven-plugin verion号,与当前环境jdk版本适配就行。Maven 打包时出错,完整错误日志如下。
2022-11-25 15:08:32 5981 3
原创 jdk 线程池任务提交机制&&任务执行流程详解
线程池执行任务主要有两种方式:execute()、submit():execute() 执行任务时,如果有异常没有被捕获会直接抛出 submit() 执行任务时,会吞并异常,除非调用get() 获取计算结果,当抛出异常时会捕获异常。
2022-11-24 17:55:45 980
原创 JUC线程池——newSingleThreadExecutor源码解析&&JDK提供线程池ThreadPoolExecutor执行任务流程解析
初始化的线程池中只有一个线程,如果该线程异常结束,会重新创建一个新的线程继续执行任务,唯一的线程可以保证所提交任务的顺序执行;由于使用了无界队列, 所以SingleThreadPool永远不会拒绝, 即饱和策略失效;本文对newSingleThreadExecutor执行流程结合源码进行详细的分析,让读者更加了解并发下newSingleThreadExecutor的执行流程,以及FutureTask的实现
2022-11-19 14:04:56 770
原创 centos7服务器升级ssh版本&&修复ssh漏洞 CVE-2016-20012、 CVE-2021-41617
ssh漏洞通过升级ssh版本进行有效规避
2022-11-11 17:13:56 4237
原创 深入分析 Java对象进入老年代的四种方式
Java对象进入老年代的四种方式,包括幸存区不能容纳大对象、对象存活年龄达到设定年龄阈值、对象判定为大对象、动态年龄分配这四种情况,其中带有jvm参数解析
2022-11-04 11:23:09 2928
原创 什么时候字面量会主动加入到stringtable&&new String(“xx“)到底创建了几个对象实例
先来几道题,看看大家是否都能答对代码块1如果上面的题你都能答对,那下面的题呢代码块2为什么s1都能通过intern()方法主动放入StringTable中,而ab却不能呢?下面我将通过字节码的角度为大家分析。
2022-10-03 10:55:50 591
原创 JSONObject的底层原理&&常见方法的使用以及项目中的使用场景
JSONObject中是可以无限套娃的,只是每嵌套一次,就需要给除最外面的JSONObject以外的其他JSONObject中添加唯一的key,如果key重复了,会按照Map的处理方式去解决,一般都是判断如果key的hashCode相同,并且equals返回true,则会新值替换旧值,并且返回旧值,所以这里涉及到了数据覆盖的问题,需谨慎处理key是否相同的情况。最常见的就是使用getString,这也是我们在工作中经常使用的方式,可以发现最终都是通过map来完成一些列操作。...
2022-08-09 09:29:59 2146
原创 HashMap的内部类Node与Map的内部类Entry的关系以及Node与Entry、EntrySet三者之间的关系
Entry这个集合中包含两类,一类是Set类型的KeySet,用来存放Key值,另一类是存放在value值,然后他们里边各自的值存放的是地址,一个指向真正Node节点的key和value的地址;
2022-06-16 13:52:09 5109 9
原创 e.hash & oldCap == 0 详细解读
e.hash & oldCap == 0 HashMap源码中,数组扩容时判断新旧数组扩容后索引下标位置是否对齐的一个重要计算方法
2022-06-15 15:53:35 2001
原创 tab[i = (n - 1) & hash] 的详细解读
tab[i = (n - 1) & hash] 的详细解读,在HashMap底层源码中遇到类似取余操作的,计算数据在数组中的下标位置,本文详解其原理
2022-06-15 15:46:10 1667
原创 h = key.hashCode()) ^ (h >>> 16) 详细解读以及为什么要将hashCode值右移16位并且与原来的hashCode值进行异或操作
h = key.hashCode()) ^ (h >>> 16) 详细解读以及为什么要将hashCode值右移16位并且与原来的hashCode值进行异或操作
2022-06-14 11:35:23 6113 4
原创 nginx实现https协议请求重写成http教程&&OpenSSL生成ssl证书
想要实现https协议请求重写成http协议请求的途径有多种,本文采用的使用nginx的反向代理来实现
2022-06-09 15:30:08 1251
原创 nginx实现不停机添加新模块 && make upgrade的使用
1、查看当前配置了哪些模块,并备份出来2、切换到安装目录,新增要安装的新模块3、在~/nignx/core/nignx-1.16.1/路径下进行编译4、复制编译好的objs/nginx文件到/usr/local/sbin
2022-06-09 11:31:47 1149
原创 springboot整合redis实现HyperLogLog统计文章浏览量&&使用过期策略完成数据库同步
springboot整合redis实现HyperLogLog统计文章浏览量&&使用过期策略完成数据库同步本文目录springboot整合redis实现HyperLogLog统计文章浏览量&&使用过期策略完成数据库同步1、为什么选择Redis中的Hyperloglog存储2、什么是基数3、实战中使用HyperLogLog统计文章浏览量1、搭建环境2、核心代码1、发送消息2、消息接受者3、消息处理4、监听key过期并写入数据库创建监听类定时任务1、为什么选择Redis中的Hy
2022-05-21 15:38:53 2199
原创 工作中常用git命令一览以及git stash使用场景详解
本文目录git log [分支名]git branch 查看本地库分支git log 分支名 查看分支信息git stash 暂存未提交数据git checkout 分支git pull origin mastergit branch -vvgit branch -vgit branch --mergedgit branch --no-mergedgit branch -rgit branch -agit branch -d 分支名git branch -D 分支名git branch -m oldNa
2022-05-18 10:32:21 445
原创 设计模式期末考试复习
设计模式本文目录设计模式1、设计模式的分类1、根据目的2、根据范围3、面向对象设计原则1、开闭原则2、里氏替换原则3、依赖倒转(置)原则定义4、单一职责原则5、接口隔离原则6、迪米特法则7、合成复用原则创建型模式概述简单工厂类不符合开闭原则工厂方法符合开闭原则优缺点抽象工厂开闭原则倾斜性优缺点原型深克隆与浅克隆优缺点单例模式关键结构型模式概述适配器模式类适配器对象适配器缺省适配器优缺点组合模式透明组合模式安全组合模式装饰模式概述透明装饰模式半透明装饰模式优点缺点外观模式概述优点缺点抽象外观适用环境行为型模
2022-05-11 22:15:46 6139
原创 微服务网关(Zuul)聚合Swagger以及Swagger注解的使用
微服务网关聚合Swagger本文目录微服务网关聚合Swagger1、Zuul网关中的配置1、导入依赖2、application.yml添加配置3、配置扫描微服务swagger文档4、配置Swagger2、微服务中的配置1、导入依赖2、配置Swagger3、SpringSecurity环境放行Swagger4、Oauth2环境放行Swagger5、效果展示3、Swagger实战场景1、自定义注解实现接口跳过Swagger扫描2、Swagger注解的使用1、Zuul网关中的配置1、导入依赖<!--
2022-05-05 23:01:22 1126
原创 SpringBoot整合ES——ElasticSearch&&多种复杂查询api的使用
ElasticSearch阅读本文前请注意,本文仅仅展示springboot整合es中大部分场景api的操作,对其概念并没有过多的阐述,想获得更完整的文档,请查阅官方文档https://www.elastic.co/cn/elasticsearch/在介绍使用之前,先对比一下es与mysql关键字术语描述的比较吧1、配置环境1、导入依赖<dependency> <groupId>org.springframework.boot</groupId>
2022-05-03 23:15:14 3773
原创 SpringBoot整合RabbitMQ 5种模式的注解绑定
1、导入依赖<!--AMQP依赖,包含RabbitMQ--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId></dependency><!--对象转换--> <dependency> <group
2022-05-03 20:03:15 4003
原创 java.lang.IllegalArgumentException: Plugin [analysis-pinyin] was built for Elasticsearch version 7.1
分词器跟eleasticsearch版本支持问题解决完整错误日志java.lang.IllegalArgumentException: Plugin [analysis-pinyin] was built for Elasticsearch version 7.12.1 but version 7.14.0 is running解决方法在改分词器文件夹下找到xxx.propertieselasticsearch.version=改成你当前服务器es的版本...
2022-03-20 00:00:00 1292
转载 Centos7修改系统时间和硬件时间
安装在虚拟机上的CentOS7的时间分为系统时间和硬件时间。二者都修改,重启系统才会永久生效。修改步骤如下1.查看当前系统时间 date2.修改当前系统时间 date -s "2018-2-22 19:10:303.查看硬件时间 hwclock --show4.修改硬件时间 hwclock --set --date “2018-2-22 19:10:30”5.同步系统时间和硬件时间 hwclock --hctosys6.保存时钟 clock -w7.重启系统后便发现系统时间被修改了...
2022-03-18 17:07:18 5687
原创 Docker容器部署项目少了8个小时,问题解决&&Dockerfile修改linux时区
Docker容器部署项目少了8个小时,问题解决&&Dockerfile修改linux时区情景回顾打包好的jar包通过Dockerfile构建成一个镜像后,通过docker-compose.yml文件实现对 Docker 容器集群的快速编排,当这一切都很顺利进行时,发现在走业务的时候,产生的时间戳存放在通过Docker启动的mysql容器中,时间比当前系统时间少了8个小时;可能原因如下:1、时区问题在数据库连接的url中如果设置了serverTimezone=UTC,连接时不报错,但
2022-03-03 16:57:51 3001
原创 springboot项目导入maven插件并引入mainClass后依旧找不到主清单属性——问题解决
springboot项目导入maven插件并引入mainClass后依旧找不到主清单属性在springboot项目中,直接打包是没办法直接在服务器上java -jar xxx.jar直接运行的,必须添加maven部署插件<!--引入部署插件--><build> <plugins> <plugin> <groupId>org.springframework.boot</groupId>
2022-01-26 12:56:26 769
原创 IDEA2020.1 解决关于nacos不识别bootstrap.yml格式的问题
IDEA2020.1 关于nacos不识别bootstrap.yml格式的问题解决方法1、添加springcloud-starter-bootstrap依赖<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> <version>3.0.3&l
2022-01-20 20:38:56 2746 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人