- 博客(37)
- 收藏
- 关注
原创 mysql-binlog的三种模式
Statement模式:适用于对日志量有较高要求,且能够确保SQL语句在不同环境下执行结果一致性的场景。Row模式:适用于对数据一致性要求极高,且不介意增加日志量和存储成本的场景。Mixed模式:是MySQL默认推荐的日志格式,能够平衡日志量和数据一致性的需求,适用于大多数常规场景。在选择binlog日志格式时,需要根据实际需求和场景进行权衡和选择。
2024-11-28 15:58:06 400
原创 反射-Field.isSynthetic()
方法定义在类中,该方法不接受任何参数,并返回一个布尔值。如果调用该方法的字段是合成字段,则返回true;否则返回false。
2024-11-06 11:23:43 313
原创 @Import
可以通过自定义的逻辑来注册额外的Bean。3. 导入实现了ImportSelector的类:如果@Import的参数是实现了ImportSelector接口的类,Spring会调用ImportSelector接口的selectImports()方法,根据返回的类名数组将相应的类注册为Bean。1. 导入其他配置类:如果@Import的参数是其他配置类(例如@Configuration注解的类),Spring会将导入的配置类也加入到容器中,使得被导入的配置类内部定义的Bean也可以被管理。
2024-10-29 16:50:51 190
原创 @Configuration(proxyBeanMethods = false)
结论:标注@Configuration(proxyBeanMethods = false)注解的配置类,类中被@Bean标注的方法将不会被spring通过CGLB代理,(1)先看 proxyBeanMethods = true (默认是true)的情况。(2)将proxyBeanMethods = true 由 true 改成false。可以看出从Spring容器中获取的依旧是单例Bean,而通过方法获取的是多实例的。
2024-10-29 15:59:56 276
原创 入参校验及全局异常处理
基于Aop思想的一种实现默认对所有Controller进行拦截也可以指定规则,类似于@ComponentScan, 则匹配org.my.pkg包及其子包下的所有Controller,当然也可以用数组的形式指定,如:@ControllerAdvice(basePackages={"org.my.pkg", "org.my.other.pkg"}), 也可以通过指定注解来匹配,比如我自定了一个 @CustomAnnotation。
2024-10-11 15:48:09 737
原创 责任链模式
log.info("StrategyCheck task 后置校验");log.info("StrategyCheck task 前置校验");其次观察者模式中所有的订阅者没有任何关联,而责任链模式中的每个处理环节具有传递性。使用场景:多个连续的功能上不相互依赖的处理环节,共同完成一项任务。log.info("执行任务。比较:与观察者模式不同的是,观察者模式中所有的订阅者可。(2) 有多个处理环节。(3)实现类-第一环节。(4)实现类-第二环节。(5)实现类-第三环节。特点:(1)顺序执行。
2024-10-09 16:52:57 494
原创 Spring 源码部分接口实践
1.自定义条件注解1.1 @conditional注解@Conditional注解是Spring框架中的一个条件注解,可以根据不同的条件来决定是否需要创建一个Bean对象。其工作原理是,在Bean创建之前根据条件判断进行筛选,只有当条件满足时才会创建Bean对象。1.2自定义条件注解(1)实现Condition接口(2)自定义注解,这样。
2024-09-29 20:50:03 1172
原创 分页查询的优化
会先把需要排序的文件加载到缓存中,因此适当增加sort_buffer_size缓存大小能优化排序性能。实际上MySQL得先扫描前10000条记录,然后丢掉,再返回后面10条。这就像你在书店找第10001本书,得先把前面的全数一遍。首先需要在查询字段和排序字段上创建合适的索引,否则数据库引擎就会扫描整张表,降级为filesort。这样,MySQL可以直接从last_id开始找,不用再从头扫描,性能杠杠的。答案是:从上一次结果中获取最大的那条记录(也就是最后一条记录)如何获取每次开始查找的位置呢?
2024-09-27 15:46:43 281
原创 动态线程池 - 配置中心nacos
4.监听nocos配置变更:更新线程核心线程数及最大线程数。注意:核心线程数不得大于最大线程数,3.创建一个单例线程池。
2024-09-19 14:37:45 221
原创 自定义拦截器
2、把拦截器放入到容器中(实现WebMvcConfigurer接口)* 1、编写一个拦截器实现HandlerInterceptor接口。* 3、配置好拦截器要拦截那些内容。
2024-09-09 16:35:14 178
原创 轻量级HTTP客户端框架—Forest
Forest 是一个开源的 Java HTTP 客户端框架,它能够将 HTTP 的所有请求信息(包括 URL、Header 以及 Body 等信息)绑定到自定义的 Interface 方法上,能够通过调用本地接口方法的方式发送 HTTP 请求。全局配置可以配置一个全局统一的SSL协议,但现实情况是有很多不同服务(尤其是第三方)的API会使用不同的SSL协议,这种情况需要针对不同的接口设置不同的SSL协议。(2)创建请求方法的实例,并指定请求URL。发送HTTP请求不会总是成功的,总会有失败的情况。
2024-08-16 17:30:55 1758
原创 MySQL 之 本地事务
是 Spring 框架提供的一个注解,用于声明事务性方法。它可以用于类、方法和接口上,以便对数据库操作进行事务管理。通过使用这个注解,我们可以控制事务的传播行为、隔离级别、超时时间以及回滚条件等参数,从而实现更加灵活和高效的事务管理。下面详细介绍一下。
2024-08-15 18:01:35 659
原创 MySQL 之 FIND_IN_SET()函数
eg:表a有一个字段name = hello,hello47 判断是否包含47这个字段(完全包含,非部分包含)函数是为逗号分隔的列表设计的,判断一个字段(其值由逗号分隔的多个子字符串组成)是否包含某个特定的子字符串。还可以根据包含的数量查询,比如查询name字段包含两个47的。此外,oracle没有内置的函数,需要使用正则表达式。
2024-08-13 18:36:26 234
原创 基于@within | @target | @annotation注解的AOP切面
会匹配到标注了指定注解的类,并且在该类的子类中,那些没有重写父类方法也会被匹配到。等注解结合使用,指定在特定类上执行的切面逻辑。等注解结合使用,指定在特定类上执行的切面逻辑。等注解结合使用,指定在特定类上执行的切面逻辑。就会被匹配为切点,不影响其子类和父类。@annotation注解(方法级)@target 注解(类级)@within注解(类级)只匹配标注了指定注解的类。该配置就是:如果某个。该配置就是:如果某个。
2024-08-13 18:34:23 371
原创 压缩存储GZIPOutputStream
是 Apache Commons Lang 库中的一个方法调用,用于将 Java 字符串中的转义字符恢复为其原始形式。是一个计算数据流的 CRC-32 校验和的类,主要用来验证压缩数据的完整性的。类,它实现了一个流式过滤器,主要用于以GZIP文件格式写入压缩数据。类可以用来压缩数据,那么下面给出一个压缩字符串的示例代码。数据的输出流,因此需要用到压缩器。被替换为一个换行符)
2024-08-13 18:16:38 339
原创 多线程之parallelStream
parallelStream默认使用线程池ForkJoinPool来调度的,而ForkJoinPool的默认线程数是CPU核数 - 1。总结:在使用parallelStream时要注意根据需求选择合适的线程池,避免出现线程池溢出等一系列问题。输出:使用spring框架中的 ForkJoinPool.commonPool。输出:使用的依旧是 ForkJoinPool.commonPool。举例二:使用其他线程池,如 Executors.输出:使用自定的ForkJoinPool线程池。
2024-08-05 17:04:35 847
原创 限速器RateLimiter | 重试机制RetryTemplate | 延迟器Timer
它提供了一种简洁且灵活的方式来处理因暂时性故障而导致的操作失败,允许开发者在执行某个操作时设置重试逻辑,以确保在遇到可恢复的异常时能够重新尝试。* 定义重试策略:可以定义重试的次数、每次重试之间的间隔时间,甚至可以设置不同的重试策略(如指数退避策略)if (Math.random() < 0.7) { // 70% 的概率抛出异常。// 取消 Timer,停止所有任务。if (Math.random() < 0.7) { // 70% 的概率抛出异常。
2024-07-31 21:36:45 505
原创 Spring定时任务
方案一:基于@Scheduled注解的定时任务,修改定时规则需要修改代码,修改后需要重启项目。方案五:使用ScheduledThreadPoolExecutor定时任务线程池执行定时任务。方案三:动态定时任务,在数据库中查询定时规则,可以随时改变定时任务的执行规则。方案二:基于@EnableAsync的多线程定时任务。方案四:基于线程池的多线程定时任务。
2024-05-24 10:38:37 180
原创 SpringBoot 整合 Redis
5. 定制化 LettuceConnectionFactory。3. 定制化redisTemplate。4. 定制化缓存管理。
2024-05-23 11:06:16 1060 1
原创 分布式作业: Elastic-Job
如果有3台服务器,分成2片,作业名称的哈希值为奇数,则每台服务器分到的分片是:1=[0], 2=[1], 3=[] 如果有3台服务器,分成2片,作业名称的哈希值为偶数,则每台服务器分到的分片是:3=[0], 2=[1], 1=[]每一个分片只执行一次;如果有3台服务器,分成10片,则每台服务器分到的分片是:1=[0,1,2,9], 2=[3,4,5], 3=[6,7,8]如果有3台服务器,分成9片,则每台服务器分到的分片是:1=[0,1,2], 2=[3,4,5], 3=[6,7,8]
2024-05-21 21:13:09 1146 1
原创 数据库分库分表策略
(3)将机器通过hash算法映射到环上 在采用一致性哈希算法的分布式集群中将新的机器加入,其原理是通过使用与对象存储一样的Hash算法将机器也映射到环中 (一般情况下对机器的hash计算是采用机器的IP或者机器唯一的别名作为输入值),然后以顺时针的方向计算,将所有对象存储到离自己最近的机器中。通过对节点的添加和删除的分析,一致性哈希算法在保持了单调性的同时,还是数据的迁移达到了最小,这样的算法对分布式集群来说是非常合适的,避免了大量数据迁移,减小了服务器的的压力。,不然就会出现“查无此人”的错误了。
2024-05-21 18:50:36 1481 1
原创 Mapstruct 实体属性映射框架
/定义UserEntity实体和UserPo两个实体@Data@Data@Builder(2)定义转换接口定义mapstruct接口,在接口上打上@Mapper注解属性表示交给Spring去管理,会在自动生成的实现类上加上@Component注解注意:@Mapper是Mapstruct的注解,不要引错了如果现有的能力都不能满足需要,可以自定义一个转换器,比如我们需要把一个字符串使用JSON工具转换成对象。
2024-05-21 18:21:22 824 1
原创 Mysql + MyBatis 多数据源配置
在config -> db 目录下创建第二数据源:在mapper -> second 目录下的所有mapper都走这个数据源。在config -> db 目录下创建第二数据源:在mapper -> first 目录下的所有mapper都走这个数据源。
2024-05-19 18:58:55 226
原创 AOP中ProceedingJoinPoint用法
它代表了方法调用的“执行点”,通常在方法调用之前或之后插入额外的逻辑。提供了对方法调用的控制,允许你决定是否继续执行原始方法、如何执行或完全不执行。描述:获取连接点的类型(例如,它是一个方法连接点还是一个构造函数连接点)。用途:你可以获取原始方法的参数,这在需要对参数进行操作或修改时非常有用。用途:在某些情况下,你可能需要访问代理对象本身,而不是其中的方法。描述:这些方法提供关于连接点在源代码中的位置的信息。描述:获取方法的签名(例如,方法名和参数类型)。示例:你可能想在方法调用之前修改某些参数的值。
2024-05-19 18:43:02 1656
原创 本地缓存Caffeine
Caffine 是一款高性能的近似LFU(最近最少频率使用)准入策略的本地缓存组件,Caffeine的底层数据存储采用ConcurrentHashMap,使用 Window TinyLfu 回收策略,提供了一个近乎最佳的命中率。适用范围:变更频率低、实时性要求低的数据之前的 removalListener 是异步监听,此处的 writer 方法可以设置同步监听器,同步监听器一个实现了接口 CacheWriter 的实例化对象,我们需要自定义接口的实现类。
2024-05-19 18:37:26 5848
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人