自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 SpringBoot源码解析(四):解析应用参数args

前文深入解析了SpringBoot启动的开始阶段,包括获取和启动应用启动监听器、事件与广播机制,以及如何通过匹配监听器实现启动过程各阶段的自定义逻辑。接下来,我们将探讨SpringBoot启动类main函数中的参数args的作用及其解析过程。SpringBoot版本2.7.18SpringApplication的run方法的执行逻辑如下,本文将详细介绍第3小节:解析应用参数// SpringApplication类方法// 记录应用启动的开始时间。

2024-11-18 07:30:00 2620 337

原创 丹摩征文活动|丹摩智算平台使用指南

丹摩智算平台通过一站式的数据分析与建模服务,简化了用户的操作流程,从数据预处理到模型部署及监控,帮助用户更快、更有效地完成数据分析和模型应用。以下指南详细介绍了该平台的操作步骤及主要功能模块,帮助用户快速上手,提升工作效率。丹摩智算平台是一个高度集成的智能计算平台,提供从。

2024-11-14 10:43:01 1865 288

原创 SpringBoot源码解析(三):启动开始阶段

前文深入解析了引导上下文作为组件存储容器的角色,接下来将进入启动开始阶段的内容。SpringBoot版本2.7.18SpringApplication的run方法的执行逻辑如下,本文将详细介绍第二小节:获取启动监听器,调用启动开始方法// SpringApplication类方法// 记录应用启动的开始时间// 1.创建引导上下文,用于管理应用启动时的依赖和资源// 配置无头模式属性,以支持在无图形环境下运行// 将系统属性 java.awt.headless 设置为 true。

2024-11-11 07:30:00 2578 266

原创 java开发常用工具类(持续更新...)

【代码】java开发常用工具类(持续更新...)

2024-04-29 09:33:06 2158 129

原创 Java基础(二十六):Stream流及Optional类

Stream 是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列Stream和Collection集合的区别Collection是一种静态的内存数据结构,讲的是数据;主要面向内存,存储在内存中Stream是有关计算的,讲的是计算;面向CPU,通过CPU实现计算对于并行流,其在底层实现中,是沿用了Java7提供的fork/join分解合并框架进行实现fork根据cpu核数进行数据分块,join对各个fork进行合并。

2024-02-21 18:55:44 1862 74

原创 Hutool工具包-常用开发工具类(让代码更简洁)

Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率Hutool是项目中“util”包友好的替代,它节省了开发人员对项目中公用类和公用工具方法的封装时间可以根据需求对每个模块单独引入,也可以通过引入hutool-all方式引入所有模块

2023-03-29 18:00:42 6863 148

原创 SpringBoot源码解析(二):引导上下文DefaultBootstrapContext

前文深入解析SpringApplication构造方法,而接下来的几篇文章将重点介绍run方法的执行逻辑。SpringApplication的run方法的执行逻辑如下,本文将详细介绍第一小节:创建引导上下文// SpringApplication类方法// 记录应用启动的开始时间// 1.创建引导上下文,用于管理应用启动时的依赖和资源// 配置无头模式属性,以支持在无图形环境下运行// 将系统属性 java.awt.headless 设置为 true。

2024-11-04 07:00:00 3439 314

原创 SpringBoot源码解析(一):SpringApplication构造方法

在之前的文章中,我们深入研究了Tomcat、Spring、以及SpringMVC的源码。这次,我们终于来到SpringBoot的源码分析。接下来的几篇文章将重点关注SpringBoot的启动原理和自动配置原理。本篇文章将聚焦于SpringApplication的构造方法。基于2.7.18版本,这也是SpringBoot3发布前的最后一个版本。方法是启动SpringBoot应用的核心入口。我们从这个方法开始,逐步深入。是 Spring 框架中的一个关键配置文件,通常位于类路径下的META-INF目录中。

2024-10-29 14:02:37 7643 324

原创 EasyExcel自定义下拉注解的三种实现方式

在使用EasyExcel设置下拉数据时,每次都要创建一个组件确实比较繁琐。为了优化这个过程,我们可以通过自定义注解来简化操作,使得只需要在需要添加下拉数据的字段上添加注解即可。注解实现三种方式可供选择方式一:固定值方式二:动态获取复杂数据方式三:通过码值获取码值表的数据列表方式一只需要添加注解即可方式二在查询复杂的情况下使用,每个下拉都需要创建一个ExcelDynamicSelect的实现类,并添加注解方式三只需要添加注解。

2024-10-22 23:54:14 3384 319

原创 Maven入门到进阶:构建、依赖与插件管理详解

  Maven是软件基金会开发的一款和,主要用于Java 、和。Maven通过声明性配置(XML 文件)定义项目构建流程及依赖项,使得项目管理更简单、更高效,特别适合于多模块、大型项目。  在Maven中,GAVP是构建项目的四个核心属性的缩写,分别代表、、和。这四个属性在文件中定义,用于唯一标识一个Maven项目或依赖。1.2、ArtifactId定义:项目或模块的标识符,是,通常是小写的、简短的名称用途:用于唯一标识项目中的某个模块。通常一个项目会有多个模块,每个模块的ArtifactId都

2024-10-21 07:00:00 3245 237

原创 SpringBoot基础(五):集成JUnit5

JUnit5是一个功能强大的单元测试框架,是JUnit系列的最新版本,它引入了多个改进和新特性,旨在为Java应用程序提供灵活且模块化的测试支持。单元测试是指对软件中的最小可测试单元进行检查和验证的过程叫单元测试在SpringBoot中,最小可测试单元就是指方法。

2024-10-14 07:00:00 5686 270

原创 SpringBoot基础(四):bean的多种加载方式

使用对象加载MyConfig,即使MyConfig类什么注解没有,也会被注册为bean。

2024-10-07 07:00:00 6096 273

原创 SpringBoot基础(三):Logback日志

SpringBoot基础系列文章SpringBoot基础(一):快速入门SpringBoot基础(二):配置文件详解SpringBoot基础(三):Logback日志默认使用作为,作为来记录日志Logback是由设计的另一个开源日志组件,性能比log4j要好  适配器作用:以后想要换其他日志框架,只要排除掉logback日志实现,导入log4j2或jul的日志实现即可,代码中API还是slf4j不需要修改,。  注解的原理就是在编译后的Class文件的类名下生成,所以这两使用哪个都一样。2、默

2024-10-04 18:41:44 8482 154

原创 java日志门面之JCL和SLF4J

什么时日志门面?随着系统开发的进行,可能会更新不同的日志框架,造成当前系统中存在不同的日志依赖,让我们难以统一的管理和控制。借鉴JDBC的思想,为日志系统也提供一套门面,那么我们就可以面向这些接口规范来开发,避免了直接依赖具体的日志框架。这样我们的系统在日志中,就存在了日志的门面和日志的实现。常见的日志框架及日志门面常见日志门面:JCL、slf4j常见日志实现:JUL、log4j、logback、log4j2框架诞生顺序:log4j --> JUL -->JCL-->slf4j。

2024-09-27 07:00:00 7175 298

原创 java日志框架之Log4j

Log4j是Apache的一个开源项目可以控制日志信息输出到控制台文件、甚至是数据库中可以控制每一条日志的输出格式通过一个配置文件来灵活地进行配置,而不需要修改应用的代码主要由Loggers (日志记录器)、Appenders(输出控制器)和 Layout(日志格式化器)组成Loggers:控制日志的输出级别与日志是否输出Appenders:指定日志的输出方式(输出到控制台、文件等)Layout:控制日志信息的输出格式;源码默认从类路径找。

2024-09-23 07:00:00 3602 243

原创 java日志框架之JUL(Logging)

JUL全程,它是java原生的日志框架,使用时不需要另外引用第三方的类库相对其他的框架使用方便,学习简单,主要是使用在小型应用中Logger:被称为记录器应用程序通过获取Logger对象,调用其API来发布日志信息Logger通常被认为是访问日志系统的入口程序Handler:处理器每个Logger都会关联一个或者是一组HandlerLogger会将日志交给关联的Handler去做处理,由Handler负责将日志做记录Handler具体实现了日志的输出位置,比如可以输出到控制台或者是文件中等等。

2024-09-18 07:00:00 1977 258

原创 \r和\n不同系统的区别

【代码】\r和\n不同系统的区别。

2024-08-19 10:26:07 2556 307

原创 SpringBoot基础(二):配置文件详解

方式一:使用临时属性设置配置文件名,注意仅仅是名称,不要带扩展名方式二:使用临时属性设置配置文件路径或类路径,全路径名。

2024-08-12 04:51:41 10632 296

原创 SpringBoot基础(一):快速入门

SpringBoot可以简单快速地创建一个独立的、生产级别的Spring应用(说明:SpringBoot底层是Spring)大多数SpringBoot应用只需要编写少量配置即可快速整合Spring平台以及第三方技术SpringBoot特性快速创建独立Spring应用以前的SSM框架,需要导包、写配置、启动运行直接嵌入Tomcat、Jetty or Undertow,不再需要部署war包提供可选的场景启动器(starter),简化应用整合。

2024-08-07 07:00:00 2837 279

原创 Hibernate Validator 数据校验框架

JSR:Java Specification Requests的缩写,意思是Java规范提案是指向JCP(Java Community Process) 提出新增一个标准化技术规范的正式请求任何人都可以提交JSR,以向Java平台增添新的API和服务JSR已成为Java界的一个重要标准就是这个JSR规范之一Bean Validation是一个运行时的数据验证框架的标准JSR303是专家组成员向JCP提交的第1版Bean Validation,即针对bean数据校验提出的一个规范,

2024-08-05 08:51:23 2762 208

原创 SpringMVC源码解析(二):请求执行流程

前文中我们介绍了SpringMVC容器的启动,包括前端控制器DispatcherServlet对象的创建,过滤器添加到Tomcat容器的过滤器集合中,将所有拦截器、跨域配置、消息转换器等配置统一添加到各自集合中,解析@RequestMapping注解生成请求路径和Controller方法的映射map。本章来研究下请求的执行过程。说到请求过程,那么得先说下入口在哪里?入口肯定是统一分发请求给处理程序的,DispatcherServlet归根结底也是Servlet。

2024-07-29 07:00:00 9771 279

原创 Jackson详解

Jackson库的核心功能是将Java对象转换为json字符串(序列化)以及将json字符串转换为Java对象(反序列化)SpringMVC默认json解析器便是Jackson与其他Java的json的框架相比Jackson 解析大的json文件速度比较快Jackson 运行时占用内存比较低,性能比较好Jackson 有灵活的API,可以很容易进行扩展和定制核心模块由三部分组成jackson-core,核心包。

2024-07-22 07:00:00 3311 226

原创 FastJson详解

FastJson 是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将JavaBean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。Fastjson 的优点速度快fastjson相对其他JSON库的特点是快从2011年fastjson发布1.1.x版本之后,其性能从未被其他Java实现的JSON库超越使用广泛fastjson在阿里巴巴大规模使用,在数万台服务器上部署,fastjson在业界被广泛接受。

2024-07-15 07:30:00 8936 222

原创 SpringMVC源码解析(一):web容器启动流程

由上一节可知,web容器初始化工作会调用自定义配置类的onStartup方法为了方便查看,我根据类的关系和类中方法的作用整理成了下面的结构图。

2024-07-08 07:50:18 3966 255

原创 SpringMVC基础详解

MVC是一种软件架构模式(是一种软件架构设计思想M:Model(模型),负责业务处理及数据的收集V:View(视图),负责数据的展示C:Controller(控制器),负责调度。它是一个调度中心,它来决定什么时候调用Model来处理业务,什么时候调用View视图来展示数据。

2024-07-01 07:00:00 3394 254

原创 个人博客文章目录索引(持续更新中...)

26、Java基础(二十六):Stream流及Optional类。

2024-06-24 09:13:18 2573 226

原创 curl命令行发送post/get请求

curl 是一个命令行实用程序,允许用户创建网络请求curl 在WindowsLinux和Mac上皆可使用。

2024-06-17 08:12:58 7329 204

原创 Tomcat源码解析(八):一个请求的执行流程(附Tomcat整体总结)

前文中我们介绍了NIO解析请求数据,网络字节流转化为Request和Response对象。接下来介绍拿到Req和Res之后如何走到Servelt,以及正常响应返回。回顾之前篇章,NioEndpoint通过socket服务端监听8080端口接收连接,获取到连接扔给连接池处理,SocketProcessor从NioChannel通道中读取数据到ByteBuff缓冲区再赋值给对应属性,最后通过适配器生成容器Req和Res调用容器管道的执行方法。Endpoint是连接器Connector。

2024-06-10 15:22:25 3788 176

原创 idea实用快捷键(持续更新...)

【代码】idea实用快捷键(持续更新...)

2024-06-03 08:09:33 3075 175

原创 Tomcat源码解析(七):底层如何获取请求url、请求头、json数据?

前文中我们介绍了连接器的初始化和启动,实际就是EndPoint的初始化启动,EndPoint主要负责接收socket请求,然后将socket请求包装为SocketProcessor对象(实现Runnable接口)扔给线程池Executor处理。接下来介绍NIO如何解析请求数据,网络字节流与Request和Response对象的转化。Nio通过NioChannel将请求数据读取到ByteBuffer缓冲区中先解析请求行,包括请求方式、请求url、请求协议再解析请求头的name和value解析都是通过。

2024-05-27 09:05:14 2256 141

原创 Tomcat源码解析(六):Connector、ProtocolHandler、Endpoint

前文中我们介绍了容器Engine、Host、Context、Wrapper的启动,代表整个tomcat容器启动就算完成了。接下来介绍下连接器,处理Socket连接,负责网络字节流与Request和Response对象的转化。Tomcat设计了3个组件。Endpoint(网络通信)负责提供字节流给Processor;Processor(应用层协议解析)负责提供Tomcat Request对象给Adapter;Adapter(请求响应转化)负责提供ServletRequest对象给容器。

2024-05-20 09:12:53 3155 124

原创 ThreadLocal全面解析

ThreadLocal类用来提供线程内部的局部变量这种变量在多线程环境下访问(通过get和set方法访问)时能保证各个线程的变量相对独立于其他线程内的变量ThreadLocal实例通常来说都是类型的,用于关联线程和线程上下文使用场景及作用线程并发: 在多线程并发的场景下传递数据: 我们可以通过ThreadLocal在同一线程,不同组件中传递公共变量线程隔离: 每个线程的变量都是独立的,不会互相影响ThreadLocal并不解决线程间共享数据的问题ThreadLocal适用于变量在线程间隔离且在。

2024-05-13 09:09:05 3016 98

原创 Maven详解

1)数学中的坐标使用 x、y、z 三个『向量』作为空间的坐标系,可以在『空间』中唯一的定位到一个『点』2)Maven中的坐标和 Java 类一样,POM 之间其实也是单继承的。如果我们给一个 POM 指定了父 POM,那么继承关系如下图所示:在 POM 的继承关系中,子 POM 可以覆盖父 POM 中的配置如果子 POM 没有覆盖,那么父 POM 中的配置将会被继承按照这个规则,继承关系中的执行命令:mvn help:effective-pom超级 POM:所有 POM 默认继承,只

2024-05-06 09:04:35 3118 52

原创 详解Java中的五种IO模型

在学习IO模型前,需要先了解些基础概念,才能理解IO的执行流程及阻塞的原因selectpollepoll底层数据结构数组链表红黑树和双链表获取就绪的fd遍历遍历事件回调事件复杂度O(n)O(n)O(1)最大连接数1024无限制无限制fd数据拷贝每次调用select,需要将fd数据从用户空间拷贝到内核空间每次调用poll,需要将fd数据从用户空间拷贝到内核空间使用内存映射(mmap),不需要从用户空间频繁拷贝fd数据到内核空间。

2024-04-22 07:36:30 4819 75

原创 NIO详解

NIO (New lO)也有人称之为java non-blocking lO是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java lO API。NIO与原来的IO有同样的作用和目的,但是使用的方式完全不同,NIO支持面向缓冲区的、基于通道的IO操作。NIO将以更加高效的方式进行文件的读写操作。NIO可以理解为非阻塞IO。

2024-04-15 09:51:07 2581 75

原创 SpringBoot实现License认证(只校验有效期)

License也就是版权许可证书,一般用于收费软件给付费用户提供的访问许可证明应用场景应用部署在客户的内网环境这种情况开发者无法控制客户的网络环境,也不能保证应用所在服务器可以访问外网因此通常的做法是使用服务器许可文件,在应用启动的时候加载证书然后在登录或者其他关键操作的地方校验证书的有效性License授权原理使用开源的证书管理引擎生成密钥对,使用Keytool生成公私钥证书库授权者保留私钥,使用私钥和使用日期生成证书license。

2024-04-08 09:12:47 7248 64

原创 Tomcat源码解析(五):StandardEngine、StandardHost、StandardContext、StandardWrapper

前文中我们介绍了StandServer与StandService的init与start方法,而Service的init方法和start方法则是调用顶级容器Engine、请求url映射Mapper、执行器Executor、连接器Connector的init和start方法。本文就介绍下容器的init和start及Mapper的组成。至此,整个容器的启动过程就介绍完了,可以看到整个流程是由Server起步直到Wrapper结束。

2024-04-01 08:58:13 3238 153

原创 MyBatisPlus新版代码生成器(Velocity模板引擎详解)

Velocity是一个基于Java的模板引擎,可以通过特定的语法获取在java对象的数据 ,填充到模板中,从而实现界面和java代码的分离。应用场景Web应用程序 : 作为为应用程序的视图, 展示数据源代码生成 : Velocity可用于基于模板生成Java源代码自动电子邮件 : 网站注册 , 认证等的电子邮件模板网页静态化 : 基于velocity模板 , 生成静态网页只需要关注.vm结尾模板即可(属于velocity引擎模板),其他模板是其他模板引擎的模板,这里不做过多介绍。

2024-03-25 07:08:52 5680 99

原创 EasyExcel实现文件上传下载(百万级数据、单元格自定义样式)

Java解析、生成Excel比较有名的框架有Apache poijxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。EasyExcel重写了poi对07版Excel的解析,一个3M的excel用POI sax解析依然需要100M左右内存,改用easyexcel可以降低到几M,并且再大的excel也不会出现内存溢出;

2024-03-18 07:32:55 3861 71

原创 Tomcat源码解析(四):StandardServer和StandardService

前文Tomcat源码解析(二):Bootstrap和Catalina介绍Tomcat的启动类的加载,在Catalina初始化时加载了server.xml,创建ServerServiceConnector等一些列组件,然后调用Server的init和start方法,启动tomcat。Tomcat源码解析(三):LifeCycle生命周期管理介绍了组件init、start、stop等共同生命周期方法,使用模板方法设计模式,具体的实现类由子类去实现。

2024-03-11 07:42:14 2512 113

贪吃蛇的java小程序

贪吃蛇的java小程序

2024-03-11

空空如也

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

TA关注的人

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