自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

C3Stones

求知若渴,虚心若愚!

  • 博客(184)
  • 收藏
  • 关注

原创 欢迎转载

  创造分享,共同成长!  本人博客(https://blog.csdn.net/qq_48008521)里边的所有内容均可以转载、学习或商用,但因本人博客而引起的第三方知识产权问题或其他问题,概不负责!更多博客内容请浏览源博客:https://www.cnblogs.com/cao-lei/...

2021-04-29 10:23:35 129

原创 本博客为同步内容,请移至源博客查看

特此声明:本博客为同步内容,请移至源博客查看。https://www.cnblogs.com/cao-lei/

2020-08-10 17:03:49 123

原创 Guava中的增强Map - Table、BiMap、Multimap、RangeMap、ClassToInstanceMap

1. 简介  日常开发中使用Map时经常会遇到很多复杂的处理场景,例如:多个键的Map、不仅可以根据键获取值也可以根据值获取键且不用遍历、重复键的Map、数字等范围内映射相同的值、内存中缓存对象等,Guava提供了以上场景的解决方案。场景解决方案具体实现多个键的MapTableHashBasedTable、TreeBasedTable、ImmutableTable...

2023-11-02 20:20:00 526

原创 JSONSQL:使用SQL过滤JSON类型数据(支持多种数据库常用查询、统计、平均值、最大值、最小值、求和语法)...

1. 简介  在开发中,经常需要根据条件过滤大批量的JSON类型数据。如果仅需要过滤这一种类型,将JSON转为List后过滤即可;如果相同的条件既想过滤数据库表中的数据、也想过滤内存中JSON数据,甚至想过滤Elasticsearch中的数据,那可使用本博客中的方案,使用标准的SQL语法实现多种数据源中的查询或聚合操作。2. JSONSQL能力总览能力明细支持的数据库M...

2023-06-01 19:45:00 1825

原创 ReflectASM高性能反射Java库

1. 简介  在日常开发中,经常需要使用反射操作类中的属性或方法。ReflectASM是一个非常小的 Java 库,它提供高性能反射能力。  Github地址:https://github.com/EsotericSoftware/reflectasm2. 官方性能报告3. 用法ReflectASM仅可访问public属性和方法。pom引入依赖<dependency&g...

2023-04-07 22:03:00 747

原创 【并发编程】Java7 - ForkJoin,将大任务拆分成小任务

1. 简介  Java7提供了可以将大任务拆分成小任务执行再合并结果的框架——Fork/Join。其中,将大任务拆分成足够执行的小任务并发执行的过程称为Fork,将这些小任务结果整合后形成最终的结果的过程称为Join。  Fork/Join框架的具体体现为ForkJoinTask抽象类,该类继承了Future,运行在ForkJoinPool线程池中。该类有三个是实现类:RecursiveAc...

2023-04-07 22:01:00 636

原创 【并发编程】Guava - ListenableFuture,避免Future获取阻塞问题,增加回调

使用Future的实现类FutureTask想要实现一旦获取到结果立即执行后续的业务,就需要阻塞主线程等待结果或者使用其他线程循环的判断任务是否结束,这样导致性能较低,且代码负责。ListenableFuture在Future的基础上增加了任务执行后自动调用后续业务处理的逻辑,方便我们使用。通过结果可以看出,只要有任务失败,则不会执行回调方法中成功的处理逻辑,而是仅执行回调方法中失败的处理逻辑。),Guava提供的ListenableFuture支持不阻塞主线程进行任务执行完成后的业务处理。

2023-03-28 16:56:00 951

原创 【并发编程】Java8 - CompletableFuture,增强版Future

1. 简介  CompletableFuture是Java8的新特性,在Future基础上,增加流式计算、函数式编程、完成通知、自定义异常、多个Future组合处理等能力,使得在多线程协同处理时更加顺利。2. 相关博客  【面试专栏】Java5 - Future,基本使用【面试专栏】Java5 - CompletionService,将异步执行与获取结果分离【面试专栏】Guava - Li...

2023-03-28 16:56:00 711

原创 【并发编程】Java5 - CompletionService,将异步执行与获取结果分离

当获取多个任务的结果时,会从BlockingQueue中调用take()方法获取到Future再调用get()方法获取结果,如果暂时没有任务执行完成,则阻塞直到有任务执行完成并保存到BlockingQueue中,这样获取到结果的顺序会按照任务执行快慢的顺序依次返回。),CompletionService除了支持并行执行任务并获取结果外,还支持优先获取到最快执行的任务结果,但CompletionService要求并行执行的任务是无序的。通过结果可以看出,最快的任务执行完成后结束。

2023-03-28 16:55:00 308

原创 【并发编程】Java5 - Future,基本使用

1. 简介  在使用多线程开发中,不论是继承Thread类还是实现Runnable接口方式,都无法非常方便的获取异步任务执行的结果。在JDK1.5提供了和Runnable类似但多了返回值的Callable接口,通过Future接口实现类和Callable接口方式,可以非常灵活的进行多线程操作,例如:获取结果、指定超时时间获取结果、取消任务、判断是否取消、判断是否完成等。2. Future接口...

2023-03-28 16:54:00 1457

原创 【并发编程】Java创建多线程的五种方式

1. 继承Thread类import lombok.extern.slf4j.Slf4j;import org.junit.jupiter.api.Test;/** * 继承Thread类创建多线程单元测试 * * @author CL */@Slf4jpublic class ThreadTest { @Test public void testThrea...

2023-03-28 16:53:00 132

原创 【并发编程】SpringBoot创建线程池的六种方式

* 优点:可以自定义参数*

2023-03-21 17:31:38 6344 1

原创 SpringBoot自主监控,获取服务信息、JVM、CPU、内存、磁盘、堆、线程、GC等

1. 简介在日常开发中一些关键的业务服务,期望在高并发状态下可以正常工作,或在异常情况时可以记录当时的性能信息,所以就需要进行监控。常见的监控例如:Prometheus可以实现这个需求,如果需要更加简单方便的自主监控能力,可以引入本博客中的方案。2. 相关博客Promtail+Loki+Grafana搭建轻量级日志管理平台SpringBoot 2.x + Prometheus + ...

2023-03-09 21:21:00 6190 6

原创 SpringBoot + Druid + Mybatis-Plus + Mysql 实现数据库监控

1. 简介在日常的WEB开发中都会使用数据库存储信息。大多数情况我们只是使用了数据库,而无法感知业务对数据库的压力,从而无法有目的的提升性能。在使用数据库时,都会选用常见的C3P0、DBCP、Hikari、Druid连接池,虽然SpringBoot官方强调Hikari性能更好,但我更倾向于功能更加全面的Druid连接池。Druid是阿里巴巴生态中的一员,除了提供数据库连接池,还提供SQL解...

2023-03-08 17:30:00 626

原创 Java读取文件的几种方式

1. 使用流读取文件public static void stream() { String fileName = "D:\\test.txt"; final String CHARSET_NAME = "UTF-8"; List<String> content = new ArrayList<>(); try (BufferedRe...

2023-03-02 12:40:00 12026

原创 SpringBoot + Lock4j实现高性能分布式锁

1. 简介在分布式业务开发中,很多场景都需要添加分布式锁。在具体实践过程中,研发人员都需要自行实现,导致实现方式不统一,代码风格迥异,难以维护。在Mybatis-Plus生态中,Lock4j提供了支持redission、redisTemplate、zookeeper的分布式锁组件,简单易用,功能强大,扩展性强。Gitee地址:https://gitee.com/baomidou...

2023-02-21 18:51:00 1653

原创 SpringBoot + Disruptor实现高并发内存消息队列

1. 简介  Disruptor是英国外汇交易公司LMAX开发的一个高性能队列,研发的初衷是解决内存队列的延迟问题(在性能测试中发现竟然与I/O操作处于同样的数量级)。基于Disruptor开发的系统单线程能支撑每秒600万订单,2010年在QCon演讲后,获得了业界关注。  Disruptor区别于Kafka、RabbitMQ等消息队列,它是一个高性能的线程间异步通信的框架,即在同一个JV...

2023-02-10 17:29:00 2268

原创 DB SQL 转 ES DSL(支持多种数据库常用查询、统计、平均值、最大值、最小值、求和语法)...

1. 简介  日常开发中需要查询Elasticsearch中的数据时,一般会采用RestHighLevelClient高级客户端封装的API。项目中一般采用一种或多种关系型数据库(如:Mysql、PostgreSQL、Oracle等) + NoSQL(如:Elasticsearch)存储方案;不同关系数据库可以采用Mybatis-Plus方案屏蔽数据库的方言差异,我们期望可以像操作关系型数据库...

2023-01-20 16:54:00 3304

原创 Promtail+Loki+Grafana搭建轻量级日志管理平台

1. 简介  现在几乎所有的服务都是分布式部署,在定位环境问题时,往往需要在不同的主机上查看日志,并且对于某些行业来说,客户不能接受通过远程登录服务器查看日志。因此,需要一个统一的日志管理平台,可以集中查看日志,并对日子进行过滤、检索、定期清除等。2. 技术选型  集成日志采集、存储、展示功能的管理平台有很多成熟的解决方案,例如:Logstash + Elasticsearch + Kib...

2023-01-20 15:27:00 2453

原创 SpringBoot + Caffeine实现本地缓存(内存缓存)

1. Caffeine简介  Caffeine是一个基于Java8开发的提供了近乎最佳命中率的高性能的缓存库。借鉴Google Guava和ConcurrentLinkedHashMap的经验,实现内存缓存。  缓存和ConcurrentMap有点相似,但还是有所区别。最根本的区别是ConcurrentMap将会持有所有加入到缓存当中的元素,直到它们被从缓存当中手动移除。但是,Caffein...

2022-09-07 20:35:00 2320

原创 springboot+mybatis-plus-join+mysql实现连表查询

1. 简介  Mybatis是目前比较主流的持久层框架,使用非常广泛。Mybatis-Plus是基于Mybatis增强工具包,越来越受到开发人员的喜爱。  在使用Mybatis-Plus开发时,简单的crud可以直接使用其提供的接口或使用条件构造器。但对于关联表的查询,不论Mybatis还是Mybatis-Plus都需要自定义sql实现。  Mybatis-Plus-Join基于Mybat...

2022-08-23 23:28:00 1938 2

原创 maven-mvnd:maven全新构建插件,提高性能

1. 简介maven-mvnd是maven的子项目,并非一个全新的构建工具,而是基于maven提供的一个扩展工具。Apache Maven团队从Gradle和Takari(Maven生命周期优化器)中获得灵感对Maven进行了强化,衍生出maven-mvnd项目,目的是为了提升maven的构建性能。Github地址:https://github.com/apache/maven-mv...

2021-12-27 14:56:00 753 2

原创 SpringBoot + LibreOffice + Hutool 实现附件预览简单示例

1. 简介在日常开发中,经常会遇到需要预览附件的需求,如果附件类型为图片、文本、PDF或者网页文件,则直接可以在浏览器预览;如果附件类型为Word、Excel、PPT等文件,则需要通过工具转换为PDF后在浏览器预览。本博客使用LibreOffice和Hutool实现文件预览简单示例。LibreOffice官网:https://zh-cn.libreoffice.org/2. ...

2021-10-14 12:56:00 876 3

原创 Weblogic 12c部署SpringBoot 2.x简单示例

1. 简介  WebLogic是美国Oracle公司出品的一个application server,确切的说是一个基于JAVAEE架构的中间件,WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。2. 相关博客  Window...

2021-08-05 12:43:00 455

原创 Windows安装Weblogic 12c并配置

1. 简介  WebLogic是美国Oracle公司出品的一个application server,确切的说是一个基于JAVAEE架构的中间件,WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。2. 下载介质方式一  访...

2021-08-04 19:21:00 1449

原创 Dubbo-Admin:Dubbo控制台搭建

1. 简介  dubbo-admin是dubbo的管理工具,用来管理生产者和消费者。主要功能包含:服务查询、服务治理、服务测试。接口文档、服务统计、配置管理等功能。  最新版本的dubbo-admin才有前后端分离,接口使用RESTful规范。本文参考其Github(https://github.com/apache/dubbo-admin/)搭建dubbo控制台管理工具。2. 相关博客...

2021-07-30 11:12:00 151

原创 SpringBoot + Dubbo + Zookeeper +Mybatis-Plus + Mysql 搭建简单示例工程

1. Dubbo简介  Apache Dubbo 是一款微服务开发框架,它提供了 RPC通信 与 微服务治理 两大关键能力。这意味着,使用 Dubbo 开发的微服务,将具备相互之间的远程发现与通信能力, 同时利用 Dubbo 提供的丰富服务治理能力,可以实现诸如服务发现、负载均衡、流量调度等服务治理诉求。同时 Dubbo 是高度可扩展的,用户几乎可以在任意功能点去定制自己的实现,以改变框架的默...

2021-07-29 18:03:00 497

原创 windows安装zookeeper3.7.x

1. 简介  ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。  ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。2. 下载安装...

2021-07-28 20:58:00 558

原创 关于博客中项目源码等资源下载问题

  本博客中所有资源均为免费,可以自由下载进行学习或者应用到自己的项目或公司项目。今天发现我博客中所有的项目地址点击后都跳转到别人的资源下载页面,咨询后客服回复如下:保护知识产权从我做起,抵制一切白嫖滥竽充数行为!...

2021-07-15 16:50:39 198

原创 SpringBoot+AOP实现记录操作日志和异常日志,并保存到数据库

1. 简介项目中对日志的收集往往是非常重要的,不仅方便开发人员快速定位问题,而且越来越多的客户需要查询用户行为日志、用户审计日志等。因此,在收集日志时,不仅要考虑功能实现,而且要考虑可靠性、稳定性和不耦合性。在每个操作和每个方法都加上日志处理肯定时不现实的,因此使用Spring提供的AOP原理就变得非常方便。定义好切面以及切点之后,可以非常方便的打印、收集或保存日志,不影响业务性能。...

2021-07-04 16:59:00 5794

原创 【并发编程】Java 阻塞队列

1. 简介  阻塞队列(BlockingQueue)是Java中一种线程安全的存取队列,适用于生产者消费者场景,支持两种附件操作:生产者线程不断的往阻塞队列中放入数据,直到队列放满为止。队列放满后,生产者线程阻塞等待消费者线程获取数据。消费者线程不断的从阻塞队列中火球数据,直到队列为空。队列为空后,消费者线程阻塞等待生产者线程放入数据。2. BlockingQueue提供四种不同的处...

2021-06-20 15:44:00 168

原创 Linux安装Jenkins并构建SpringBoot工程

1. 简介  Jenkins是一个独立的开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。前身是Hudson是一个可扩展的持续集成引擎。可用于自动化各种任务,如构建,测试和部署软件。  官网:https://www.jenkins.io/zh/主要用于:持续、自动地构建/测试软件项目,如CruiseC...

2021-05-15 15:47:00 301

原创 Linux安装git

1. yum源安装(推荐)# 检查是否已经安装git --version# 如果已经安装,先卸载yum -y remove git# 安装gityum -y install git# 检查是否安装成功git --version2. 源码安装下载介质GitHub下载(推荐):https://github.com/git/git/releaseswget命令下载:w...

2021-05-14 13:50:00 75

原创 Linux安装Maven并配置环境变量

1. 下载介质官网下载http://maven.apache.org/download.cgi百度网盘  链接:https://pan.baidu.com/s/1zR-VsP0fDFCb3ptp7ez3iw  提取码:xnn5wget命令下载(推荐)wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.8...

2021-05-14 13:46:00 336

原创 Linux安装Jdk1.8并配置环境变量

1. yum源安装(推荐)# 检查是否已经存在java相关命令rpm -qa|grep javarpm -qa|grep jdkrpm -qa|grep gcj# 如果需要卸载rpm -qa | grep java | xargs rpm -e --nodeps# 检索Java1.8源列表yum list java-1.8*# 安装Java1.8yum install ...

2021-05-14 13:08:00 191

原创 LocalDateTime工具类:根据当前、周、月、季度、半年、年等维度获取时间

1. 简介  Java8提供了全新的日期处理包(java.time.*),根据Java8日期新特性封装日期时间工具类LocalDateTimeUtils。2. 相关博客  Java 8 新特性:日期处理3. 工具类方法目录说明方法名称当前时间LocalDateTimeUtils.now()Date 转 LocalDateTimeLocalDateTimeUt...

2021-05-05 16:11:00 7516 5

原创 SpringBoot读取配置文件参数的三种方式

1. 简介  在开发中,经常会遇到需要读取配置文件参数的情况,因此需要开发人员能优雅的读取配置文件参数值。2. 配置文件  在resource目录下新建配置文件application.yml:product: name: Demo author: C3Stonessys: module: - code: core enable: true ...

2021-04-25 22:59:00 8678

原创 SpringBoot解决跨域的三种方式

1. 简介  随着现在前后端分离项目愈发普及,面临第一步的问题即为跨域。一般的URL地址(例如:https://www.cnblogs.com/cao-lei/)由协议 + 域名(子域名 + 主域名) + 端口号 + 资源地址组成,当协议、域名(子域名 + 主域名)、端口号这三项中有一项不同,则认为为不同的域,不同的域互相请求资源,即为跨域。  为了解决这一问题,需要引入CORS(Cross...

2021-04-01 21:37:00 144

原创 SpringBoot集成阿里缓存框架Jetcache代替Spring Cache

1. 简介  JetCache是基于Java开发的统一API和使用简单的缓存框架,它提供的注解比Spring Cache中的注解更加强大。JetCache中的注释支持原生TTL,两级缓存和分布式自动刷新,也可以手动编写实例。目前有四个实现:RedisCache、TairCache(在Github上不是开源的)、CaffeineCache(在内存中的)和一个简单的LinkedHashMapCac...

2021-03-08 21:57:00 775

原创 SpringBoot 2.x + Prometheus + Grafana 实现应用监控

1. 简介  提到监控系统,zabbix具有绝对的地位,它提供分布式系统监视以及网络监视功能的企业级的开源解决方案,能监视各种网络参数,保证服务器系统的安全运营,并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。但是针对于容器监控却有点力不从心,因此出现了Prometheus。Prometheus是一个开源的服务监控系统时间序列数据库,通过Http请求拉取被监控的服务暴露的端点公开的度量列表和值,然后存放到时序数据库中。最好再通过 Grafana的Dashboard进行图表展示分析和告警。

2021-02-26 09:48:05 551

空空如也

空空如也

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

TA关注的人

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