- 博客(198)
- 资源 (6)
- 收藏
- 关注
原创 关于springboot一个接口请求后,主动取消后,后端是否还在跑
1、最近在思考一个问题,如果一个springboot的请求的接口比较耗时,中途中断该请求后,则后端服务是否会终止该线程的处理,于是写了一个demo。4、发现即使取消请求后,springboot后端还是会进行业务处理,不会自动终止的。
2024-03-06 18:23:14 653
原创 Maven类包冲突终极三大解决技巧 mvn dependency:tree
(这一步非常重要哦,经常项目组pom.xml是相同的,但是就是有些人可以运行,有些人不能运行,俗称人品问题,其实都是IDE的缓存造成的了。这里有一个需要特别注意的,即B和C同时依赖于X,假设B依赖于X的1.0版本,而C依赖于X的2.0版本,A究竟依赖于X的1.0还是2.0版本呢?A依赖于B及C,而B又依赖于X、Y,而C依赖于X、M,则A除引B及C的依赖包下,还会引入X,Y,M的依赖包(一般情况下了,是把照妖照,pom.xml用它照照,所有传递性依赖都将无处遁形,并且会以层级树方式展现,非常直观。
2024-01-09 21:55:14 1282
原创 ZGC垃圾收集器介绍
相比G1、Shenandoah等先进的垃圾收集器,ZGC在实现细节上做了一些不同的权衡选择。譬如G1需要通过写屏障来维护记忆集,才能处理跨代指针,得以实现Region的增量回收。记忆集要占用大量的内存空间,写屏障也对正常程序运行造成额外负担,这些都是权衡选择的代价。
2024-01-09 14:35:39 1085
原创 Redis遇到过的问题 (Could not get a resource from the pool )
其中查看所有连接的展示的列表内容我在下方标出,注意看下idle这个字段,代表的空闲时间,单位是秒,这时可以看到idle的时间非常长,所以我这边确定程序获取获取大量的redis连接资源并且没有释放。否则,断开与 Redis 的连接。需要注意的是redisTemplate使用的是自动管理连接池,按道理来说调用完之后会自动释放连接,但是当redis开启了事务的时候,就需要手动释放连接,所以解决方案有两种。这么常用的方法,基于习惯,Java 在 jdk1.7 之后为我们提供了一个很好的方法。
2023-12-25 19:54:04 1239
原创 common-pool的GenericObjectPool源码创建borrowObject方法研读
对象池主要管理对象的池,包含借用,归还,添加对象,校验对象是否有效等管理功能。
2023-12-21 11:05:48 435
原创 jedisCluster模式下使用scan命令来删除指定前缀的字符串
之前搜了网上很多文章,发现jedisCluster.getClusterNodes()在jedis的4.x版本获取的对象Map,而不是Map。针对这个情况进行代码改造。因业务需要,需要对指定redis的前缀批量删除,如果直接使用keys 命令在数据量比较大的情况下会导致redis集群崩溃或者业务hang住。利用scan通过分页方式来拿到指定的key前缀,在进行相关数据的删除。来获取jedisNode客户段,具体代码如下。
2023-12-20 18:42:58 652
原创 redission源码解读
总的来说,如果只是简单的使用Redis进行一些基本操作,可以选择使用Jedis;如果需要使用到Redis的高级功能或者需要进行分布式开发,建议选择Redisson。而Redisson提供了更加丰富的API,包括分布式锁、集合、队列等高级功能。线程模型不同:Jedis是单线程模型,而Redisson是异步线程模型。支持集群模式不同:Jedis只支持基本的单机模式和主从模式,而Redisson支持Redis集群模式。可扩展性不同:Redisson具有更好的可扩展性,可以通过自定义配置实现更多的功能。
2023-11-20 16:24:49 142
原创 mysql隐式转换转换引起的bug
2、若字符串是以数字开头,且全部都是数字,则转换为数字结果是整个字符串;部分是数字,则转换为数字结果是截止到第一个不是数字的字符为止。理解: varchar str = "123dafa",转换为数字是123。3、若字符串不是以数字开头,则转换为数字结果是 0。本案例正好符合第三种情况,因为subject_id是int类型,而过滤条件是varchar类型,同时首字母是英文而不是数字,导致默认转换为0,所以查询出来不一样的结果。生产环境中遇到一个情况情况 ,过滤数据发现过滤不掉相关值情况,具体情况如下。
2023-11-10 11:10:37 733
原创 线程池阻塞队列长度设置失误导致任务一直被阻塞未能执行
3、更加上述线程池执行逻辑,因为业务执行很长时间,而阻塞队列设置很大,则导致后续提交的任务都放到阻塞队列了,从而导致任务挤压。改进措施,根据任务执行时间合理设置LinkedBlockingQueue的大小,比如设置20个,最大线程数也设置大点。1、生产环境中有个接口耗时比较久,然后自己的阻塞队列没有设置默认值,导致后续提交过来的任务一直在阻塞队列中,具体代码如下。2、线程池的执行逻辑。
2023-10-27 11:27:52 166
原创 AQS中 state 和 waitStatus 分别是干什么的?
它是AQS的核心字段之一,用于控制线程的访问和操作。字段用于表示节点在等待队列中的状态,通过这两个字段,AQS可以实现线程的等待和唤醒机制。字段,如果需要等待,则线程会进入等待状态;字段的设置和检查,AQS可以控制线程的等待和唤醒。类中的一个字段,在AQS中用于构建等待队列和条件队列。字段的含义和用途是由具体的同步器实现决定的。字段的值,根据具体的实现逻辑进行相应的操作。字段用于表示节点在等待队列中的状态。是用于管理线程等待和唤醒的重要字段。字段用于表示共享资源的状态或计数,而。字段,并唤醒等待的线程。
2023-10-07 17:33:34 319
原创 锁,事务,多线程的关系
事务具备原子性、一致性、隔离性和持久性(ACID)的特性,用于确保数据库的完整性和一致性。在并发环境下,多个线程或进程可以同时进行数据库操作,而事务机制可以保证这些操作按照一定的顺序执行,避免数据异常和冲突。通过合理地使用锁和事务机制,可以确保多线程环境下的数据一致性和操作正确性。在实际应用中,锁通常被用于控制对共享资源的访问,避免多个线程同时修改数据而导致的数据不一致问题。锁、事务和多线程之间有密切的关系,它们都是在并发编程中用于保证数据一致性和操作正确性的重要概念。
2023-09-22 16:19:22 368
原创 基于springboot线程池,来提高接口并发相关demo的性能压测和思考
【代码】基于springboot线程池,来提高接口并发相关demo的性能压测和思考。
2023-09-15 15:37:55 354
原创 基于springboot实现多线程抢锁的demo
使用 jstack 88023 |grep SimpleAsyncTaskExecutor-62 命令可以查看相关线程是否存在。本代码基于定时调度和异步执行,如果只加异步处理,会导致当前任务未执行完,下个任务到点也不会触发执行。
2023-09-04 19:00:35 580
原创 springboot异步多线程的实现
4、如果启用异步线程池,需要在启动类加上 @EnableAsync(proxyTargetClass = true) 注解。3、controller层服务调用。1、配置线程池相关参数。
2023-08-03 15:33:39 417
原创 Springboot项目报错解决方案
问题应该在本身的代码上,但是,我记得代码是测试过的,没有问题。但是,没有其他办法,只能顺着提示一步步寻找问题所在。最终,确实问题出在代码上。在排除问题时,一直没有发现什么异常,后续通过堆栈错误,看到最后的错误信息。3、每次修改过代码以后,都要记得进行测试,确保修改是正确的。4、迁移其他项目的Service服务时,看看调用的任务关系图。1、解决问题,不要急躁,要淡定,淡定,淡定。2、仔细看报错信息。
2023-05-19 19:33:28 291
原创 mysql失败连接重试
package com.vip.dataeye.base.mysql;import com.vip.dataeye.common.Constants;import org.apache.commons.dbutils.DbUtils;import org.apache.commons.dbutils.QueryRunner;import org.apache.commons.dbutils.ResultSetHandler;import org.slf4j.Logger;import org.
2023-04-14 11:57:17 148
原创 springboot Factory method ‘kafkaTemplate‘ threw exception
通过查询springboot的 包管理依赖的版本进行修复。发现是引入的kafka包的json冲突。
2023-03-23 15:38:07 344
原创 springboot请求数据链接突然中断后
在进行http请求的时候,客户端突然断开链接或者客户端自动取消连接的,服务端还是会进行所有流程处理的,只是在最后接口返回给客户端的时候会报通道链接异常。
2023-02-24 18:45:21 1297 1
原创 java httpclient httpget方法如果有空格的bug进行修复
可以使用URLEncoder.encode()方法来解决,但是URLEncoder.encode()方法会将空格转换成+,解码后会发现+没有转换回来,这要特殊处理一下,将空格直接转换成%20,这里不用担心原参数中的+会被转成%20,URLEncoder.encode()方法会将原有的+转成%2B,将空格转成+在请求头参数或者返回参数存在中文时,出现乱码的问题。
2022-10-26 21:16:11 1970
原创 jvm直接内存相关文档
直接内存可能导致OutOfMemoryError异常,由于直接内存在java堆外,因此它的大小不会直接受限于-Xmx指定的最大堆大小,但是操作系统内存是有限的,java堆和直接内存的总和依然受限于操作系统最大内存。读写文件需要与磁盘交互,需要由用户态切换到内核态。在内核态时,需要内存如下图操作。直接内存大小可以通过MaxDirectMemorySIze设置,如果不指定默认和堆的最大值-Xmx参数一致。使用NIO时操作系统划出的直接缓冲区可以被java代码直接访问,只有一份,NIO适合对大文件读写操作。...
2022-07-29 16:41:46 181
kafka-manager-2.0.0.1_prod.tgz
2019-09-18
《深入理解Java虚拟机:JVM高级特性与最佳实践》第二版和源码
2019-04-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人