是它,是它,就是它,并发包的基石; 一、概述 闲来不卷,随便聊一点。 一般情况下,大家系统中至少也是JDK8了,那想必对于JDK5加入的一系列功能并不陌生吧。那时候重点加入了java.util.concurrent并发包,我们简称为JUC。JUC下提供了很多并发编程实用的工具类,比如并发锁lock、原子操作atomic、线程池操作Executor等等。下面,我对JUC做了整理,大致分为下面几点: 基于JDK8,今天重点来聊下JUC并发包下的一个类,AbstractQueuedSynchronizer。 首先,浅显的从名字上看,抽象的队列同步器;实际上,这名字也跟它的作用如出一辙。抽象,即...

  LXP9hq8vgTZc   2023年11月01日   27   0   0 Java

目录 一、背景 二、Future接口 1、入门案例 2、Future接口 三、CompletableFuture类 1、基础说明 2、核心方法 2.1实例方法 2.2计算方法 2.3结果获取方法 2.4任务编排方法 2.5异常处理方法 3、线程池问题 四、CompletableFuture原理 1、核心结构 2、零依赖 3、一元依赖 4、二元依赖 5、多元依赖 五、参考源码 主打一手结果导向; 一、背景 在系统中,异步执行任务,是很常见的功能逻辑,但是在不同的场景中,又存在很多细节差异; 有的任务只强调「执行过程」,并不需要追溯任务自身的「执行结果」,这里并...

  LXP9hq8vgTZc   2023年11月01日   33   0   0 Java

统一抽取,制定规范; 一、概述 模板方法模式,又叫模板模式,属于23种设计模式中的行为型模式。在抽象类中公开定义了执行的方法,子类可以按需重写其方法,但是要以抽象类中定义的方式调用方法。总结起来就是:定义一个操作的算法结构,而将一些步骤延迟到子类中。在不改变算法结构的情况下,子类能重定义该算法的特定步骤。 下面是模板模式的UML图,抽象类(AbstractClass)定义公共的步骤和方法,依次调用实际的模板方法,当然每个方法可以是抽象方法(需交给子类实现),也可以是提供默认的方法。具体的类(ConcreteClass)可以重写所有的方法,但是不能改变抽象类中定义的整体结构。 二、入门案例...

  LXP9hq8vgTZc   2023年11月01日   39   0   0 Java

接口不能用?行,我帮你适配 一、概述 适配器模式(Adapter),是23种设计模式中的结构型模式之一;它就像我们电脑上接口不够时,需要用到的拓展坞,起到转接的作用。它可以将新的功能和原先的功能连接起来,使由于需求变动导致不能用的功能,重新利用起来。 上图的Mac上,只有两个typec接口,当我们需要用到USB、网线、HDMI等接口时,这就不够用了,所以我们需要一个拓展坞来增加电脑的接口 言归正传,下面来了解下适配器模式中的角色:请求者(client)、目标角色(Target)、源角色(Adaptee)、适配器角色(Adapter),这四个角色是保证这个设计模式运行的关键。 clie...

  LXP9hq8vgTZc   2023年11月01日   46   0   0 Java

程序式阴影:为什么不报错? 一、简介 在程序开发的过程中,异常处理从来都是一个复杂的维度,无论是新手还是经验老到的选手,在编码时都会面对各种异常情况; 程序中的异常可以反映系统的缺陷和待优化的点,并且是无法完全避免的,如何处理异常和降低异常出现的频率,是系统质量的基础保障; 随着分布式架构的流行,各种复杂的请求链路给异常处理带来了巨大的麻烦,需要全面的监控来定位原因,才能快速的优化和解决; 二、异常体系 不论是JDK基础,还是各类组件,在源码中都涉及大量的异常封装,从而精确的反映出描述信息,先来看看Java中的异常体系基础; Throwable:是所有错误「Error」和异常「Excep...

  LXP9hq8vgTZc   2023年11月01日   78   0   0 Java

有多久,没有发过短信了? 一、背景简介 在常规的分布式架构下,「消息中心」的服务里通常会集成「短信」的渠道,作为信息触达的重要手段,其他常用的手段还包括:「某微」、「某钉」、「邮件」等方式; 对于《消息中心》的设计和实现来说,在前面已经详细的总结过,本文重点来聊聊消息中心的短信渠道的方式; 短信在实现的逻辑上,也遵循消息中心的基础设计,即消息生产之后,通过消息中心进行投递和消费,属于典型的生产消费模型; 二、渠道方对接 在大部分的系统中,短信功能的实现都依赖第三方的短信推送,之前总结过《三方对接》的经验,这里不再赘述; 但是与常规第三方对接不同的是,短信的渠道通常会对接多个,从而应对各种...

  LXP9hq8vgTZc   2023年11月01日   40   0   0 Java

目录 一、背景 二、持续集成 三、K8S架构 1、核心组件 2、分层结构 3、核心能力 3.1发现与负载 3.2调度 3.3自动伸缩 四、应用案例 1、服务部署 2、交互流程 五、参考源码 整体上理解流程和原理; 一、背景 基于分布式的架构中,需要管理的服务是非常多的,无论是服务的数量还是体系划分; 从服务的能力上看,可以进行分层管控,只是其中有相当一部分服务层,改动更新的频率很低,所以感知也不明显; 就以自己当下参与研发的系统来说; 通过K8S进行管理的服务近百个,这中间有部分服务采用集群模式,即便是这个规模的系统,也几乎不可能依赖纯人工运维的形式,自动化流...

  LXP9hq8vgTZc   2023年11月01日   25   0   0 Java

服务发现与负载均衡。 一、背景 在微服务架构中,这里以开发环境「Dev」为基础来描述,在K8S集群中通常会开放:路由网关、注册中心、配置中心等相关服务,可以被集群外部访问; 对于测试「Tes」环境或者生产「Pro」环境,出于安全或者环境隔离性来考虑,在正常情况下只会开放网关服务,而「注册、配置」中心并不会对外暴露; 对于架构中的其它业务服务一般不会对外开放,在K8S集群内部服务间是可以正常通信的,对于「Dev」环境来说,研发会使用「注册、配置」中心,网关是系统的访问入口; 在K8S集群中,通过Service组件,可以快速简单的实现服务发现和负载均衡; 二、Service组件 1、简介 在...

  LXP9hq8vgTZc   2023年11月01日   52   0   0 Java

绕不开的Config配置; 一、背景 在自动化流程中,对于一个应用来说,从开发阶段的配置管理,到制作容器镜像,再到最后通过K8S集群发布为服务,整个过程涉及到的配置非常多; 应用环境:通常是指代码层面的依赖配置,以常用的Nacos来说,通常会涉及框架、组件、自定义等几个层面的配置管理; 运行环境:以微服务架构来说,实际环境中需要管理多个应用的服务发布,在整个过程中必然会存在很多配置的管理,比如应用的资源分配、不同环境交互时的身份认证、敏感信息的安全管理等; 不论是应用还是运行层面的配置,都会涉及到一个基本的逻辑:配置可以抽取出来单独管理,在流程中直接引入该配置即可; 二、ConfigMa...

  LXP9hq8vgTZc   2023年11月01日   156   0   0 Java

目录 一、SPI简介 1、概念 2、入门案例 2.1定义接口 2.2两个实现类 2.3配置文件 2.4测试代码 二、原理分析 1、ServiceLoader结构 2、iterator迭代方法 3、hasNextService方法 4、nextService方法 三、SPI实践 1、Driver驱动接口 2、Slf4j日志接口 四、参考源码 基于【JDK1.8】 一、SPI简介 1、概念 SPI即service-provider-interface的简写; JDK内置的服务提供加载机制,可以为服务接口加载实现类,解耦是其核心思想,也是很多框架和组件的常用手段;...

  LXP9hq8vgTZc   2023年11月01日   67   0   0 Java

目录 一、背景 二、环境搭建 1、工程结构 2、框架依赖 3、环境配置 三、入门案例 1、测试接口 2、全局异常 3、日志打印 3.1日志配置 3.2日志打印 四、打包运行 五、参考源码 技术和工具「!喜新厌旧」 一、背景 最近在一个轻量级的服务中,尝试了最新的技术和工具选型; 即SpringBoot3,JDK17,IDEA2023,Navicat16,虽然新的技术和工具都更加强大和高效,但是适应采坑的过程总是枯燥的; 【环境一览】 首先框架主体从SpringBoot2升级到SpringBoot3,Java基础环境从JDK8升级到JDK17; 技术升级都到这步...

  LXP9hq8vgTZc   2023年11月01日   77   0   0 Java

标签:切面.调度.邮件.监控; 一、简介 在上篇《SpringBoot3基础》中已经完成入门案例的开发和测试,在这篇内容中再来看看进阶功能的用法; 主要涉及如下几个功能点: 调度任务:在应用中提供一定的轻量级的调度能力,比如方法按指定的定时规则执行,或者异步执行,从而完成相应的代码逻辑; 邮件发送:邮件作为消息体系中的渠道,是常用的功能; 应用监控:实时或定期监控应用的健康状态,以及各种关键的指标信息; 切面编程:通过预编译方式和运行期动态代理实现程序中部分功能统一维护的技术,可以将业务流程中的部分逻辑解耦处理,提升可复用性; 二、工程搭建 1、工程结构 2、依赖管理 <!-基础框...

  LXP9hq8vgTZc   2023年11月01日   77   0   0 Java

标签:Rest.拦截器.swagger.测试; 一、简介 基于web包的依赖,SpringBoot可以快速启动一个web容器,简化项目的开发; 在web开发中又涉及如下几个功能点: 拦截器:可以让接口被访问之前,将请求拦截到,通过对请求的识别和校验,判断请求是否允许通过; 页面交互:对于服务端的开发来说,需要具备简单的页面开发能力,解决部分场景的需求; Swagger接口:通过简单的配置,快速生成接口的描述,并且提供对接口的测试能力; Junit测试:通过编写代码的方式对接口进行测试,从而完成对接口的检查和验证,并且可以不入侵原代码结构; 二、工程搭建 1、工程结构 2、依赖管理 &lt...

  LXP9hq8vgTZc   2023年11月01日   70   0   0 Java

目录 一、简介 二、工程搭建 1、工程结构 2、依赖管理 三、上传下载 1、配置管理 2、上传下载 四、Excel文件 1、Excel创建 2、Excel读取 3、解析监听 4、导入导出 五、参考源码 标签:上传.下载.Excel.导入.导出; 一、简介 在项目中,文件管理是常见的复杂功能; 首先文件的类型比较多样,处理起来比较复杂,其次文件涉及大量的IO操作,容易引发内存溢出; 不同的文件类型有不同的应用场景; 比如:图片常用于头像和证明材料;Excel偏向业务数据导入导出;CSV偏向技术层面数据搬运;PDF和Word用于文档类的材料保存等; 下面的案例只围绕...

  LXP9hq8vgTZc   2023年11月01日   68   0   0 Java

标签:ShardingSphere5.分库.分表; 一、简介 分库分表的设计和实现方式,在之前的内容中总结过很多,本文基于SpringBoot3和ShardingSphere5框架实现数据分库分表的能力; 不得不提ShardingSphere5文档中描述的两个基本概念: 垂直分片 按照业务拆分的方式称为垂直分片,又称为纵向拆分,它的核心理念是专库专用。在拆分之前,一个数据库由多个数据表构成,每个表对应着不同的业务。而拆分之后,则是按照业务将表进行归类,分布到不同的数据库中,从而将压力分散至不同的数据库。 水平分片 水平分片又称为横向拆分。相对于垂直分片,它不再将数据根据业务逻辑分类...

  LXP9hq8vgTZc   2023年11月01日   40   0   0 Java

标签:Jdbc.Druid.Mybatis.Plus; 一、简介 项目工程中,集成数据库实现对数据的增晒改查管理,是最基础的能力,而对于这个功能的实现,其组件选型也非常丰富; 通过如下几个组件来实现数据库的整合; Druid连接池:阿里开源的数据库连接池,并且提供SQL执行的监控能力; MybatisPlus框架:基于Mybatis框架的增强工具包,可以用于简化持久层开发,显著的提高效率; MySQL数据库:常用的关系型数据库组件,在案例中使用Druid组件来连接数据库; 二、工程搭建 1、工程结构 2、依赖管理 Druid连接池使用的是1.2.18版本;在mybatis-plus组件中...

  LXP9hq8vgTZc   2023年11月01日   104   0   0 Java

目录 一、简介 二、工程搭建 1、工程结构 2、依赖管理 3、数据库 4、配置文件 三、Quartz用法 1、初始化加载 2、新增任务 3、更新任务 4、暂停任务 5、恢复任务 6、执行一次 7、删除任务 8、任务执行 四、参考源码 标签:Quartz.Job.Scheduler; 一、简介 Quartz由Java编写的功能丰富的开源作业调度框架,可以集成到几乎任何Java应用程序中,并且能够创建多个作业调度; 在实际的业务中,有很多场景依赖定时任务,比如常见的:订单超时处理,数据报表统计分析,会员等周期性管理,业务识别和预警通知等; 二、工程搭建 1、工程结构 ...

  LXP9hq8vgTZc   2023年11月01日   33   0   0 Java

目录 一、简介 二、工程搭建 1、工程结构 2、依赖管理 三、配置管理 1、核心配置类 2、认证数据源 3、认证流程 4、身份过滤器 四、核心功能 1、登录退出 2、权限校验 五、参考源码 标签:Security.登录.权限; 一、简介 SpringSecurity组件可以为服务提供安全管理的能力,比如身份验证、授权和针对常见攻击的保护,是保护基于spring应用程序的事实上的标准; 在实际开发中,最常用的是登录验证和权限体系两大功能,在登录时完成身份的验证,加载相关信息和角色权限,在访问其他系统资源时,进行权限的验证,保护系统的安全; 二、工程搭建 1、工程结...

  LXP9hq8vgTZc   2023年11月01日   22   0   0 Java

目录 一、简介 二、工程搭建 1、工程结构 2、依赖管理 3、Redis配置 三、Redis用法 1、环境搭建 2、数据类型 3、加锁机制 四、Mybatis缓存 1、基础配置 2、自定义实现 五、参考源码 标签:Redis.Mybatis.Lock; 一、简介 缓存在项目开发中,基本上是必选组件之一,Redis作为一个key-value存储系统,具备极高的数据读写效率,并且支持的数据类型比较丰富,在业务场景中的应用非常广泛; Redis典型的应用场景就是数据缓存能力,用来解决业务中最容易出现的查询性能问题,提升系统的响应效率;其次就是分布式锁机制,用来解决分布...

  LXP9hq8vgTZc   2023年11月01日   126   0   0 Java

目录 一、简介 二、环境搭建 1、下载安装包 2、服务启动 三、工程搭建 1、工程结构 2、依赖管理 3、配置文件 四、基础用法 1、实体类 2、初始化索引 3、仓储接口 4、查询语法 五、参考源码 标签:ElasticSearch8.Kibana8; 一、简介 Elasticsearch是一个分布式、RESTful风格的搜索和数据分析引擎,适用于各种数据类型,数字、文本、地理位置、结构化数据、非结构化数据; 在实际的工作中,历经过Elasticsearch从6.0到7.0的版本升级,而这次SpringBoot3和ES8.0的集成,虽然脚本的语法变化很小,但是J...

  LXP9hq8vgTZc   2023年11月01日   120   0   0 Java
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~