- 博客(160)
- 收藏
- 关注
原创 SpringBoot数据字典字段自动生成对应code和desc
/作用是将当前类上的注解也追加到目标类上,如果不加的话,目标类及时加了@EnumTranslation注解,也不会集成该注解的所有注解//生成的属性名,不写默认原名+Desc//参考的枚举,会根据改枚举的code获取对应的descClass
2024-12-30 10:17:10
758
原创 Spring AOP 自定义Advisor
我们在使用AOP时通常都是直接使用@Before、@After、@Around、@AfterThrowing、@AfterReturning等注解来拦截方法的,其实Spring还有另外一种方式来实现AOP,那就是创建Advisor。:Advisor内部包含了PointCut(切点)和Advice(通知),PointCut表名要匹配哪些类的哪些方法,Advice表明要植入的代码。其实我们编写的@Before等注解最终还是会被解析为Advis。
2024-10-31 17:33:45
443
原创 SpringMVC枚举类型字段处理
在日常的项目开发中经常会遇到一些取值范围固定的字段,例如性别、证件类型、会员等级等,此时我们可以利用枚举来最大程度减少字段的乱定义,统一管理枚举的值。SpringMVC中对于枚举也有默认的处理策略:对于@RequestParam,Spring是通过ConverterFactory来处理的,大致处理策略是根据枚举名称或枚举下标来转换枚举。对于@RequestBody,Spring是通过Jackson配置将json内的枚举值转换为对象的,大致处理策略同样是根据枚举名称或枚举下标来转换枚举。
2024-05-28 11:29:46
1361
原创 SpringBoot基于redis zset实现滑动窗口限流
*** 窗口时间*//*** 窗口时间内允许访问次数*//*** 时间单位*/@Component@Aspect@Autowired//我们自己实现的滑动窗口限流/*** 调用我们写的工具类判断是否超过阈值*/if(limit){throw new RuntimeException("限流");/*** 如果使用了Redisson,可以直接使用令牌桶来实现限流*/// 1、 声明一个限流器// 2、 设置速率,5秒中产生3个令牌。
2024-04-19 09:54:59
1327
原创 Feign远程调用上传和下载文件
在项目中我们通常会将一些基础功能封装在system服务中,然后其他服务统一调用system服务提供的服务。例如文件上传和下载接口,为了统一管理文件我们会把文件上传和下载功能统一封装在system服务内,其他服务调用system对外提供的上传下载接口。
2024-02-29 18:25:04
1032
1
原创 SpringBoot Jackson 数据字典映射
在设计数据库时,我们通常会建立一个dict表,存储了项目内所有的字典名称和字典值,例如用户等级、用户职称等字典,然后其他表内的存储的值是dict_code,前端展示需要将dict_code映射为dict_value。User表有个sourceType字段(1=微信、2=在发版),返回给前端时需要返回sourceType(dict_code),和sourceTypeName(dict_key)。通过自定义JsonSerializer方式实现枚举值的动态转换。
2024-01-19 18:50:31
781
原创 MySQL深度分页优化
我们日常做分页需求时,一般会用limit实现,但是当偏移量特别大的时候,查询效率就变得低下。本文将分四个方案,讨论如何优化MySQL百万数据的深分页问题,并附上最近优化生产慢SQL的实战案例。这个SQL的执行时间如下:执行完需要秒,深分页为什么会呢?如果换成limit 0,10,只需要秒哦limit 0,10。
2024-01-18 08:46:13
1463
1
原创 MySQL虚拟列提高检索效率
MySQL 5.7 开始支持了一个新特性,该列的值是通过在列定义时包含的一个计算表达式得到的。当我们在where语句中对表内列进行计算时,会导致索引失效而降低查询效率,这种情况可以通过创建虚拟列,提前对字段进行计算,在查询时候直接通过虚拟列筛选即可。
2024-01-12 09:40:29
815
原创 Spring Cache 入门教程
Spring从3.1开始定义了org..cache.Cache和org.springframework.cache.CacheManager接口来统一不同的缓存技术;并支持使用JCache(JSR-107)注解简化我们开发;Cache接口为缓存的组件规范定义,包含缓存的各种操作集合;Cache接口下Spring提供了各种xxxCache的实现;如RedisCache,EhCacheCache ,ConcurrentMapCache等;
2023-11-13 22:46:03
669
原创 Redisson实现延迟队列
Redisson实现的延迟队列是基于Redis的zset命令实现的,通过将数据存储到zset中,并设置过期时间作为score,通过定时任务轮询zset来实现延迟队列的功能。延迟队列是指在队列中存储带有过期时间的数据,在过期时间到达时自动从队列中移除。
2023-11-07 08:38:24
735
原创 TransmittableThreadLocal (TTL)
当前登录用户信息放在ThreadLocal内,然后service在处理业务逻辑时通过线程池来异步的处理,由于线程池内的线程与当前主线程不是同一个,因此获取不到主线程存放的用户信息。,但是他只有在创建新线程时才会拷贝(一个新线程只拷贝一次),而线程池内的核心线程是不会销毁的,会处理多个任务,因此就无法获取到当前登录人信息(或者会获取其他人的登录信息)。但是如果我们项目中的代码已经写好了,如果要修改成本很大,此时就可以通过Agent挂载的方式来动态修改Runnable类。方法:启动时配置 javaagent。
2023-11-07 08:23:46
262
原创 IDEA使用Docker插件
1.执行命令,在ExecStart配置的后面追加保存后,执行命令重启docker然后查看端口是否开启,开启则表示成功。
2023-08-31 17:06:51
1116
原创 java中文数字、阿拉伯数字转换
static char[] cnArr = new char [] {‘零’,‘一’,‘二’,‘三’,‘四’,‘五’,‘六’,‘七’,‘八’,‘九’};static char[] chArr = new char [] {‘零’,‘十’,‘百’,‘千’,‘万’,‘亿’};static String allChineseNum = “零一二三四五六七八九十百千万亿”;static String num2 = “十百千万亿”;static String zero = “零”;
2023-06-12 18:11:34
1908
原创 SpringMVC内容协商
SpringMVC内容协商主要的功能是:根据请求头或请求参数来控制接口返回的数据格式。通过HttpMessageConvert实现。acceptformatSpringMVC内置了很多格式的转换器我们可以利用这个功能来控制接口的返回格式。如:通过format控制接口返回xml引入依赖开启参数模式访问测试:http://localhost:8080/test?format=xml。
2023-06-05 11:33:59
847
原创 java读取大数据量Excel按需读取(按需加载,速度快)
常用的poi工具,如easy-excel,hutool读取excel是都是先将整个excel加载到内存中分析,然后再一行行遍历,当excel文件太大时读取的时间就会更长,如果我们只需要读取excel的前几行来进行预览就不能使用这种方式,应该按需读取。
2023-04-25 11:29:26
2462
原创 docker:IPv4 forwarding is disabled. Networking will not work. 解决方法
当你使用docker容器的时候有可能出现以下情况:IPv4转发已禁用。是因为IPv4转发被禁用了,只需要开启就可以了。
2023-03-28 21:47:14
2184
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人