
SpringBoot
文章平均质量分 82
学习SpringBoot知识
sco5282
这个作者很懒,什么都没留下…
展开
-
SpringBoot 中使用 validator 框架优雅地校验参数
举个例子:业务系统的用户需要保证其唯一性,用户属性不能与其他用户产生冲突,不允许与数据库中任何已有用户的用户名称、手机号码、邮箱产生重复。如:保存 User 的时候,userId 是可空的,但是更新 User 的时候,userId 的值必须 >= 1L;接口的第一个参数是 自定义注解类型,第二个参数是 被注解字段的类,因为需要校验多个参数,我们直接传入用户对象。在日常的开发中,为了防止非法参数对业务造成影响,需要对接口的参数进行校验,以便正确性地入库。的标准方式,借助自定义校验注解完成业务规则校验。原创 2023-05-06 17:41:36 · 7049 阅读 · 0 评论 -
深入理解 Spring Cache 的工作原理及集成其它第三方缓存
Spring 从 3.1 开始定义了和接口来统一不同的缓存技术Cache:缓存接口,定义缓存操作。RedisCache等: 缓存管理器,管理各种缓存(Cache)组件: 缓存数据时 key 生成策略serialize: 缓存数据时 value 序列化策略@Cacheable【创建、查询缓存】:触发缓存入口(一般放在创建和获取的方法上,@Cacheable注解会先查询是否已经有缓存。如果有,则直接从缓存中返回;如果没有,则会执行方法并返回结果缓存【返回方法返回 NULL,则不进行缓存】)原创 2024-10-07 12:07:47 · 1287 阅读 · 0 评论 -
SpringBoot 集成 JetCache-Alibaba 实现本地缓存
官网地址官方文档JetCache是由阿里巴巴开源的一款基于 Spring 和 Redis 的分布式缓存框架,提供统一的 API 和注解来简化缓存的使用。JetCache提供了比更加强大的注解,可以原生的支持 TTL、两级缓存、分布式自动刷新,还提供了 Cache 接口用于手工缓存操作。当前有四个实现,RedisCacheTairCache(此部分未在 github 开源)、(in memory) 和一个简易的(in memory),要添加新的实现也是非常简单的通过统一的 API 访问 Cache 系统。原创 2024-10-06 14:35:02 · 1848 阅读 · 0 评论 -
SpringBoot 集成 Ehcache 实现本地缓存
EhCache是一种广泛使用的开源Java 分布式缓存。主要面向通用缓存、Java EE 和轻量级容器,可以和大部分 Java 项目无缝整合。Ehcache虽然也支持分布式模式,但是分布式方案不是很好,建议只将其作为单机的进程内缓存使用直接在 JVM 虚拟机中缓存,速度快,效率高支持多种缓存策略:LRU、LFU、FIFO 淘汰算法支持内存和磁盘存储,默认存储在内存中,如内存不够时把缓存数据同步到磁盘中;支持多缓存管理器实例,以及一个实例的多个缓存区域。原创 2024-10-06 11:20:13 · 2502 阅读 · 0 评论 -
SpringBoot 集成 Caffeine 实现本地缓存
Caffeine 官网Caffeine 是基于Java 1.8 的高性能本地缓存库,同样是 Google 开发的,由 Guava 改进而来,底层设计思路、功能和使用方式与 Guava 非常类似,但是各方面的性能都要远远超过前者,可以看做是 Guava cache 的升级版。而且在 Spring5 开始的默认缓存实现就将 Caffeine 代替原来的 Google Guava,官方说明指出,其缓存命中率已经接近最优值@Data@Service@Autowired// 模拟数据库数据。原创 2024-09-21 18:15:12 · 5338 阅读 · 1 评论 -
SpringBoot 整合 Guava Cache 实现本地缓存
美团技术团队-缓存那些事是 Google 开发的 Guava 工具包中一套完善的JVM 本地缓存框架,底层实现的数据结构类似于,但是进行了更多的能力拓展,包括缓存过期时间设置、缓存容量设置、多种淘汰策略、缓存监控等。是一个支持高并发的线程安全的本地缓存。多线程情况下也可以安全的访问或者更新Cache。这些都是借鉴了支持最大容量限制支持两种过期删除策略(插入时间和读取时间)支持简单的统计功能基于 LRU 算法实现。原创 2024-09-07 23:11:32 · 2594 阅读 · 0 评论 -
【限流】4 种常见的限流实现方案
自定义一个限流用的注解,后面在需要限流的方法或接口上面只需添加该注解即可// 限制类型 String limitType();// 每秒 5 个请求 double limitCount() default 5d;// 限制类型 String resourceName();// 每秒 5 个 int limitCount() default 5;原创 2023-07-22 16:44:37 · 4154 阅读 · 0 评论 -
【限流】4 种常见的限流算法
在大多数的微服务架构在设计之初,比如在技术选型阶段,架构师会从一个全局的视角去规划技术栈的组合,比如结合当前产品的现状考虑是使用 dubbo?还是 springcloud?作为微服务治理的底层框架。甚至为了满足快速的上线、迭代和交付,直接以 springboot 为基座进行开发,后续再引入新的技术栈等…所以在谈论某个业务场景具体的技术解决方案时不可一概而论,而是需要结合产品和业务的现状综合评估,以限流来说,在下面的不同的技术架构下具体在选择的时候可能也不一样固定窗口算法滑动窗口算法令牌桶算法。原创 2023-07-20 11:07:32 · 2605 阅读 · 0 评论 -
【Sa-Token】SpringBoot 整合 Sa-Token 快速实现 API 接口签名安全校验
/ 参加完活动后,发送余额 Long userId = 1L;// 计算 sign String sign = md5("money=" + money + "&userId=" + userId + "&key=" + secretKey);注意:此处计算签名时,需要将所有参数按照字典顺序依次排列(key除外,挂在最后面)原创 2023-07-14 11:33:28 · 3613 阅读 · 0 评论 -
【重试】Java 中的 7 种重试机制
如果是基于 Spring 的项目,使用 Spring Retry 的注解方式已经可以解决大部分问题如果项目没有使用 Spring 相关框架,则适合使用 Google guava-retrying:自成体系,使用起来更加灵活强大【转载】Java重试机制Java教程:重试实现高可用一览。原创 2023-06-28 15:05:37 · 12263 阅读 · 5 评论 -
【SpringBoot】7 种实现 HTTP 调用的方式
作者在工作中,遇到一些需要调用三方接口的任务,就需要用到 HTTP 调用工具。原创 2023-06-21 10:16:20 · 9889 阅读 · 0 评论 -
【SpringBoot】使用 OkHttp 完成网络请求
依赖:工具类:接口:请求测试:原创 2022-12-04 20:18:41 · 2416 阅读 · 0 评论 -
【SpringBoot】Spring Boot 实现接口防刷
AOP + 自定义注解 + Redis 实现接口防刷。原创 2022-11-04 15:50:49 · 656 阅读 · 0 评论 -
【SpringBoot】Spring Boot 实现接口的幂等性
调用方在调用接口的时候先向后端请求一个全局 ID(Token),请求的时候携带这个全局 ID 一起请求(Token 最好将其放到 Headers 中),后端需要对这个 Token 作为 Key,用户信息作为 Value 到 Redis 中进行键值内容校验,如果 Key 存在且 Value 匹配就执行删除命令,然后正常执行后面的业务逻辑。如果不存在就抛异常,返回重复提交的错误信息。针对客户端连续点击或者调用方的超时重试等情况,例如:提交订单,此种操作就可以用 Token 的机制实现防止重复提交。原创 2022-11-04 12:03:01 · 818 阅读 · 1 评论 -
【SpringBoot】三种常见的数据脱敏方案
大家可以根据自己的想法添加其它的脱敏规则(我只想脱敏一部分数据,并指明从哪开始,从哪结束)。要做成可配置多策略的脱敏操作,要不然一个个接口进行脱敏操作,重复的工作量太多。定义数据脱敏注解和数据脱敏逻辑的接口, 在返回类上,对需要进行脱敏的属性加上,并指定对应的脱敏策略操作。4、自定义 AnnotationIntrospector,适配我们自定义注解返回相应的Serializer。由于 Java 8 中新增了许多函数式接口,所以,这里就不需要我们自定义接口了,可以直接使用函数式接口。方案三、自定义注解实现。.原创 2022-09-01 15:31:20 · 9798 阅读 · 3 评论 -
【SpringBoot】SpringBoot 集成 Minio、OSS
MinIO 是一款基于 Go 语言发开的高性能、分布式的对象存储系统。简单来说:就是可以存视频、图片 等。可以创建一个 bucket。原创 2022-08-31 16:42:21 · 1214 阅读 · 0 评论 -
【SpringBoot】SpringBoot 读取配置文件中的自定义属性的 5 种方法
SpringBoot 配置文件的格式有两种:yml、properties。有些方法都适用,但有些方法就有针对性了。注解可以用来指定读取某个配置文件,比如指定读取。就是使用 Properites 对象读取。读取配置文件(properties)注入到类中就可以使用它的。方法来获取某个配置项的值了。...原创 2022-08-30 16:25:34 · 3359 阅读 · 0 评论 -
【SpringBoot】工具类中如何获取 Spring 的 Bean
1、在一个没有被 Spring 管理的 Bean 中,我们要去使用被 Spring 管理的 Bean,该怎么做?很显然,@Autowired 注解不管用。因为扫描不到 @Autowired,所在的类并未被 Spring 管理。2、在工具类中,在一个静态方法中需要调用被 Spring 管理的 Bean,@Autowired 也无法注入静态属性。假若说,我需要在一个工具类中获取 fileConfig的 Bean。其实就是:要获取到 Spring 容器的 Bean!上述获取 Bean 可以通过名称、类型!...原创 2022-08-30 15:49:08 · 1727 阅读 · 0 评论 -
【SpringBoot】 启动后执行方法的五种方式
项目初始化完毕后,才会调用方法,提供服务。注意监听的事件,通常是 ApplicationStartedEvent 或者 ApplicationReadyEvent,其他的事件可能无法注入 bean。在项目初始化过程中,就会调用此方法。如果业务逻辑执行很耗时,可能会导致项目启动失败。1、实现 CommandLineRunner 接口。2、实现 ApplicationRunner 接口。5、实现 InitializingBean 接口。项目初始化完毕后,才会调用方法,提供服务。的大小顺序执行,小的先执行。...原创 2022-08-16 14:24:51 · 16099 阅读 · 0 评论 -
【SpringBoot】三种方式,教你读取 jar 包中的 resources 目录下的文件
但部署后,项目是通过打成 jar 包运行的,里面的文件是没有实际路径的(只有相对于项目名的相对路径)。此方法默认也是从 classpath 路径(即:src 或 resources 路径下)下查找文件的,但它的路径前为什么需要加 “/” 呢?此方法默认是从 classpath 路径(即:src 或 resources 路径下)下查找文件的,所以,路径前不需要加 “/”。因为最后肯定是打包部署的,所以掌握针对后者的这种方式来读取文件是很有必要的。这个是跟要读取的文件与当前.class 文件的位置有关。...原创 2022-08-07 14:44:19 · 34808 阅读 · 4 评论 -
SpringBoot 集成 RabbitMQ(下)
这篇文章内容:SpringBoot 集成 RabbitMQ 的其它模式:工作队列模式、1. 工作队列模式 WorkQueue工作队列模式:一个生产者对应多个消费者1.1 生产者生产者工程结构图:application.ymlserver: port: 8081spring: rabbitmq: host: 127.0.0.1 port: 5672 username: guest password: guest virtual-host: /原创 2021-10-19 20:17:27 · 378 阅读 · 0 评论 -
SpringBoot 集成 RabbitMQ(上)
接下来使用 SpringBoot 来集成 RabbitMQ1. 简单模式原创 2021-09-26 11:33:43 · 2043 阅读 · 0 评论 -
【SpringBoot】SpringBoot 中使用定时任务
## 1. SpringBoot 集成定时任务1、引入依赖SpringBoot 已经默认集成了定时任务的依赖,只需要引入基本的依赖就可以使用定时任务。```xml org.springframework.boot spring-boot-starter-web```原创 2022-02-11 15:41:08 · 1532 阅读 · 0 评论 -
【SpringBoot】SpringBoot 中使用 @Async 实现优雅地异步调用
在 Java 中,当我们需要执行异步操作时,往往会去创建一个新线程去执行,如下:```javapublic class App { public static void main( String[] args ) { new Thread(() -> { System.out.println(Thread.currentThread().getName() + ":异步任务"); }).start(); }}```Spring原创 2022-02-11 09:29:22 · 13455 阅读 · 4 评论 -
【SpringBoot】SpringBoot + JWT+ Mybatis 整合
现需要完成以下需求:用户执行登录接口之后,需要生成一个 token 返回给前端。之后,前端在请求头中携带着 token 去请求其它的后台接口。完成这个需求之前,咱们先来了解下什么是 JWT 吧。原创 2022-02-06 20:37:22 · 1895 阅读 · 0 评论 -
【SpringBoot】SpringBoot + Shiro + Mybatis + Thymeleaf 整合
在 SpringBoot 工程中,通过集成 Shiro 安全框架来完成对当前登录人的权限的控制。需求如下:一个页面 index.html 上有 ADD、UPDATE 链接,点击 ADD 链接,则跳转到 add.html 页面;UPDATE 链接同理。现在有两个用户:root、tom。root 用户只有 ADD 访问与操作权限,tom 用户则只有 UPDATE 访问与操作权限。如下图:页面内容如下(没有权限判断):root 用户登录:当然,这个 ADD 链接是可以点击的,点击之后,便显示原创 2022-02-06 13:15:37 · 1288 阅读 · 0 评论 -
【SpringBoot】SpringBoot + SpringSecurity + Thymeleaf 整合
在 SpringBoot 工程中,借用 SpringSecurity 权限框架来对登录用户所拥有的不同的权限来显示不同的页面。并且,如果有用户已登录,则右上角显示用户名和其角色。如下图:admin 用户权限最大,显示所有页面内容:zzc 用户只有两个角色权限,所以,只显示部分内容:没有用户登录时,页面显示如下:【首页】、【登录】下方的内容都没有显示。好了,需求已经了解清楚了,那咱们就直接上代码了哈。【文末有源码】【开发环境】:IDEA-2020.2SpringBoot-2.5.5原创 2022-02-02 14:17:14 · 2028 阅读 · 0 评论 -
【SpringBoot】SpringBoot + Mybatis + Thymeleaf 整合
这篇博文将前两篇博文的知识内容给串一串,展示如何将之前零碎的东西给整合成一个小的、完整的东西,并且,介绍一个前端模板引擎 ------ Thymeleaf示例:这是一个对用户列表进行增删改查的实例,可支持文件本地上传sql 文件:实体类:【开发环境】:IDEA-2019.1SpringBoot-2.1.1.RELEASEMAVEN-3.5.3MySQL-5.7Thymeleaf1、引入依赖:<dependencies> <dependency>原创 2022-01-26 16:27:14 · 2984 阅读 · 2 评论 -
【SpringBoot】SpringBoot 中使用 Mybatis 来操作数据库
【开发环境】:IDEA-2019.1SpringBoot-2.1.1.RELEASEMAVEN-3.5.3MySQL-5.71. SpringBoot 中 Mybatis 的使用在 SpringBoot 中使用 Mybatis 需要引入一个 starter:<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-st原创 2022-01-23 17:48:28 · 2815 阅读 · 0 评论 -
【SpringBoot】SpringBoot 中对静态资源的访问及映射本地文件
创建一个Java类并实现接口,重写方法// 访问路径以 “/mystatic” 开头时,会去 “mystatic” 路径下找静态资源 registry . addResourceHandler("/mystatic/**") . addResourceLocations("classpath:/mystatic/");} }在下新建mystatic文件夹,并放入一张图片1.jpg。如果我们将修改为/**,这时,就是 SpringBoot 默认配置相同,则会覆盖系统的默认配置。可以多次调用。原创 2022-01-22 12:21:45 · 9199 阅读 · 0 评论 -
【SpringBoot】使用 SpringBoot 手把手教你打出优雅的后端接口
前言一个后端接口大致分为四个部分组成:接口地址(url)、接口请求方式(get、post等)、请求数据(request)、响应数据(response)。如何构建这几个部分每个公司要求都不同,没有什么“一定是最好的”标准,但一个优秀的后端接口和一个糟糕的后端接口对比起来差异还是蛮大的,其中最重要的关键点就是看是否规范!此文就一步一步演示如何构建起一个优秀的后端接口体系,体系构建好了自然就有了规范,同时再构建新的后端接口也会十分轻松。开发环境IDEA-2020.2.4MAVEN-3.6Sprin原创 2022-01-18 21:32:05 · 1260 阅读 · 0 评论 -
【SpringBoot】SpringBoot 中使用自定义注解来实现接口参数校验
在后台接口做参数校验,一般有两种方案:hibernate-validatorAOP + 自定义注解 实现方法级的参数校验开发环境:JDK:1.8SpringBoot:2.5.1IDEA:2019.1.11. hibernate-validatorhibernate-validator 是 Hibernate 项目中的一个数据校验框架,是 Bean Validation 的参考实现。使用 hibernate-validator 能够将数据校验从业务代码中脱离出来,增加代码可读性。同时转载 2022-01-02 17:27:23 · 2259 阅读 · 1 评论 -
【SpringBoot】SpringBoot 中的 切面 AOP + 自定义注解
添加一个自定义注解@MyAopString value() default "自定义注解拦截";@MyAop@Slf4j@Aspect@Componentlog.info("调用前连接点方法为:" + methodName + ",参数为:" + JSON.toJSONString(args));@MyOperationLog(methodName = "testLog", currentUser = "admin", operate = "查询")(自定义的)。原创 2021-12-23 21:35:48 · 7366 阅读 · 4 评论 -
【SpringBoot】由一个 @RequestBody 注解引起了我的深思
1. HTTP 协议HTTP 协议 是一个应用层协议,它是 Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。HTTP 协议 是一个无状态的请求/响应协议。请求消息对象 Request客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行请求头部空行请求数据(请求体 body)如下图:【注意】: &nb原创 2021-11-28 16:56:56 · 5215 阅读 · 0 评论 -
【HttpClient】在 SpringBoot 中使用 HttpClient 实现 HTTP 请求
越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。虽然在 JDK 的 java.net 包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。...原创 2021-11-25 22:19:21 · 16460 阅读 · 3 评论 -
【HttpURLConnection】使用 HttpURLConnection 后台模拟实现 HTTP 请求
在 SpringBoot 工程中,通过 HttpURLConnection 类来实现 HTTP 请求吧。类 HttpURLConnection 是 JDK 自带的。它的应用场景:在自己的工程中,你想调用第三方接口(外部接口)来获取数据,那么 HttpURLConnection 类就可以实现。接下来通过两个小案例来进行实现吧。开发步骤:先开发外部接口再开发内部接口在内部接口中,通过类 HttpURLConnection 去调用外部接口为了测试方便,我这里就将外部接口、内部接口,全写在通过一个原创 2021-11-21 19:07:59 · 2130 阅读 · 0 评论 -
【Zip】使用 SpringBoot 实现 zip文件的导入和导出
了解到有两种解压 zip 文件的方式:org.apache.tools.zip.ZipFile ;SpringBoot 自带的 net.lingala.zip4j.core.ZipFile。这里选择第二种。原创 2021-11-18 22:43:25 · 5362 阅读 · 1 评论 -
【PDF】使用 SpringBoot 导出 PDF 文件
使用 iText 导出 pdf 表格iText 是一种生成 PDF 报表的 Java 组件,先把 jar 包下下来,maven 依赖如下:<dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.0.6</version></dependency>1. Hello World原创 2021-11-09 23:14:49 · 5866 阅读 · 7 评论 -
【File】使用 SpringBoot 实现文件的上传与下载
文件的上传与下载在实际项目中用得挺多,所以,今天就在这里总结下。这篇博客不仅仅是完成一个文件上传/下载的功能,更重要的是规范编码吧:日志记录、入参/返参校验、方法职责单一等。开发环境:1.IDEA 2020.22.Maven 3.6.03.SpringBoot 2.0.0.RELEASE1. 单个文件的上传新建一个 SpringBoot 工程,工程结构图如下:POM 依赖:<dependency> <groupId>org.springframework.bo原创 2021-11-12 00:12:41 · 4945 阅读 · 5 评论 -
【Excel】使用 SpringBoot 实现 Excel 文件的导入与导出
为了大家能更好地理解这篇博文,在看之前,建议去看看我的上一篇博文:【File】使用 SpringBoot 实现文件的上传与下载这两篇博文互有联系:文件的导入就是文件的上传;文件的导出就是文件的下载。至于为什么是 导入/导出 Excel 文件呢?因为 Excel 文件用的频率更多吧。顺便来复习下通过 EasyExcel 来操作 Excel 文件。...原创 2021-11-14 20:46:39 · 32025 阅读 · 0 评论