自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Spring Boot RabbitMQ多数据源配置

在构建复杂的应用程序时,经常需要与多个数据源进行交互。这可能包括连接多个数据库、消息队列或其他数据存储系统。RabbitMQ 是一个流行的消息队列系统,它通过消息队列实现了应用程序之间的松耦合,适用于异步任务处理、解耦、削峰填谷等场景。本篇博客将介绍如何在 Spring Boot 中配置和管理多个 RabbitMQ 数据源,以满足不同的应用需求,并提供示例代码首先,在 文件中添加 RabbitMQ 的 Spring Boot Starter 依赖,以便引入 RabbitMQ 相关的库和功能。2. 抽象类

2023-09-06 08:00:00 588 1

原创 深入解析CompletableFuture的功能和用法

是 Java 8 中引入的一个类,它实现了接口,提供了一组丰富的方法来处理异步操作和多个任务的结果。它支持链式操作,可以方便地处理任务的依赖关系和结果转换。相比于传统的Future接口,更加灵活和强大。掘金博客我们还可以通过指定自定义线程池来创建 CompletableFuture 对象,以满足特定的并发需求。// 执行任务的代码在上述示例中,我们通过创建了一个固定大小为 10 的自定义线程池,并将其传递给方法来执行异步任务。

2023-07-14 16:00:00 611 1

原创 当@Value遇到静态属性:解决静态属性无法注入的问题

这次的开发内容主要是对外暴露一个图片路径,数据库中存放的是图片的相对路径,因此每次查询的时候都是调用封装的工具类进行域名拼接,而域名就是在工具类中通过@Value进行注入的。在工作中对于一些配置信息或者易变化的属性,我们通常会使用@Value进行属性注入。这样当属性变化时,我们可以直接修改配置文件,而不需要在代码中进行修改。最近接到的一个开发任务,就使用到了@Value注解对属性进行注入。的属性进行注入,它能够被用在属性,构造方法,普通方法上。请记住,即使没有要初始化的内容,这些方法也会运行。

2023-06-07 09:16:45 435 1

原创 Arrays.asList():隐藏的陷阱,你避开了吗?

上述代码中,我们首先使用Arrays.asList()方法将一个数组转换为一个List对象,然后使用ArrayList的构造方法,将这个List对象转换为一个java.util.ArrayList对象,最后可以向这个ArrayList对象中添加元素。Arrays.asList()方法是将数组转换为List的方法,它返回一个List对象,但这个List对象并不是java.util.ArrayList对象,而是Arrays内部的ArrayList对象。方法,我们可以将数组中的元素逐个添加到一个新的。

2023-06-07 09:14:32 334 1

原创 深入理解Spring的@Async注解:实现异步方法调用

在当今高速发展的应用开发领域,对于提升系统性能和响应能力的需求越来越迫切。而异步编程作为一种解决方案,已经成为现代应用开发中的一项重要技术。本篇博客将带您深入探究 Java 中的 @Async 注解,揭示其强大的异步执行能力和精妙的实现机制。异步编程是一种编程模式,通过将任务分解为多个子任务,并在后台或并行线程中执行这些子任务,以提高程序的性能和响应能力。@Async 注解是 Spring 框架提供的注解,用于将方法标记为异步执行的方法。

2023-06-06 09:29:36 3562 2

原创 深入了解Aviator表达式引擎:高性能的轻量级计算引擎

Aviator是一个独立的表达式解析引擎,旨在执行数学和逻辑表达式。它提供了简单易用的语法和API,使得表达式解析和计算变得简单而直观。通过使用Aviator,我们可以高效地执行各种数学和逻辑运算,从而简化我们的代码逻辑导入Aviator库:首先,确保已将Aviator库正确导入到你的项目中。实现函数逻辑:定义你的自定义函数的逻辑。函数可以采用多个参数,并返回一个值。例如,假设你要实现一个名为"customFunction"的自定义函数,它接受两个参数,并返回它们的和。

2023-06-06 09:24:26 2982 1

原创 浅谈ThreadLocal

简介ThreadLocal 类是用来提供线程内部的局部变量。这种变量在多线程环境下访问(通过get和set方法访问)时能够保证各个线程的变量相对独立于其他线程内的变量。ThreadLocal 实例通常来说都是 private static类型的,用来关联线程和线程上下文。我们可以得知 ThreadLocal的作用是:提供线程内的局部变量,不同线程之间不会相互干扰,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或组件之间一些公共变量传递的复杂度。总结线程并发:在多线程并发的场景下传递数

2021-11-22 13:39:07 146

原创 Redis系列第一讲:Redis是单线程吗

Redis是什么个人博客链接:https://juejin.cn/post/7031953350157402148Redis是互联网技术领域使用最为广泛的存储中间件,全称“Remote Dictionary Service”(远程字典服务)。 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。Redis支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted se

2021-11-22 13:37:21 567

原创 Spring Boot 实现策略模式

介绍策略模式是一种行为模式,可以替代大量 if-else,使自己的代码更加优雅,更加容易进行扩展和兼容处理,可以帮我们解决具有同类但是行为有异的问题。结构Strategy定义所有支持的算法公共接口,Context使用这个接口调用具体策略类的实现StrategyImpl-X实现了Strategy接口,实现具体的算法Context上下文对象,屏蔽调用方对具体策略的直接调用,用于提取具体的策略案例现在需要实现一个不同的支付方式功能,有微信支付,支付宝支付,银行卡支付等,后续根据需求变动进

2021-04-12 12:50:23 521

原创 Spring 事件机制

简介Spring 的事件驱动模型基于 ApplicationEvent 和 ApplicationListener ,通过事件驱动的方式来实现业务模块之间的交互,交互的方式也有同步和异步两种。事件的发布者仅负责发布事件无需关心事件的接收者,有可能存在一个,也有存在多个接收者。同样,接受者也不知道是谁在发布事件。Spring的事件驱动模型主要由三部分组成,包括发送消息的生产者,消息,事件监听的消费者,这三者是绑定在一起的,有点类似于RabbitMQ的消息模型。内置事件Spring 提供了内置事件。Sp

2021-03-14 21:48:28 725

原创 MyBatis源码解析(二) 一级缓存

简介​ MyBatis提供了一级缓存的方案来优化数据库会话之间重复查询的问题,每个SqlSession都有自己的缓存,不同的会话之间的缓存互不影响。在MyBatis框架中一级缓存是通过HashMap实现的,默认作用范围是SqlSession。缓存命中场景​ 当执行条件完全相同的sql 时,就会命中MyBatis的一级缓存。那么条件完全相同是指那些条件呢?同一个会话参数相同,sql相同Statement相同未手动清空缓存(提交,回滚,update操作),缓存的作用域不是STATEMENT

2021-03-11 19:18:44 95

原创 MyBatis源码解析(一) Executor执行器

JDBC执行过程MyBatis的底层是JDBC实现的,首选回顾JDBC的执行过程注:新版本的JDBC提供了SPI,不需要显示的注册驱动,因此注册驱动这一步可以省略代码示例/** 注册数据库驱动 - 省略 **/// Class.forName("com.mysql.jdbc.Driver"); /** 第一步: 获取连接 */Connection connection = DriverManager .getConnection(URL, USERNA

2021-03-11 19:12:31 243 2

空空如也

空空如也

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

TA关注的人

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