Spring全家桶
文章平均质量分 83
嫣夜来
这个作者很懒,什么都没留下…
展开
-
基于SPI的插件式开发实现方案之@AutoService+ServiceLoader介绍及Dolphinscheduler中的实际应用
AutoService是Google开源的用来方便生成符合ServiceLoader规范的开源库,使用非常的简单。官方的介绍是java.util.ServiceLoader 风格的服务提供者的配置/元数据生成器。翻译成中文就是自动服务,这个程序能自动做什么?Java 注释处理器和其他系统使用 java.util.ServiceLoader 来注册使用 META-INF 元数据的已知类型的实现。但是,开发人员很容易忘记更新或正确指定服务描述符。人工维护配置/元数据的过程。原创 2024-01-12 20:30:27 · 1575 阅读 · 0 评论 -
SpringBoot+Prometheus+Grafana搭建应用监控系统
springboot 2.X 中引入了 micrometer,它可以更方便的对接各种监控系统,包括 Prometheus。原创 2024-01-09 17:48:01 · 984 阅读 · 0 评论 -
Mybatis框架源码笔记(十一)之Spring整合mybatis演示与整合原理解析
1.4 项目配置文件1.4.1 数据库连接配置文件1.4.2 Mybatis框架全局配置文件1.4.3 Spring框架配置文件1.4.4 **Mapper.xml文件1.4.6 实体类1.5 测试看看, 之前如果我们单独只用Mybatis框架的时候, 测试代码是怎么写的对比一下spring框架集成Mybatis框架之后对比一下,发现是不是很多操作就被简化了, 整个和都没有了, 那么到底是怎么实现这个操作的简化的呢, 下面我们一起来分析一下这个过程。首先我们看看Spring的配原创 2023-04-11 14:31:07 · 453 阅读 · 0 评论 -
Mybatis框架源码笔记(十)之Mybatis中的设计模式
有可能只是简单查询, 有可能是批量处理操作, 有可能是可重复使用的操作, 这里我们可以通过模板方法结合策略模式来实现不同的处理逻辑对应处理不同的业务请求类型来实现应用的拓展。这里用BaseExecutor类中的模板方法来说明一下, BaseExecutor方法中定义了SQL的查询和修改的模板方法, 并且在其他当前类中进行了调用, 但是BaseExecutor中没有进行实现,已经详细讲过, 这里不再进行赘述,Mybatis在实现缓存架构的时候使用了装饰者模式, 通过包装和组合的方式实现了强大的缓存功能。原创 2023-04-08 17:48:26 · 619 阅读 · 0 评论 -
Mybatis框架源码笔记(九)之反射工具类解析
反射在java项目的实践应用中是非常重要的,必须熟练掌握,很多成熟的开源框架中都已经封装了很多非常好的反射工具,我们在进行源码阅读时,可以将这些精华的部分进行搜集整理应用到自己的项目中,只看是学不会的,编程这个东西还是更注重实践,实践的多了,自然你就会自主的去学习和思考了。ObjectWrapper 是对对象的包装的接口,抽象了对象的字段信息、 getter| setter 方法、和上面三个成员的数据类型,它定义了一系列查询对象属性信息的方法,以及更新属性的方法。原创 2023-04-03 13:26:11 · 635 阅读 · 1 评论 -
Mybatis框架源码笔记(八)之Plugin插件原理解析
引用一段官网的译文MyBatis 允许你在映射语句执行过程中的某一点进行拦截调用。这些类中方法的细节可以通过查看每个方法的签名来发现,或者直接查看 MyBatis 发行包中的源代码。如果你想做的不仅仅是监控方法的调用,那么你最好相当了解要重写的方法的行为。因为在试图修改或重写已有方法的行为时,很可能会破坏MyBatis 的核心模块。这些都是更底层的类和方法,所以使用插件的时候要特别当心。自定义插件的实现步骤大致如下:实现Mybatis框架的Interceptor接口。原创 2023-03-15 16:42:18 · 595 阅读 · 1 评论 -
Mybatis框架源码笔记(七)之Mybatis中类型转换模块(TypeHandler)解析
你可以重写已有的类型处理器或创建你自己的类型处理器来处理不支持的或非标准的类型。具体做法为:实现 org.apache.ibatis.type.TypeHandler 接口,或继承一个很便利的类 org.apache.ibatis.type.BaseTypeHandler, 并且可以(可选地)将它映射到一个 JDBC 类型。原创 2023-03-10 15:56:41 · 1766 阅读 · 0 评论 -
Mybatis框架源码笔记(六)之Mybatis中集成日志框架原理解析
看到这张图片,大家在项目中使用Mybatis框架进行数据库操作的时候可能都在控制台看到过类似的日志打印, 大家有没有去深究一下, 这些功能到底是怎么实现的呢, 下面我主要通过源码分析一下在Mybatis框架在执行JDBC操作的时候是如何完成相关的操作信息和SQL语句从控制台输出的?这里我们聊的是围绕着JDBC相关的操作, 所以我们只分析跟JDBC相关的日志实现。原创 2023-03-03 19:42:09 · 964 阅读 · 0 评论 -
Mybatis框架源码笔记(五)之Mybatis框架缓存机制原理解析
配置文件中缓存相关的配置参数解析Myabtis框架中一级缓存和二级缓存默认是开启的缓存默认的作用域是SessionConfiguration初始化的时候会为我们的各种Cache实现类完成别名注册三级缓存一般都是自定义缓存。分布式缓存框架:我们系统为了提高系统并发和性能,一般对系统进行分布式部署(集群部署方式)不适用分布缓存, 缓存的数据在各个服务单独存储,不方便系统开发。原创 2023-02-27 13:42:42 · 870 阅读 · 0 评论 -
Mybatis框架源码笔记(四)之Mybatis执行增删改查方法的流程解析
Mybatis框架在执行增伤改的流程基本相同, 很简单,这个大家只要自己写个测试demo跟一下源码,基本就能明白是怎么回事,查询操作略有不同, 这里主要通过查询操作来解析一下整个框架的流程设计实现。原创 2023-02-22 17:31:36 · 560 阅读 · 0 评论 -
IDEA中如何配置SpringBoot项目多实例不同端口运行
配置结束之后让测试在8010端口进行测试, 我们可以在8009端口继续进行新的业务模块功能开发,匹配不会互相影响。我们在进行新项目开发的时候, 可能做完一个新的模块功能并自测通过之后, 我们希望测试人员能帮我跑一些单元测试用例来进行测试验证, 但是我们又需要在此基础上技术开发新的功能, 这是我们就需要在我们的开发PC上同时运行多实例来保证开发及内部测试的需求,下面就说说怎么在IDEA上实现这个同项目多实例运行。修改运行组名称和运行组中的启动实例。修改复制实例的名称及运行端口。原创 2023-02-17 13:02:18 · 5060 阅读 · 0 评论 -
SpringBoot项目如何引入外部jar及将外部jar打包到项目发布war包
我们现在是需要把项目打包成war包了,那么打包的时候就不需要内嵌web容器了,需要排除掉。这里需要选择我们的tomcat Server启动。在build下设置项目最终打包的项目名称,如果不设置也是可以的, 默认显示的就是是项目name加上版本号。引入外部jar成功,在自己的项目中如果使用了外部jar的方法修改了项目代码,需要重新进行打包部署。OK,项目中的接口可以正常访问, 引入外部jar包之后,项目打包并部署依然是成功的。个外部的jar包, 我这里使用的是guava-31.1-jre.jar作为演示。原创 2023-01-31 14:18:49 · 3526 阅读 · 0 评论 -
SpringBoot项目如何引入外部jar及将外部jar打包到项目发布jar包
引入jar包及打包原创 2022-11-29 11:22:16 · 7066 阅读 · 0 评论 -
Mybatis框架源码笔记(三)之Mybatis接口的全局配置文件及*Mapper.xml文件扫描解析过程分析
Mybatis框架之mapper接口以及接口对应的xml文件的解析流程分析原创 2022-11-10 14:21:04 · 2203 阅读 · 0 评论 -
Mybatis框架源码笔记(二)之Mybatis核心原理流程分析
Mybatis架构及核心流程介绍原创 2022-11-03 17:54:34 · 479 阅读 · 0 评论 -
Mybatis框架源码笔记(一)之编译Mybatis源码和源码调试环境准备
mybatis源码学习笔记原创 2022-08-17 14:00:06 · 851 阅读 · 1 评论 -
springboot项目+Redis结合自定义注解实现接口限流的解决方案
1、Redis在实际业务场景中的用途缓存分布式锁接口限流处理请求接口幂等性其他2、springboot项目使用Redis实现接口限流的完整案例2.1 项目结构2.2 pom.xml依赖需要以下依赖<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-in原创 2022-05-25 18:51:36 · 632 阅读 · 3 评论 -
Spring Data JPA框架系列(七)-从聚合根(Aggregate Roots)发布事件
由repository管理的实体类就是是聚合根(Aggregate Roots)。在领域驱动设计应用程序中,这些聚合根(Aggregate Roots)通常会发布领域事件。Spring Data提供了一个名为@DomainEvents的注解,你可以在聚合根(Aggregate Roots)的一个方法上使用该注解,以使这种发布尽可能简单,如下例所示。例1 从聚合根(Aggregate Roots)中暴露域事件(DomainEvent)public class CustomAggregateRoot {原创 2022-04-15 10:57:04 · 1385 阅读 · 0 评论 -
Spring Data JPA框架系列(六)-Spring Data Repository自定义实现
1. Spring Data Repository自定义实现Spring Data提供了各种选项来创建查询方法,只需少量编码。但是当这些选项不能满足你的需求时,你也可以为资源库方法提供你自己的自定义实现。本节主要介绍如何做到这一点。1.1 自定义特殊repository要用自定义的功能实现来丰富repository库,你必须首先定义一个片段接口和自定义功能的实现,如下所示。例1. 自定义接口public interface CustomUserRepository { void customM原创 2022-04-15 09:42:47 · 687 阅读 · 0 评论 -
Spring Data JPA框架系列(五)-Repository创建实例详解
1 创建Repository实例对象本节主要介绍如何为自定义repository接口创建实例和bean定义。一种方法是使用Spring命名空间,该命名空间随每个支持repository机制的Spring Data模块一起提供,尽管我们一般建议使用Java配置。1.1. XML 配置文件方式每个Spring Data模块都包括一个repositories元素,让你定义Spring为你自动扫描的基础包路径,如下例所示。例1:通过XML配置文件的方式获取Spring Data repository实例&原创 2022-04-08 17:52:57 · 1861 阅读 · 0 评论 -
Spring Data JPA框架系列(四)-Repository接口查询方法详解
1 查询方法定义详解repository代理有两种方式从方法名中派生出特定存储查询。通过直接从方法名派生查询。通过使用一个手动定义的查询。可用的选项取决于实际的商店。然而,必须有一个策略来决定创建什么实际的查询。1.1 搜索查询策略下列策略可用于repository解决基础设施查询。对于 XML 配置,你可以通过 query-lookup-strategy 属性在命名空间配置该策略。对于 Java 配置,你可以使用 Enable${store}Repositories 注解的 queryLo原创 2022-04-02 14:09:06 · 5116 阅读 · 0 评论 -
Spring Data JPA框架系列(三)-自定义Repository接口详解
2.1 自定义Repository接口要定义一个repository接口,你首先需要自定义一个实体类专用的Repository接口。该接口必须扩展 Repository,并将其类型指定为实体类和实体类的 ID 类型。如果你想为该实体类资源类型开放CRUD方法,请直接继承CrudRepository而不是Repository。2.1.1 repository接口定义通常,你的repository接口会扩展Repository、CrudRepository或PagingAndSortingReposit原创 2022-04-02 08:27:53 · 2910 阅读 · 0 评论 -
Spring Data JPA框架系列(二)-Spring Data JPA的核心概念和Repository接口概述
1、核心概念Spring Data存储库抽象的中心接口是Repository。它把要管理的实体类以及实体类的ID类型作为类型参数。这个接口主要是作为一个标记接口,用来捕捉工作中的类型,并帮助你发现扩展这个接口的接口。CrudRepository接口为被管理的实体类提供复杂的CRUD功能。自己可以看看Repository的扩展接口以及实现类 IDEA中将光标定位在Repository.java文件中, ctrl+h快捷键就可以看。类图继承关系如下:1.2 CrudRepository接口这个接原创 2022-04-01 11:59:32 · 1334 阅读 · 0 评论 -
Spring Data JPA框架系列(一)-SpringBoot项目整合Spring Data JPA持久化存储数据到数据库
1、SpringBoot项目整合JPA1.1 pom.xml依赖<properties> <java.version>1.8</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</proje原创 2022-03-31 17:11:29 · 1098 阅读 · 0 评论 -
SpringSecurity权限管理框架系列(九)-SpringSecurit结合JWT完成用户登录认证
1、实现思路用户发起登录认证请求服务端接收用户请求参数,获取登录账号和密码,通过spring security进行登录认证登录认证失败,则抛异常信息登录认证成功, 则创建用户唯一key,将用户信息及权限信息保存到redis数据库缓存;再调用JWT工具生成token, 返回给用户端用户端之后的请求都在请求头携带该token在spring security的自定义配配置中添加一个JWT的token校验过滤器Filter, 请求过来先校验请求的token,如果token不存在,token验证错误。原创 2022-03-28 22:07:27 · 1057 阅读 · 0 评论 -
Springboot项目配置文件明文存储敏感信息的安全解决方案
1、Bug说明使用SpringBoot框架做过开发的媛友都知道,application.yml资源文件中的内容通常情况下是明文显示,安全性就比较低一些。只要获取到Springboot项目打包后的jar包,解压之后就可以打开application.properties或application.yml,一些服务端的私密信息就可以轻松获取到,比如 MySql登陆密码,Redis登陆密码以及第三方的密钥都可以轻松获取到。测试小姐姐就是通过上面这种方式获取到了mysql和redis的链接信息, 然后我就被提了bu原创 2022-03-27 21:37:25 · 2592 阅读 · 4 评论 -
SpringSecurity权限管理框架系列(八)-SpringSecurity自定义配置类中配置CORS跨域详解
1、CORS跨域过滤器关于CORS跨域的概念这里不多解释, 不明白的同学自行百度。这是异步跨域请求以及前后端分离项目开发经常会遇到的问题, 现在跟大家说说怎么进行在Spring Security框架中增加跨域过滤器的配置。2、自定义Spring Security配置类中添加CorsFilter2.1 定义跨域配置类, 注入CorsFilterBean对象到容器CorsConfig配置类package com.kkarma.config;import org.springframework.c原创 2022-03-26 10:29:50 · 815 阅读 · 0 评论 -
SpringSecurity权限管理框架系列(七)-SpringSecurity自定义配置类中自定义Filter的使用详解
1、Filter请求过滤器filter请求过滤器可以帮助我们进行HttpServletRequest请求和HttpServletResponse响应的过滤在自定义的Filter过滤器中我们可以对我们的请求进行过滤, 同时也可以对返回的相应进行处理,在方法中实现我们自定义的业务逻辑处理,这是很常见的需求,下面说说spring security框架中怎么是怎么搭配自定义Filter过滤器来使用的。2、自定义Spring Security配置类中添加自定义Filter2.1 自定义Filter类pac原创 2022-03-26 10:00:29 · 4105 阅读 · 0 评论 -
SpringSecurity权限管理框架系列(六)-Spring Security框架自定义配置类详解(二)之authorizeRequests配置详解
1、预置演示环境这个演示环境继续沿用SpringSecurit权限管理框架系列(五)-Spring Security框架自定义配置类详解(一)之formLogin配置详解的环境。2、自定义配置类之请求授权详解原创 2022-03-24 10:22:29 · 9551 阅读 · 1 评论 -
SpringSecurity权限管理框架系列(五)-Spring Security框架自定义配置类详解(一)之formLogin配置详解
1、演示环境准备1)创建一个Springboot的项目2)整合spring security框架依赖3)整合thymeleaf模板引擎依赖2、自定义CustomWebSecurityConfigurerAdapter配置使用详解项目结构大体如下:2.1 配置自定义登录页面2.1.1 效果实现2.1.1.1 自定义login.html页面2.1.1.2 Controller层显示login.html页面的前端控制器package com.kkarma.web.controller原创 2022-03-23 14:00:46 · 1723 阅读 · 0 评论 -
SpringSecurity权限管理框架系列(四)-Spring Security结合MySQL数据库实现自定义权限认证
1、自定义权限认证的实现思路自定义一个实体类LoginUser用来保存SygUser用户信息以及权限信息Set<String> permissions让这个LoginUser实体类实现Userdetails接口自定义的MyUserDetailsServiceImpl类的loadUserByUsername()方法中实现用户信息查询及该用户的权限信息查询自定义的MyUserDetailsServiceImpl类的loadUserByUsername()方法返回LoginUs原创 2022-03-22 11:28:41 · 3312 阅读 · 3 评论 -
SpringSecurity权限管理框架系列(三)-Spring Security结合MySQL数据库实现用户登录认证
1、预置数据库数据及其他环境信息1.1 准备数据库表和数据(这里我已经准备好了)预置数据信息SET NAMES utf8mb4;SET FOREIGN_KEY_CHECKS = 0;-- ------------------------------ Table structure for bs_menu-- ----------------------------DROP TABLE IF EXISTS `bs_menu`;CREATE TABLE `bs_menu` ( `me原创 2022-03-21 17:16:40 · 1640 阅读 · 8 评论 -
SpringSecurity权限管理框架系列(二)-Spring Security框架实现用户登录认证流程详解
1、Spring Security登录认证的核心Spring Security框架完成用户登录认证的核心就在与org.springframework.security.core.userdetails包下的UserDetailsService接口2、UserDetailsService接口详解2.1 UserDetailsService接口的定义UserDetailsService接口只有一个抽象方法就是loadUserByUsername(String username),UserDetail原创 2022-03-21 14:01:15 · 1684 阅读 · 0 评论