- 博客(357)
- 收藏
- 关注

原创 「2024 博客之星」自研Java框架 Sunrays-Framework 使用教程
一个企业级Java脚手架,官方文档. http://sunrays.wiki/
2025-01-21 09:50:38
5244
110
原创 工厂+策略最佳实践
工厂+策略首先要有一个策略的枚举类,设置四种题目类型的枚举,然后一个策略接口,有两个方法,一个方法返回当前策略的枚举类型,另一个方法就是对目前题目类型的处理逻辑,去实现接口即可。接下来就要实现一个策略工厂,使用Spring的属性注入,将四种策略注入进来,然后在Bean的初始化阶段,将四种策略的List转换为Map,最后提供一个get方法,可以根据题目类型的枚举去获取不同的策略。
2025-02-18 08:40:25
2015
60
原创 策略+适配器模式详解
适配器模式其实就是自己有一个接口,然后第三方有一个服务,就需要一个适配器,这个适配器就需要实现自己的接口,然后聚合第三方的接口,来完成自己接口的对应功能。策略模式,首先要定义一个策略接口,然后每个具体的策略都要去实现这个策略接口,接下来就要有一个上下文,这个上下文可以根据不同的类型来设置不同的策略。
2025-02-18 08:38:30
353
4
原创 模板方法+生成器模式详解
*** Description: 抽象类*//*** 模板方法*/// 先调用抽象方法// 然后根据钩子方法的返回值来决定是否要调用基本方法/*** 基本方法(抽象类写好的方法)*/System.out.println("基本方法被调用!");/*** 抽象方法(交给子类去实现,也只有子类才可以访问)*//*** 钩子方法(用来改变模板方法的行为,子类可以去重写)* @return 是否调用基本方法,默认为true*/
2025-02-17 09:51:11
349
5
原创 三种工厂模式详解
工厂方法的核心就是一个工厂只负责创建一个对象。比如, MySQL和SQLServer对User表的SQL操作是不同的,所以就设计一个 MySQL工厂和一个SQLServer工厂,然后目的就是创建各自的操作User表的对象。现在可以开始造对象了,首先需要一个IUser接口,然后就是MysqlUser对象和SqlserverUser对象。最后不同的工厂,返回对应的对象即可。其实抽象工厂就是数据库工厂从创建一个表的CRUD变成了创建多个表的CRUD。简单工厂就是很直接的根据传入的类型去返回不同的对象而已。
2025-02-17 09:47:39
1284
35
原创 八种单例模式详解
单例模式共有八种,其中包含几种典型错误!第一种是通过静态变量来实现,也就是利用了类只加载一次的特性去完成的。第二种是通过静态代码块来实现对静态变量的赋值,本质跟第一种没有区别。第三种是想要实现一个懒汉式,就直接判断变量不为空的时候再赋值,但是会有线程安全问题。第四种是为了保证线程安全,就采用了同步方法,这样虽然可以解决问题,但是锁的粒度太大。
2025-02-16 11:02:56
1548
2
原创 HashMap源码分析
HashMap 主要用来存放键值对,它基于哈希表的 Map 接口实现,是常用的 Java 集合之一,是非线程安全的。HashMap可以存储 null 的 key 和 value,但 null 作为键只能有一个,null 作为值可以有多个JDK1.8 之前 HashMap 由 数组+链表 组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的(“拉链法”解决冲突)。JDK1.8 以后的HashMap。
2025-02-16 00:15:00
617
原创 ArrayList源码分析
ArrayList的底层是数组队列,相当于动态数组。与 Java 中的数组相比,它的容量能动态增长。在添加大量元素前,应用程序可以使用操作来增加ArrayList实例的容量。这可以减少递增式再分配的数量。ArrayList继承于,实现了ListCloneable这些接口。所谓模板方法,就是假设所有方法都有具体的实现了,并基于这些方法来编写更多的模板,他在这里就是假设基础的方法都有实现了,来封装了List的迭代器操作,使得子类在实现基础方法之后,直接调用方法即可获取迭代器。
2025-02-15 03:30:00
1158
3
原创 ThreadLocal源码分析
数组中定位,如果定位的位置已经有了数据,则会将未过期的数据放到最靠近此位置的。遍历散列数组,从开始位置向后探测清理过期数据,将过期数据的。实现原理是子线程是通过在父线程中通过调用。沿途中碰到未过期的数据则将此数据。数据距离正确的桶的位置更近一些。的构造方法中被调用。
2025-02-14 08:56:35
1386
35
原创 工具模块新增JSON格式化打印工具类
由于有的时候需要日志打印json,但是如果不格式化输出,json数据很难看,所以就使用这种方式进行json的格式化输出。
2025-02-10 13:07:53
759
9
原创 微信支付模块封装starter
3.WxPayProperties.java 微信支付的属性配置4.WxPayAutoConfiguration.java 初始化商户配置以及注入自定义的WxPayService5.spring.factories 指定自动配置类6.WxPayUtil.java 微信支付的工具类7.实体类1.WxPayCallback.java 微信支付回调实体类2.WxPayPrePayEntity.java 微信预支付的实体类8.WxPayService.java 自定义的微信Native支付
2025-02-09 09:27:39
1922
69
原创 日志模块自定义@SkipLogAspect注解跳过切面
*** Description: 跳过日志切面的注解ElementType . METHOD , ElementType . TYPE }) // 可以标注在类或方法上 @Retention(RetentionPolicy . RUNTIME) // 运行时生效 public @interface SkipLogAspect {/*** Description: 跳过日志切面的注解。
2025-02-06 09:31:10
1647
55
原创 env模块上线解决方案
由于只有一个.env文件,并且是放在项目根目录下,所以在上线时是不会被打包的,那么就需要通过区分多环境来读取不同位置的.env文件即可。
2025-02-06 09:30:05
349
3
原创 RabbitMQ持久化队列配置修改问题
先是检查了一下死信交换机的相关配置是不是有问题,但是发现没问题,然后注意到了这个持久化队列的配置,因为前一天刚做完对mq的消息可靠性的配置,就想起了持久化队列的概念,保留元数据,在启动时自动恢复,我一想,既然是自动恢复的,那么我新加的配置肯定不能生效啊,所以就将交换机和队列都删除,重新启动,就好了。他说可能跟交换机创建的顺序有关,我就将死信交换机的创建放到了前面,但是还是报同样的错误。
2025-02-01 09:25:17
1079
4
原创 项目架构调整,切换版本并发布到中央仓库
2.配置gpg1.架构调整1.sunrays-dependencies(统一管理依赖和配置)1.作为单独的模块2.填写发布到中央仓库的配置1.基础属性2.基本配置3.插件配置3.完整的pom.xml2.sunrays-framework(统一管理子模块)1.继承sunrays-dependencies2.发布基本配置3.完整的pom.xml3.其余模块都继承sunrays-framework,如果需要发布,则需要填写发布基本配置https://central.
2025-02-01 09:22:06
1158
原创 装饰SpringMVC的适配器实现响应自动包装
*** Description: 忽略对返回结果的自动包装/*** Description: 忽略对返回结果的自动包装/*** Description: 忽略对返回结果的自动包装/*** Description: 忽略对返回结果的自动包装Retention;/*** Description: 忽略对返回结果的自动包装/*** Description: 忽略对返回结果的自动包装/**
2025-01-27 21:36:11
1120
原创 sunrays-framework配置重构
import org/*** Description: 配置文件已加载,Environment 对象已初始化* 使用 ApplicationEnvironmentPreparedEvent 读取 application.yml 文件中的 sun-rays-log4j2.home 和 sun-rays-log4j2.module 配置。
2025-01-27 21:34:54
1593
原创 AI智能日志分析系统
3.自动配置1.IntelligentAnalysisAutoConfiguration.java2.spring.factories2.combinations-intelligent-analysis-starter-demo1.目录结构3.application.yml4.IntelligentAnalysisApplication.java 启动类5.工具类1.MailUtil.java 发送邮件2.MethodCallChainUtil.java 根据堆栈信息从Git
2025-01-26 19:33:28
1506
7
原创 日志模块升级,采用sleuth实现日志链路追踪
import org/*** Description: 线程池配置} }/*** Description: 线程池配置} }/*** Description: 线程池配置} }Bean;import org/*** Description: 线程池配置} }/*** Description: 线程池配置} }/**
2025-01-24 09:39:33
774
1
原创 RabbitMQ的消息可靠性保证
持久化队列可以保存队列的元数据,重启后自动恢复,惰性队列可以将所有的消息都持久化到磁盘,内存只保留最近的2048条消息。首先开启了消费者自动确认机制,如果消息消费失败,就进行重试。
2025-01-22 09:36:55
1585
5
原创 项目集成ELK
3.spring.factories4.pom.xml 引入common-log4j2-starter5.查看是否被父模块所管理2.核心3.ElkApplication.java4.查看是否由父模块管理2.安全组开放2.配置3.指定配置文件启动测试1.启动2.启动 common-elk-starter-demo2.修改output3.启动测试4.控制台输出正常2.查看日志2.使用Kibana进行查看1.访问http://guest:5601
2025-01-21 15:15:04
1299
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人