- 博客(38)
- 收藏
- 关注
原创 Spring Boot使用JDK 21虚拟线程
JDK 21引入的(Virtual Threads)是 Project Loom 的一部分,旨在显著简化并发编程并提高 Java 应用的可扩展性。
2024-11-29 18:03:18
493
原创 Spring Boot上传文件Amazon S3桶实现
S3中的存储是通过桶(bucket)来组织和管理的。桶是存储对象(文件和元数据)的容器,每个桶的名称在整个S3系统中必须唯一,并且不能包含在另一个桶中。用户可以将数据上传到S3桶中,并通过唯一的对象键来访问这些数据。
2024-10-10 18:58:04
1621
1
原创 Firebase Cloud Messaging实现浏览器消息提醒
总的来说,Firebase Cloud Messaging 是一项功能强大、易于使用的消息传递服务,为开发者提供了一种简单而可靠的方式,用于向移动设备和 Web 应用程序发送通知、消息和数据,从而提高应用的用户参与度和体验。FCM 支持发送不同类型的消息,包括通知消息(通知栏消息)、数据消息(仅携带数据,不显示通知)、数据/通知混合消息等。FCM 提供了丰富的消息分析功能,可以帮助开发者了解消息的发送情况、接收情况和用户行为,以便优化消息推送策略。2、引用Maven依赖。
2024-04-16 18:41:01
786
原创 Java DelayQueue实现延时队列
队列中的元素按照延时时间的顺序排列,即延时时间最短的元素位于队列的头部,延时时间最长的元素位于队列的尾部。提供了一种方便的机制来实现延时任务调度和处理延时元素,是 Java 多线程编程中的重要组件之一。是 Java 中的一个特殊队列,它是一个无界阻塞延时队列,用于存放实现了。的内部是使用优先级堆来实现的,可以确保队列中的元素按照延时时间的顺序排列。每个元素都有一个延时时间,只有在延时时间到期后才能被取出。这些元素只有在其指定的延时时间到期后才能被取出。提供了阻塞式的取元素操作,如果队列为空,调用。
2024-04-09 11:41:09
535
原创 Spring WebFlux响应式实现WebFilter解决跨域问题
是 Spring Framework 中处理 Web 请求的关键接口之一,它为开发者提供了一种灵活、强大的方式来拦截、处理和增强 Web 请求的处理流程,适用于基于响应式编程模型的 Spring Web 应用程序。适用于基于响应式编程模型的 Spring 应用程序,可以与 Spring WebFlux、Spring WebFlux.fn 等组件集成,实现非阻塞、响应式的请求处理。更加适用于响应式编程模型,可以轻松地与 Spring WebFlux、Spring WebFlux.fn 等响应式模块集成。
2024-04-08 18:14:54
1058
原创 SpringBoot整合Logback日志框架
总的来说,Logback 是一个功能强大、灵活易用的日志框架,适用于各种规模的 Java 项目,能够帮助开发者实现高效、灵活的日志记录和管理。Logback 提供了丰富的过滤器功能,可以根据日志消息的内容、级别等条件对日志进行过滤和筛选,灵活控制日志的输出。Logback 允许开发者自定义日志的输出格式,可以根据需要定义自己的日志布局模式,满足不同项目的日志格式需求。Logback 支持异步日志记录,可以提高日志记录的性能,避免日志记录操作对应用程序性能的影响。1、引用Maven依赖。
2024-04-08 17:40:27
882
2
原创 Spring Boot整合MyBatis-Plus以及实现分页
MyBatis-Plus 是 MyBatis 的一个增强工具包,它在原有的 MyBatis 框架之上提供了更多便捷的功能和增强,有助于简化开发流程、提高开发效率。MyBatis-Plus 提供了代码生成器工具,能够根据数据库表结构自动生成 Entity、Mapper、Service、Controller 等代码,大大减少了开发者的工作量。MyBatis-Plus 提供了乐观锁和逻辑删除的功能,开发者可以通过简单的配置,在实体类中实现乐观锁和逻辑删除的功能,提高数据安全性和稳定性。4、测试Service。
2024-04-08 14:12:01
904
原创 Spring Boot实现Filter解决跨域和请求类型转换问题
Filter 在 Web 开发中有广泛的应用,常见的应用场景包括身份验证与授权、日志记录与监控、字符编码转换、数据压缩与解压、防止 XSS 攻击、跨域请求处理等。总的来说,Filter 是 Java Web 开发中非常有用的一种组件,可以通过它实现各种与请求和响应相关的功能,提高 Web 应用程序的可靠性、安全性和性能。:多个 Filter 可以形成一个过滤器链,一个请求在被 Servlet 处理之前会经过这个链上的所有 Filter 的处理,然后再到达 Servlet。
2024-04-06 21:40:13
784
原创 Hutool实现用户密码加盐(Salt)工具类
但是加盐后,即使相同的密码,由于盐的不同而得到的哈希值也是不同的,这样一来,攻击者需要为每一个不同的盐重新计算对应的哈希值,大大增加了破解密码的成本和难度。总的来说,密码加盐是一种增强密码安全性的重要手段,通过引入随机生成的盐值,可以有效防止彩虹表攻击和碰撞攻击,提高密码的复杂度和难度,增加破解密码的成本和时间,从而保护用户的密码安全。提高密码的复杂度:盐是一个随机生成的字符串,它会增加密码的长度和复杂度,使得即使用户使用简单密码,也会因为盐的存在而变得复杂起来,增加破解密码的难度。2、密码加点盐工具类。
2024-04-01 13:15:04
1901
原创 Spring Boot实现HandlerInterceptor拦截器
HandlerInterceptor 是 Spring 框架提供的一个接口,用于拦截请求的处理过程,可以在请求处理前、请求处理后以及请求完成后进行相应的处理。它允许开发人员在请求进入控制器方法之前或之后执行一些额外的操作,比如日志记录、权限验证、请求参数预处理等。通常情况下,HandlerInterceptor 用于实现一些横切关注点,比如日志记录、权限验证、请求参数预处理等。通过实现该接口,开发人员可以方便地在不同的处理阶段插入自定义的逻辑,从而实现更灵活、可扩展的请求处理流程。
2024-04-01 13:02:09
648
原创 Spring Boot GraphQL拦截权限验证以及异常拦截封装
GraphQL 拦截权限验证和异常拦截封装是在 GraphQL 服务中常见的一种需求,用于保护 GraphQL 接口免受未经授权的访问,并提供友好的错误信息处理。
2024-03-22 13:00:27
820
原创 Spring Boot项目集成GraphQL
它提供了一种更高效、强大和灵活的方式来与Web服务进行通信,相比于传统的RESTful API,GraphQL具有更多的优势。与传统的RESTful API相比,GraphQL通常只暴露一个端点,使得客户端无需处理多个端点或版本控制,简化了API的维护和使用。由于GraphQL查询的灵活性,缓存数据变得更加复杂,因为同一个查询可能会请求不同的数据集合,这可能会增加缓存的复杂性和成本。GraphQL拥有丰富的工具生态系统,包括用于开发、测试和调试GraphQL API的各种工具和库,提高了开发效率和质量。
2024-03-20 14:33:27
864
原创 Spring WebFlux微服务之间的调用Reactivate-Feign响应式编程
在传统的编程模型中,通常使用回调函数或 Future/Promise 来处理异步操作,而在响应式编程中,则使用流(Stream)来表示数据流,并提供了丰富的操作符来处理这些数据流。在使用 Feign 客户端进行服务间通信时,Reactivate-Feign 可以将方法的返回类型从传统的阻塞式类型(例如 ResponseEntity)转换为响应式类型(例如 Mono 或 Flux),从而支持异步响应式编程。(使用用方式和OpenFeign一样,只是注解不一样,注解参数和使用一样)1、引用Maven依赖。
2024-03-07 13:06:02
1798
2
原创 Spring WebFlux微服务之间的调用WebClient响应式编程
例如,可以设置请求和响应的编解码器、添加过滤器(filter)来修改请求或响应、设置连接器(connector)来配置底层的HTTP客户端等。是一种用于进行HTTP请求的非阻塞式客户端,它提供了一种简洁而灵活的方式来进行服务之间的通信。实例的基本属性,例如设置基本URL、设置连接超时、配置请求和响应的编解码器等。实例的工具,它提供了丰富的配置选项,可以根据具体需求来定制和管理。类似的HTTP客户端,并且具有更好的性能和更多的扩展能力。是一个常用的HTTP客户端,用于发送HTTP请求。在Spring框架中,
2024-03-07 11:26:14
1131
原创 Spring WebFlux全局异常拦截AbstractErrorWebExceptionHandler
在Spring WebFlux中,异常可能会在请求处理过程中产生,比如控制器方法中的异常、过滤器中的异常或者拦截器中的异常等。它是WebExceptionHandler接口的抽象实现,用于捕获和处理在Web请求处理过程中发生的异常。通过继承AbstractErrorWebExceptionHandler,开发人员可以灵活地实现自定义的异常处理逻辑,比如记录异常信息、返回特定格式的错误响应等,从而提高Web应用程序的稳定性和用户体验。
2024-03-06 19:23:33
1710
原创 Spring WebFlux集成Redis响应式编程
它采用了响应式编程的思想,允许开发者以异步、非阻塞的方式与 Redis 进行交互。传统的 Redis 客户端通常采用同步或阻塞式调用,这意味着当客户端发送请求给 Redis 服务器时,它会等待直到收到响应。通常,响应式 Redis 会与响应式编程框架(如 Reactor、RxJava)结合使用,以提供一套异步的 API,用于执行 Redis 命令并处理结果。总的来说,响应式 Redis 是一种使用响应式编程模型来操作 Redis 数据库的方式,旨在提高系统的性能和响应性,特别是在高并发、高负载的场景下。
2024-03-06 18:24:31
932
1
原创 Spring WebFlux整合Spring Data R2DBC实现响应式编程
Spring WebFlux: Spring WebFlux是Spring Framework 5中引入的响应式编程框架。与传统的Spring Data JPA不同,Spring Data R2DBC支持异步和非阻塞的数据库访问,与Spring WebFlux完美契合,从而构建全栈响应式应用程序。综上所述,Spring WebFlux和Spring Data R2DBC为构建响应式应用程序提供了强大的支持,使开发人员能够利用异步和非阻塞的编程模型构建高性能、弹性的应用程序,并与关系型数据库进行高效交互。
2024-03-06 17:09:41
801
原创 Spring Boot项目集成PowerJob
PowerJob是一种开源的任务调度框架,旨在帮助企业管理和执行各种类型的任务,包括定时任务、异步任务、数据处理任务等等。: 对于需要大规模数据处理的场景,如数据清洗、ETL等,PowerJob提供了高性能的分布式任务调度和并行处理能力,提高数据处理效率和系统的可扩展性。: 对于有依赖关系的任务,如数据处理流程、工作流程等,PowerJob提供了灵活的依赖任务管理功能,确保任务的顺序执行和数据一致性。: PowerJob提供了严格的权限控制机制,保障任务调度系统的安全性和稳定性,防止未授权的访问和操作。
2024-03-06 11:56:11
1520
原创 Spring Boot项目集成Pulsar
由Yahoo开发,并随后作为Apache软件基金会的一部分开源,Pulsar拥有独特的架构,将消息存储和消息处理分开,实现了出色的可扩展性和可靠性。随着物联网设备生成海量数据的增加,Pulsar为物联网应用提供了一个理想的平台,用于实时接收、处理和分析物联网数据流。凭借其可扩展的架构、可靠的消息传递和灵活的特性,Pulsar使组织能够构建强大的实时数据处理管道,推动创新和价值创造。作为Apache软件基金会的一部分,Pulsar受益于充满活力的社区和丰富的集成和扩展生态系统。5、pulsar公用方法。
2024-03-06 11:28:54
2206
5
原创 JAVA创建枚举类
使用int、String类型switch时,当出现参数不确定的情况,偶尔会出现越界的现象,这样我们就需要做容错操作(if条件筛选等),使用枚举,编译期间限定类型,不允许发生越界。由于常量值地址唯一,使用枚举可以直接通过“==”进行两个值之间的对比,性能会有所提高。枚举可以让你代码看起来很舒服,而且常量统一管理起来,当项目很大的时候很容易管理。使用枚举类型可以避免使用硬编码的魔法数值,提供了更好的代码可读性和可维护性。4、去除equals两者判断。可以减少参数传递的错误性。5、Switch语句优势。
2023-10-30 15:06:53
397
1
原创 Spring Boot获取yml文件配置@ConfigurationProperties
【代码】Spring Boot获取yml文件配置@ConfigurationProperties。
2023-10-30 14:47:48
449
1
原创 CART 决策树算法JAVA
1、一个枚举类,用来指示特征是数值型的还是字符型的。4、CART 决策树算法对象。3、训练数据集存放对象。5、测试运行算法的类。
2023-10-20 16:44:57
276
1
原创 Spring MVC切面ResponseBodyAdvice对返回信息权限数据过滤
ResponseBodyAdvice是Spring MVC框架中的一个接口,用于全局处理Controller返回的响应数据。它提供了一个自定义处理响应体的机制,可以在响应体写出之前或者之后,对响应体进行额外的处理或者修改,是一种典型的AOP编程方式。
2023-10-19 09:22:08
344
1
原创 设计模式—策略模式
策略模式属于行为型模式,行为型用来识别对象之间的常用交流模式并加以实现。当然也有缺点的,缺点就是得提前约定好规范,从而触发这样的业务场景。1,优化代码逻辑结构性,可以减少分支判断。3,增加代码复用和业务逻辑分离和优化。2,增加代码程序拓展和移植。
2023-10-18 17:54:21
204
1
原创 设计模式—工厂模式
该设计模式在实际业务开发中用的比较多,比如像一些业务中台项目中使用广泛。增加代码可读性以及高维护性,增加代码美观以及减少代码量。
2023-10-18 14:37:43
211
1
原创 Spring Boot集成RocketMQ
6、支持定时消息和延迟消息:Broker中由定时消息的机制,消息发送到Broker中,不会立即被Consumer消费,会等到一定的时间才被消费。生产者发送指令到MQ中,然后下游订阅这类指令的 消费者会收到这个指令执行相应的逻辑,整个过程与具体业务无关,抽象成了一个发送指令,存储 指令,消费指令的过程。5、支持顺序消息:消息在Broker中是采用队列的FIFO模式存储的,也就是发送是顺序的,只要保 证消费的顺序性即可。1、亿级消息的堆积能力,单个队列中的百万级消息的累积容量。RocketMq通用功能。
2023-10-17 16:44:23
364
原创 Spring AOP实现接口访问日志信息打印
通过AOP实现日志打印,可以减少代码量以及提高代码可读性、记录方法的执行时间,方便后续程序的优化、方便发现问题和定位问题。3、切面实现日志打印类。
2023-10-17 16:01:02
376
原创 Spring AOP切面+Redis Zset实现滑动窗口限流(Lua脚本)
限流最直接的好处防止高并发情况下因服务器资源过载导致的系统崩溃情况发生,具体来说,限流可以保证使用有限的资源提供最大化的服务能力,按照预期流量提供服务,超过的部分将会拒绝服务、降级等处理。5、保证Redis中操作原子性我们可以通过Lua脚本实现。放在Redis配置类。
2023-10-17 15:40:28
843
原创 Hutool时间相关工具类
2、Date、long、Calendar之间的相互转换。7、Spring Boot日期格式化配置。1、引用Maven依赖。
2023-10-17 09:33:39
604
原创 Jackson序列化实现数据脱敏
属性字段上添加@Sensitive(type = "MOBILE")通过注解序列化的形式进行数据脱敏,减少代码量增加代码可读性。
2023-10-16 18:11:51
260
1
原创 ThreadPoolTaskExecutor创建线程池
线程池是一种利用池化技术思想来实现的线程管理技术,主要是为了复用线程、便利地管理线程和任务、并将线程的创建和任务的执行解耦开来。我们可以创建线程池来复用已经创建的线程来降低频繁创建和销毁线程所带来的资源消耗。2、方法上添加@Async("threadPoolTaskExecutor")注解实现异步操作(常见失效原因:不是public方法、返回不是void或者Future、使用static修饰)3、个人建议不要使用SpringBoot默认线程池,可能会造成OOM。
2023-10-16 17:25:12
462
1
原创 ThreadLocal存储当前线程变量给到全局使用
类,通过它可以在指定的线程中存储数据,数据存储以后,只能在指定的线程中获取存储的数据,对于其他线程来说则是无法获取到的。3、当遇到使用线程池时可以使用阿里的TransmittableThreadLocal实现数据传递。2、遇到子线程可以通过InheritableThreadLocal实现数据传递共享。1、通过ThreadLocal实现当前线程共享。ThreadLocal是一个线程内部的。
2023-10-16 16:31:56
307
1
原创 通过Profiles实现对开发环境和测试环境Nacos配置进行切换
1、bootstrap.yml文件相关代码。2、pom.xml文件相关代码。
2023-10-16 15:36:18
486
1
原创 Aspect切面实现Redisson的Lock和TryLock
在分布式系统中,锁的管理变得更加复杂,需要考虑多个节点之间的同步。Aspect切面可以用于在代码中以一种优雅的方式实现对Redisson分布式锁的切面功能。总体而言,使用AOP实现Redisson的Lock和TryLock可以提高代码的可读性、可维护性,并降低引入错误的风险。通过AOP,可以将分布式锁的管理逻辑集中在一个切面中,而不是分散在业务代码中。AOP允许在一个地方定义锁的获取和释放策略,使得对分布式锁的管理更加集中。AOP切面可以在多个业务模块中重用,而不需要在每个模块中重复实现相同的锁管理逻辑。
2023-10-16 15:18:01
498
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人