![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Spring学习笔记
文章平均质量分 58
令人作呕的溏心蛋
人生何处不青山
展开
-
Spring Boot + 微信小程序实现WebSocket通信功能示例
Spring Boot + 微信小程序实现WebSocket通信功能示例。这个做法可以在小程序加载的时候去连接服务端WebSocket,注意,我这里判断userInfo登录信息,如果没有登录,那我们就不要连接,这时候我们再去login.js登录方法里面登录成功后再去配置连接。(这里url后面的id传参是当前用户的id,用于用户之前相互通讯)注意,当我们退出登录的时候,需要在里面调用以下方法,去把WebSocket断开。点击按钮调用send方法后,观察后端就会看到打印信息。原创 2024-07-23 10:11:56 · 228 阅读 · 0 评论 -
Windows中安装部署MinIo文件系统,在Spring Boot中引入MinIo依赖实现上传文件到MinIo文件系统中
Windows中安装部署MinIo文件系统,在Spring Boot中引入MinIo依赖实现上传文件到MinIo文件系统中原创 2024-07-11 15:55:01 · 439 阅读 · 0 评论 -
Spring Boot 中 PGSQL 判断打卡点是否经过轨迹优化代码,循环查询物理表修改生成临时表,向临时表插入数据后再做ST_DWithin判断,引入线程池提升判断效率
记录一下一个业务问题,流程是这样的,我现在有一个定时任务,5分钟执行一次,更新车辆打卡的情况。现在有20俩车,每辆车都分配了路线,每条路线都有打卡点,每个打卡点分配了不同的时间段,也就是说,一条路线可能有几百个打卡点,这几百个打卡点中每一个都分配了时间段,有可能是1个时间段,比如8:00 - 10:00这个时间段,要去打卡。也有可能有的打卡点分配了几个时间段,比如上午两个时间段,下午两个时间段。这个时候要去判断今天的打卡情况,只能先获取路线的打卡点,然后再获取单个打卡点下面的时间段,再进行判断操作。但是问题原创 2024-07-02 20:37:01 · 627 阅读 · 0 评论 -
PostgreSql中使用to_char函数、date()函数可能会导致索引无法充分利用,导致查询速度无法提升
这时候去搜了一下才知道pgsql的to_char函数可能会导致索引无法充分利用,也就是说必须把to_char改成TIMESTAMP去定义日期。在我的SQL语句中,to_char(c1.binder_gen_time, ‘YYYY-MM-DD’) 会将 binder_gen_time 转换为字符串,这会导致无法使用日期列上的索引。使用 to_char 函数可能会导致索引无法充分利用的情况,因为函数会改变列的数据类型,这样就无法使用索引来加速查询。查询时间花费了4s左右。原创 2024-06-13 15:20:51 · 485 阅读 · 0 评论 -
PostgreSql常用的时间类型以及对应Java中的类型以及在Mybatis XML中转换
TIMESTAMP:用于存储日期和时间信息,精确到毫秒,例如:‘2024-06-06 10:30:00.123’。start_time为TIMESTAMP类型,数据样例为2024-06-06 11:30:00.359。start_time为TIMESTAMP类型,数据样例为2024-06-06 11:30:00.359。start_time为TIMESTAMP类型,数据样例为2024-06-06 11:30:00.359。toDay为LocalDate类型,如2024-06-06。类型对应Java中的。原创 2024-06-06 13:52:31 · 619 阅读 · 0 评论 -
Spring Boot中如何查询PGSQL分表后的数据
数据库用的pgsql,在表数据超过100w条的时候执行定时任务进行了分表,分表后表名命名为原的表名后面拼接时间,如原表名是card_device_trajectory_info,分表后拼接时间后得到card_device_trajectory_info_20240503,然后分表后把原来的表重置为空。这样就把100w条数据放到了card_device_trajectory_info_20240503里面,card_device_trajectory_info重置空,以此类推。原创 2024-05-28 15:22:48 · 615 阅读 · 0 评论 -
Java中PostgreSQl一大批数据(3000+)插入数据库,后台直接报错An I/O error occurred while sending to the backend.
Java中PostgreSQl一大批数据(3000+)插入数据库,后台直接报错An I/O error occurred while sending to the backend.原创 2024-05-08 09:01:53 · 327 阅读 · 1 评论 -
在Java中假设我有一个List<String>列表,有两个数据在里面分别是04:00:00和12:00:00,如何比较大小保留最小的或最大的其中一个
【代码】在Java中假设我有一个List列表,有两个数据在里面分别是04:00:00和12:00:00,如何比较大小保留最小的或最大的其中一个。原创 2024-04-25 17:17:13 · 131 阅读 · 0 评论 -
Java中使用List的stream流19中常用方法操作以及使用常用的filter、map、distinct、count、collect、skip、limit等方法进行数据列表的处理以及数据列表的分页
【代码】Java中使用List的stream流19中常用方法操作以及使用常用的filter、map、distinct、count、collect、skip、limit等方法进行数据列表的处理以及数据列表的分页。原创 2024-04-25 14:41:28 · 646 阅读 · 0 评论 -
Java中double数值保留两位小数的四种实现方式
【代码】Java中double数值保留两位小数的四种实现方式。原创 2024-04-25 14:21:04 · 1274 阅读 · 1 评论 -
Spring Boot中判断轨迹数据是否经过设置的打卡点,且在PGSQL中把点拼接成线,判断某个点是否在线上或在线的50米范围内
轨迹数据判断是否经过打卡点,轨迹数据太多,循环判断的话非常消耗内存。解决办法只需要把所有轨迹数据点拼成了一条线,然后只需要循环打卡点即可,打卡点不多,一般不会超过100个,如果多的话,另说。。一般也就几个,也就是说有多少个打卡点就需要循环多少次,打卡点少,我们就可以使用循环去判断打卡点是否在线的范围内即可。原创 2024-04-22 10:08:47 · 526 阅读 · 3 评论 -
Java中使用List的stream流实现分页,有时候我们的需求并不能使用mybatis或mysql去实现分页,我们就需要处理好数据后使用stream流去处理分页
Java 9 或更高版本中使用 toList() 方法。如果你使用的是 Java 8,则可以使用 collect(Collectors.toList()) 方法来替换 toList()。使用 skip() 和 limit() 方法。skip(n) 方法用于跳过前 n 个元素,而 limit(n) 方法用于限制元素的数量为 n。结合这两个方法,你可以实现分页效果。将.toList() 替换成 .collect(Collectors.toList());原创 2024-04-19 10:08:55 · 473 阅读 · 0 评论 -
Java 判断两个Date类型的时间是否大于6天
cardDeviceTrajectoryInfo.getGpstime().toInstant() 是表中最后一条数据的时间,并转换成Instant对象。new Date().toInstant() 是获取当前时间,并转换成Instant对象。原创 2024-04-17 14:58:55 · 204 阅读 · 0 评论 -
Spring Boot定义类处理API通用返回数据
Spring Boot定义类处理API通用返回数据。原创 2024-04-16 19:36:45 · 484 阅读 · 0 评论 -
解决Spring Boot poi导出Excel时发现双击单元格的数字变成了日期格式m/d/yy h:mm
双击这个数值变成了m/d/yy h:mm日期格式找到样式代码找到含有m/d/yy h:mm的代码,将其注释原创 2024-04-12 14:37:29 · 260 阅读 · 0 评论 -
Spring Boot中处理前端传过来的MultipartFile类型的Excel文件,数值匹配String或Numeric,判断是否存在空行,排除空行,处理运算结果的单元格
【代码】Spring Boot中处理前端传过来的MultipartFile类型的Excel文件,数值匹配String或Numeric,判断是否存在空行,排除空行。原创 2024-04-09 21:33:03 · 430 阅读 · 0 评论 -
Spring Boot中前端通过请求接口下载后端存放的Excel模板以及解决使用HSSFWorkbook 导出的Excel,wps能打开office打不开问题
【代码】Spring Boot中前端通过请求接口下载后端存放的Excel模板。原创 2024-04-03 23:12:40 · 754 阅读 · 0 评论 -
【PostgreSQL】已解决Spring Boot中Mybatis模糊查询时出现 could not determine data type of parameter $1
我看了一下我的roleId居然是Long类型的,导致出现could not determine data type of parameter $1的问题,我们需要把你类型转一下就好了!原创 2024-04-02 10:53:06 · 1493 阅读 · 0 评论 -
使用Java自带的VisualVM监控远程服务器部署在Docker容器中的Java项目并使用Mat在线工具排查服务器内存泄露或内存溢出的原因。项目解耦,与业务模块分离单独运行定时任务
事情是这样的,我们项目最近应业主的要求迁移到了新的服务器,起初一切正常,部署、上线、测试都没有问题,项目大概运行了一周的工作日时间都没出现问题,直到周六那天,项目经理打电话过来说服务器崩了,图片上传不了,验证码加载不出来等各种问题。。。然后火速连到服务器查看了一下Docker 命令中用来显示容器资源利用情况,发现这个Java服务一直在持续的上涨到15G左右(正常也就几百兆),以至于涨到服务器挂掉了。。。额,我初步怀疑是定时任务太多的问题。原创 2024-03-13 16:14:46 · 1685 阅读 · 0 评论 -
在Java中内存泄漏(Memory Leak)和内存溢出(Memory Overflow)的区别
内存泄漏指的是程序中已经不再使用的内存没有被正确释放或回收的情况。这种情况下,内存中仍然存在一些对象占用空间,但由于程序无法访问到这些对象,导致这部分内存无法被重新利用,随着时间的推移会造成系统可用内存逐渐减少。原创 2024-03-13 16:14:05 · 434 阅读 · 0 评论 -
Spring Boot接口请求响应慢,超过10秒以上,如无法优化SQL或代码的情况下,建议写入数据库或缓存中,请求接口时从数据库或缓存中读取返回
Spring Boot接口请求响应慢,超过10秒以上,如无法优化SQL或代码的情况下,建议写入数据库或缓存中,请求接口时从数据库或缓存中读取返回原创 2024-01-15 19:10:25 · 912 阅读 · 0 评论 -
Spring Boot中引入Redis使用RedisTemplate缓存数据、读取数据、opsForValue、opsForList、opsForHash方法使用说明
而创建 RedisTemplate Bean,显式地指定了key和value的序列化方式为StringRedisSerializer,并且将其作为RedisTemplate的泛型参数,这样可以保证存储的数据类型是符合我们期望的。Redis 字符串数据结构是一个简单的 key-value 结构,适合于存储简单的数据类型,如字符串、数字等。Redis 集群是 Redis 分布式部署的一种方式,适合于数据量较大,需要进行分布式存储的场景。Redis 列表数据结构是一个简单的链表结构,适合于存储有序的元素列表。原创 2024-01-15 15:21:40 · 1547 阅读 · 0 评论 -
MybatisPlus中的LambdaQueryWrapper执行Sql语句在满足一个条件前提下并且(满足另外的两个条件其中之一)
正确的语法,where type = 2 and (ssjh = 3 or ssjh = 4) 在type满足条件的前提下,ssjh等于3或等于4即可触发。错误的语法,这样子会得到where type = 2 and ssjh = 3 or ssjh = 4,只要ssjh或type其中一个满足就会触发。原创 2024-01-12 19:40:22 · 540 阅读 · 0 评论 -
Spring Boot中加@Async和不加@Async有什么区别?设置核心线程数、设置最大线程数、设置队列容量是什么意思?线程数具体设多少?
如果未配置任务执行器,则异步方法将在调用线程中执行,而不会启动新的线程来执行。因此,加上 @Async 注解的方法能够实现并发执行,而不加 @Async 注解的方法则会按照顺序逐个执行。根据您的代码示例,加上 @Async 注解后,a1() 和 a2() 方法将会同时启动并发执行,而不会相互阻塞。这意味着当调用这些方法时,它们将会在单独的线程中执行,而不会等待方法执行完成。也就是说,当调用这些方法时,程序将会阻塞在方法执行处,直到方法执行完成才会继续执行后续代码。A1和A2多线程交替执行,并发。原创 2024-01-08 11:17:03 · 1402 阅读 · 0 评论 -
如何在Spring Boot中使用@Scheduled写定时任务判断数据量是否过大,过大则进行分表操作,多张表使用临时视图查询
在使用 CREATE TABLE ... AS SELECT * FROM ... 语句时,添加 WHERE 1=0 和不添加的区别在于是否复制原表的数据。 - [x] 不加 `WHERE 1=0`:这会将原表中的数据一同复制到新表中。新表将包含原表中所有的行数据。 - [x] 加上 `WHERE 1=0`:这样做不会复制任何原表中的数据,只会复制原表的结构(列定义)到新表中,但新表不会包含任何行数据。因此,如果只复制表的结构而不需要复制数据,可以在 CREATE TABLE ... AS SEL原创 2024-01-04 11:32:30 · 1272 阅读 · 0 评论 -
你是否还在用for循环给实体类中的某个属性逐个赋值?尽量避免for循环赋值,应当使用sql关联表的方法去赋值来提升接口请求速度!
在我们的开发中,查询列表,想拿到另外一张表的name,但是列表中存着的是另一个表中的id,这时候使用了for循环去遍历然后通过MybatisPlus提供的方法去getOne获取这一条数据的name,这种方法数据量少还能支撑得住,要是数据量大了,那么就很消耗时间了。为了提升接口查询速度,我们将原有的方式改成sql关联表查询,匹配表后拿到表中的字段去给我们的实体类赋值即可。直接降到了73毫秒,所以说,在实际开发中,我们需要避免使用for循环去给实体类中的属性赋值,应当使用sql关联表的方式!原创 2023-12-28 11:09:13 · 421 阅读 · 0 评论 -
MybatisPlus在xml中执行if判断的时候把0给忽略掉了
在执行sql的时候发现state这个值没有拼接到sql里面去,明明判断是成立的,但是就是无法拼接进去,也打印了对象,发现state确实有数据,也为0。只需要把curingPlanInfoSearchDto.state!原创 2023-12-27 19:06:48 · 481 阅读 · 0 评论 -
【JWT】SpringBoot+微信小程序根据指定参数生成Token、更新Token、判断Token是否已经过期、封装wx.request请求更新Token并判断Token是否过期
封装了wx的request请求,每次发起请求的时候都走一遍更新Token的接口/user/updateTokenTime,如果接口返回offline则代表已经过期,则跳转到登录页面,否则就是没有过期,则更新缓存userInfo中的token。如果你想有一些接口不要经过这个request封装,就比如用户没有登录是可以进入到首页等页面的,开放一些允许用户没有登录状态可以访问的接口。我们可以再封装一个request,专门开放接口不经过Token验证。微信小程序点击登录按钮调用该方法。原创 2023-10-05 00:32:03 · 2436 阅读 · 0 评论 -
MyBatis动态传入表名以及#{}和${}的区别
总结一下,就是当我们需要拼接的变量上不能带单引号时,就必须使用${},其他情况都尽量使用#{}的方式,因为${}会有sql注入的问题。而如果我们使用${}的方式编写的sql时,${} 是进行sql拼接,${} 对应的变量是不会被加上单引号 ’ ’ 的。参数user上会带着单引号,而单引号在mysql中会被识别为字符串,select一个字符串肯定是会报错的。在mybatis中如果我们使用#{}的方式编写的sql时,#{} 对应的变量自动加上单引号 ’ ’原创 2023-07-26 15:37:55 · 554 阅读 · 0 评论 -
并发和并行的区别,通俗解释,生活例子解释并发和并行区别到底在哪里。
然而,每个学生都可以同时做试卷的不同部分,比如数学和语文部分可以并行完成,这就是并发和并行结合的例子。具体来说,当一个任务在等待I/O操作的结果时,CPU可以切换到另一个任务上去执行,这样就不需要等待I/O操作完成,从而提高了CPU的利用率。是指多个任务在同一时间段内交替执行,通过任务切换来让多个任务看起来同时执行,从外部看来似乎是同时进行的。比如,在一个单核CPU上运行多个任务,每个任务分配一定的时间片来执行,CPU在不同任务之间进行快速的切换,从而让多个任务交替执行。是一个人同时在处理多个任务,那么。原创 2023-04-15 21:54:03 · 3149 阅读 · 0 评论 -
SpringBoot + RabbitMQ从延时队列中删除指定的值【RabbitMQ中的basicAck和basicNack的区别以及basicReject又是什么?】
业务需求是,就是我本来是有一个order-queue队列绑定到了死信队列交换机order-dead-direct-exchange上,然后我的业务是,现在有一个用户下单但是没有付款,order-queue队列写入该条信息并计时24小时后如果用户还是未付款状态则移除到死信队列order-dead-queue中。问题来了,如果在这个24小时内,用户取消订单,这时候就要从order-queue队列中移除该条信息。怎么操作呢?原创 2023-04-15 00:24:15 · 3633 阅读 · 10 评论 -
js获取后端返回的时间字符串减去24小时得到所省时间
后端返回时间字符串 orderCreateTime,JS怎么处理用24小时减去这个后端返回的时间字符串 orderCreateTime,最后得到还剩23小时57分这个格式?原创 2023-04-13 21:16:04 · 407 阅读 · 0 评论 -
SpringBoot + RabbitMQ 死信队列中出现Execution of Rabbit message listener failed.的错误解决
如果消息体的序列化格式不正确或者监听器的反序列化配置有误,就可能导致消息无法正确反序列化,从而抛出异常。可以检查消息的序列化格式和监听器的反序列化配置是否正确,以及确保监听器的处理方法能够正确处理反序列化异常。如果在消息处理的过程中发生了业务异常,比如空指针异常或者数组越界异常等,都可能导致消息监听器抛出异常。如果RabbitMQ连接异常,也会导致消息监听器无法正确消费消息。其实最有可能出错的地方就是在你的业务中,业务中可能涉及一些对数据库增删改查操作,一旦业务出现异常,比如空指针异常或者数组越界异常等。原创 2023-04-13 17:00:59 · 1925 阅读 · 0 评论 -
SpringBoot项目中遇到的订单支付超时未支付关闭订单的解决方案(RabbitMQ生产者消费者之间的使用示例)
不会占用应用服务器的资源、应用的宕机不会对Redis产生影响、Redis过期时间准确度高。:随时能从队列里面移除实时取消的订单、不会占用应用服务器的资源、异步化处理。:订单量过大的时候查询和修改数据库压力大、服务器内存消耗大、IO瓶颈。:必须要用户查询该条订单信息的时候才会触发。:订单量过大非常消耗Redis服务器资源。:实现简单、适用于小项目、数据量比较少。:需要引入消息中间件。原创 2023-04-12 15:42:13 · 1816 阅读 · 0 评论 -
SpringBoot中WebSocket使用@Autowired注入出现空指针异常java.lang.NullPointerException: null
产生空指针的主要原因由于Spring管理的对象都是单例的(singleton),和 WebSocket(多对象)相冲突。原创 2023-04-06 15:06:34 · 942 阅读 · 0 评论 -
MyBatis缓存为什么会出现脏数据以及可以采取的措施避免脏数据的出现
MyBatis 是一种持久化框架,它提供了一种缓存机制,可以将数据库中的查询结果缓存起来,避免频繁地访问数据库,从而提高应用程序的性能。MyBatis 缓存分为一级缓存和二级缓存。原创 2023-03-23 10:28:30 · 716 阅读 · 0 评论 -
@Scheduled注解 cron属性常用表达式
仅在dayOfMonth中使用,表示最近的工作日(距离指定日期最近的一天,且是工作日)。例如,15W在dayOfMonth字段中表示“本月15号最近的工作日”。:仅在dayOfMonth和dayOfWeek中使用,表示最后一天。例如,L在dayOfMonth字段中表示“每月最后一天”。例如,10-12在hour字段中表示“10点到12点”。:仅在dayOfMonth和dayOfWeek中使用,表示不指定值。例如,0/5在second字段中表示“每隔5秒钟”。例如,*在minute字段中表示“每分钟”。原创 2023-03-22 19:17:02 · 567 阅读 · 0 评论 -
Springboot + UniApp实现WebSocket连接通信聊天功能的简单案例
创建一个 `WebSocketConfig` 类来配置 **WebSocket** 连接。该类应该实现 `WebSocketConfigurer` 接口,并重写 `registerWebSocketHandlers` 方法。在 `registerWebSocketHandlers` 方法中,将 `MyWebSocketHandler` 注册到 `WebSocketHandlerRegistry` 中,并指定处理 **WebSocket** 连接的端点。原创 2023-03-21 16:28:56 · 2908 阅读 · 3 评论 -
【Spring boot】RedisTemplate中String、Hash、List设置过期时间
时间类型:TimeUnitTimeUnit.SECONDS:秒TimeUnit.MINUTES:分TimeUnit.HOURS:时TimeUnit.DAYS:日TimeUnit.MILLISECONDS:毫秒TimeUnit.MILLISECONDS:微秒TimeUnit.NANOSECONDS:纳秒。原创 2023-03-21 12:26:56 · 5831 阅读 · 0 评论 -
UniApp + SpringBoot 实现接入支付宝支付功能和退款功能
进入支付宝开放平台 控制台2、application.yml中添加以下配置4、编写接口支付接口和回调接口三、UniApp前端代码1、配置manifest.json的App模块开启支付四、支付功能展示1、用户确认支付本文仅供学习使用,本文参考博客园作者奔跑的砖头的文章感谢作者的详细说明以及代码 (*╯3╰) (*╯3╰) (*╯3╰)原创 2023-03-14 23:26:12 · 6986 阅读 · 2 评论