- 博客(97)
- 资源 (17)
- 收藏
- 关注
原创 【Spring AOP】@Aspect、 @Pointcut使用@annotation + 五种通知Advice注解
在微服务流行的当下,在使用SpringCloud/Springboot框架开发中,AOP使用的非常广泛,尤其是`@Aspect注解方式`当属最流行的,不止功能强大,性能也很优秀,还很舒心!
2025-04-03 18:33:55
974
原创 记一次Error querying database. Cause: java.lang.NumberFormatException: For input string: “xxx“
在解析单引号+单字符( ‘Y’) 时,默认解析为 char 类型的原因是因为在 Java 中,单引号括起来的字符常量被认为是 char 类型的值。因此,MyBatis 遵循了 Java 语言对于单引号和双引号的解释规则,以便更好地处理表达式中不同类型的常量值。另一方面,当使用单引号+多字符 (‘AA’) 或者双引号+单字符( “A”) 时,这会被解释为 String 类型的值,因为单引号+多字符或者双引号+单字符在 Java 中被视为字符串常量。修改后的sql语句: 采用双引号+单字符的格式。
2025-03-28 18:18:52
242
原创 Java本地缓存之王Caffeine详解
利用这类缓存足以解决大多数的性能问题了,我们也要知道,这种属于remote cache(分布式缓存),应用的进程和缓存的进程通常分布在不同的服务器上,不同进程之间通过RPC或HTTP的方式通信。这种缓存的优点是缓存和应用服务解耦,支持大数据量的存储,缺点是数据要经过网络传输,性能上会有一定损耗。与分布式缓存对应的是本地缓存,缓存的进程和应用进程是同一个,数据的读写都在一个进程内完成,这种方式的优点是没有网络开销,访问速度很快。在创建缓存对象的同时,可以指定此缓存对象的一些处理策略,比如。
2025-01-06 16:34:36
976
原创 RedisTemplate执行lua脚本及Lua 脚本语言详解
在开发中,我们经常需要与Redis数据库进行交互,而Redis是一个基于内存的高性能键值存储数据库,它支持多种数据结构,并提供了丰富的命令接口。在某些情况下,我们可能需要执行一些复杂的逻辑操作,这时可以使用Lua脚本来实现这些逻辑,而Redis提供了执行Lua脚本的功能。在Spring应用程序中,我们可以使用RedisTemplate来执行Lua脚本。
2025-01-06 11:29:53
1251
1
原创 JetCache-Alibaba缓存框架
官方网址:https://github.com/alibaba/jetcache官方文档:https://github.com/alibaba/jetcache/tree/master/docs/CNJetCache对SpringCache进行了封装,在原有功能基础上实现了多级缓存、缓存统计、自动刷新、异步调用、数据报表等功能JetCache设定了本地缓存与远程缓存的多级缓存解决方案。
2024-12-27 14:32:36
1171
原创 Linux 实用命令 grep、wc
wc 命令是一个非常实用的工具,适用于多种文件统计场景。更灵活地使用 wc 命令来统计文件的行数、单词数、字节数和字符数。无论是简单的文件统计还是复杂的文本处理,wc 命令都能提供强大的支持。
2024-12-27 11:04:46
937
原创 MongoDB的常用语句
MongoDB 是免费开源的跨平台 NoSQL 数据库,命名源于英文单词 huus,意思是「巨大无比」,可见开发组对 MongoDB 的定位。文档型的数据存储方式有几个重要好处:文档的数据类型可以对应到语言的数据类型,如数组类型(Array)和对象类型(Object);文档可以嵌套,有时关系型数据库涉及几个表的操作,在 MongoDB 中一次就能完成,可以减少昂贵的连接花销;文档不对数据结构加以限制,不同的数据结构可以存储在同一张表。MongoDB 的文档数据模型和索引系统能有效提升数据库性能;
2024-10-24 11:22:06
597
原创 SpringMvc 之处理器方法参数解析器(HandlerMethodArgumentResolver)
`HandlerMethodArgumentResolver` 是 Spring MVC 框架中的一个关键组件,用于解析控制器(Controller)方法的参数。在 Spring MVC 中,当一个请求到达时,DispatcherServlet 会负责找到对应的处理器(即控制器中的方法)来处理这个请求。在处理之前,需要解析方法的参数,这就是`HandlerMethodArgumentResolver` 的作用。换句话说,它负责将请求中的信息转换成处理器方法所需的参数类型,即它允许开发者将请求参数直接映射到处
2024-09-09 15:33:17
1409
原创 Spring之拦截器(HandlerInterceptor)
在web开发中,拦截器是经常用到的功能,用于拦截请求进行预处理和后处理,一般用于以下场景:1. 日志记录,可以记录请求信息的日志,以便进行信息监控、信息统计、计算PV(Page View)等等。2. 权限检查:如登陆检测,进入处理器检测是否登陆,如果没有直接返回到登陆页面。3. 性能监控:有时候系统在某段时间莫名其妙的慢,可以通过拦截器在进入处理器之前记录开始时间,在处理完后记录结束时间,从而得到该请求的处理时间(如果有反向代理,如apache可以自动记录);4. 通用行为:读取cooki
2024-09-06 10:35:28
1965
1
原创 JAVA之MAC详解以及子线程MDC传递
MDC(Mapped Diagnostic Context)是用于分布式系统中跟踪和诊断日志的重要概念。是一个在Java项目中用于日志跟踪的工具,它允许你在多线程环境下关联和传递特定的上下文信息。MDC是一个线程本地的、可维护的、可传递的上下文环境。在Java中,MDC主要用于在应用程序的不同组件之间传递日志上下文信息,例如用户会话ID,请求ID,用户身份信息等。MDC让你可以将这些信息关联到特定的日志事件中,以便后续的日志处理器(如日志输出器)能够在日志中显示或处理这些信息。
2024-08-23 10:31:47
647
转载 MapStruct 实体类转换工具,看这一篇就够了!
在一个成熟的工程中,尤其是现在的分布式系统中,应用与应用之间,还有单独的应用细分模块之后,DO 一般不会让外部依赖,这时候需要在提供对外接口的模块里放 DTO 用于对象传输,也即是 DO 对象对内,DTO对象对外,DTO 可以根据业务需要变更(只需部分字段或字段名不同等),并不需要映射 DO 的全部属性。这种 对象与对象之间的互相转换,就需要有一个专门用来解决转换问题的工具,毕竟每一个字段都 get/set 会很麻烦。MapStruct 就是这样的一个属性映射工具,只需要定义一个 Mapper 接口
2024-08-16 10:05:31
4333
原创 Java的Duration类:掌握时间间隔的魔法
在Java编程中,处理时间间隔是一项常见任务。Java 8引入了Duration类,提供了方便的方法来处理和计算时间间隔。本文将介绍Duration类的定义、常见用法以及与其他时间类的比较。
2024-08-07 14:46:24
2432
原创 Java LocalDateTime 的常用方法总结
/ 自定义格式化:System.out.println("自定义格式dtf1: " + dtf1.format(LocalDateTime.now()));//自定义格式dtf1: 2024/08/05 17:19:50System.out.println("自定义格式dtf2: " + dtf2.format(LocalDateTime.now()));//自定义格式dtf2: 2024.08.05 17:19:50。
2024-08-05 17:26:17
1186
原创 Java各类日期和时间转换超强总结(Date和LocalDateTime相互转换等)
大家在开发过程中必不可少得和日期打交道,对接别的系统时,时间日期格式不一致,每次都要转换!从 Java1 到 Java8 将近 20 年,再加上 Java8 的普及时间、各种历史 API 兼容过渡时间。我们很多时候需要在旧时间 API 与新时间 API 之间切换,并行使用!!!每次写完就忘记了,小编专门来整理一篇来详细说一下他们转换的方法,方便后面使用!!
2024-08-03 17:44:51
4277
1
原创 【SpringBoot】 定时任务之任务执行和调度及使用指南
本文将着重介绍Spring中的TaskExecutor接口、TaskScheduler接口、Trigger接口以及Spring中定时任务的任务执行和调度以及开发中的正确使用姿势。
2024-08-03 11:36:24
1897
原创 SpringCloud之@FeignClient()注解的使用方式
是 Spring Cloud 中用于声明一个 Feign 客户端的注解。由于SpringCloud采用分布式微服务架构,难免在各个子模块下存在模块方法互相调用的情况。比如订单服务要调用库存服务的方法,@FeignClient()注解就是为了解决这个问题的。Feign 是一个声明式的 Web Service 客户端,它的目的是让编写 HTTP 客户端变得更简单。通过 Feign,只需要创建一个接口,并使用注解来描述请求,就可以直接执行 HTTP 请求了。
2024-07-24 16:54:11
5500
原创 Kafka系列之如何提高消费者消费速度
在实际开发过程中,如果使用Kafka处理超大数据量(千万级、亿级)的场景,Kafka消费者的消费速度可能决定系统性能瓶颈。
2024-07-22 16:17:17
2705
1
原创 SpringBoot使用Redisson操作Redis及使用场景实战
从 spring-boot 2.x 版本开始,spring-boot-data-redis 默认使用 Lettuce 客户端操作数据。
2024-07-11 15:46:34
6246
4
原创 SpringBoot使用RedisTemplate、StringRedisTemplate操作Redis
本文实现了在SpringBoot中集成Redis,使用RedisTemplate对象操作并编写了一些常用方法的工具类。RedisTemplate和StringRedisTemplate的区别:1. 两者的关系是StringRedisTemplate继承RedisTemplate。////this();
2024-07-10 15:03:04
5093
原创 kafka系列之offset超强总结及消费后不提交offset情况的分析总结
消费端如果没有提交offset,程序不会阻塞或者重复消费,除非在消费到这个你没有提交offset的消息时你新增或者减少消费端,此时会发生rebalance现象,即可再次消费到这个未提交offset的数据,产生重复消费问题。如果在消费的过程中有几条或者一批数据数据没有提交offset(比如异常情况程序没有走到手动提交的代码),后面其他的消息消费后正常提交offset至服务端,那么服务端会更新为消费后最新的offset,不会重新消费,就算重启程序或者rebalance也不会重新消费。
2024-07-05 17:37:30
2922
原创 Kafka系列之@KafkaListener常用参数详解
KafkaListener 注解提供了许多可配置的参数,以便更灵活地定制 Kafka 消息监听器的行为。
2024-07-05 11:33:14
2634
原创 Kafka系列之Kafka知识超强总结
Kafka 集群包含一个或多个服务器,服务器节点称为broker。broker存储topic的数据。如果某topic有N个partition,集群有N个broker,那么每个broker存储该topic的一个partition。如果某topic有N个partition,集群有(N+M)个broker,那么其中有N个broker存储该topic的一个partition,剩下的M个broker不存储该topic的partition数据。
2024-07-04 10:05:36
1575
原创 mybatis配置返回boolean类型
在业务开发中,我们可能会遇到这样的需求:在对数据进行操作时,先判断有没有对应的记录,如果有,再进行操作。实现的方式有多种,现针对mybatis的实现进行说明。Mybatis是根据查询到的记录数进行转换的(1表示为true,0表示为false)。然而,如果查询到多条记录(大于1),则返回的布尔值为false。这个和mysql的版本有关系,故为了兼容版本我们可以考虑做如下sql改造使用。
2024-07-02 18:21:21
1284
原创 mybatis之动态标签
有些时候,sql语句where条件中,需要一些安全判断,例如按性别检索,如果传入的参数是空的,此时查询出的结果很可能是空的,也许我们需要参数为空时,是查出全部的信息。这是我们可以使用动态sql,增加一个判断,当参数不符合要求的时候,我们可以不去判断此查询条件。
2024-07-01 19:19:05
1104
原创 MYBATIS大于等于、小于等于的写法
mybatis使用的是xml格式的文件。使用>和<号的时候,会存在与xml的标签的规范冲突。需要写成如下形式,否则会报错。
2024-06-27 11:31:03
4417
原创 @Value 读取环境变量配置
Value属于spring的注解,在spring-beans包下,可以在 字段 或 方法参数 或 构造函数参数 上使用,通常用于属性注入。使用@Value(“${环境变量名}”)就可以直接读取到操作系统的环境变量,就算在properties或者yaml中指定同名属性值也会被系统环境变量值所覆盖,所以在平常自定义属性时避免与系统环境变量重名,最好加上前缀。比如,本地开发中,一些业务逻辑需要调用第三方代码,但又在本地调不通,怎么办。组件类,@Value必须在SpringBoot的组件中使用。
2024-05-31 14:47:30
1170
2
原创 SpringBoot 项目打印mybatis日志
只用在application.yaml 中配置以下内容,即可将mybatis 的 SQL 日志打印出来。换成自己的mapper接口文件所在的包目录。
2024-05-24 10:34:23
298
原创 Swagger 详解
Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的Web服务。总体来说,Swagger提供了一套标准的注解,开发者可以通过这些注解来描述他们的API,然后Swagger可以根据这些注解生成可交互的API文档。swagger2 最常用的5个注解。
2024-04-03 16:35:53
235
原创 JSR303参数校验与全局异常处理
我们在日常开发中,避不开的就是参数校验,有人说前端不是会在表单中进行校验的吗?在后端中,我们可以直接不管前端怎么样判断过滤,我们后端都需要进行再次判断, 为了安全。因为请求很容易绕过前端,比如当测试使用 PostMan 来发送请求,如果后端没有校验,不就乱了吗?肯定会有很多异常的。JSR-303规范(Bean Validation规范)提供了对 Java EE 和 Java SE 中的 Java Bean 进行验证的方式。该规范主要使用注解的方式来实现对 Java Bean 的验证功能。
2024-03-14 18:04:40
1041
原创 统一异常处理ControllerAdvice
在我们日常的开发过程中,通常会根据业务定义属于自己的异常,所以通过定制自己的异常处理器,来处理项目中大大小小、各种各样的异常。1、@ExceptionHandler注解标注的方法:用于捕获Controller中抛出的不同类型的异常,从而达到异常全局处理的目的;首先,ControllerAdvice本质上是一个Component,因此也会被当成组件扫描,一视同仁,扫扫扫。3、@InitBinder注解标注的方法:用于请求中注册自定义参数的解析,从而达到自定义请求参数格式的目的;
2024-03-14 16:22:05
563
原创 消息防骚扰方案设计
小时是精确防骚扰,当天的过期时间是自然天,即当前时间到晚上23:59:59,月有大小月之分,大月31天,小月30天,没必要精准区分,都以30天为准。修改可能不会立即生效,等待五分钟之后再起作用。
2024-03-06 10:58:52
210
原创 MySql的CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP
CURRENT_TIMESTAMP,则无论这个字段有木有set值都插入当前系统时间。在创建新记录的时候把这个字段设置为当前时间,但以后修改时,不再刷新它。在创建新记录的时候把这个字段设置为0,以后修改时刷新它。表示每次更新这条数据的时候,该字段都会更新成当前时间。在创建新记录和修改现有记录的时候都对这个数据列刷新。表示当插入数据的时候,该字段默认值为当前时间。TIMESTAMP的变体。
2024-03-06 10:51:38
541
zepto中文API
2017-09-14
w3cschool中文API
2017-09-14
css4.0中文API
2017-09-14
jQuery中文API
2017-09-14
JavaScript中文API
2017-09-14
HTM5中文API
2017-09-14
bootstrap中文API
2017-09-14
angularJS中文API
2017-09-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人