- 博客(64)
- 收藏
- 关注
原创 将文件按照文件名创建文件夹保存
场景:有一个图片的压缩包,里面的图片是按照系列存的。上传图片时需要按商品编号找到文件夹,进入文件夹选取里面的图片。所以写了下面的,按照文件名创建文件夹,然后把所有文件名的图片放进去,如果一个文件名有多个图片,则文件名按照后缀加-0,-1区别。例如,有一个商品图片,有3张,D304,分别存在3个文件夹中。经过处理后需要创建一个D304的文件夹,然后把3张图片存进去,名称分别为D304, D304-1,D304-2。
2024-03-06 17:22:46 383
原创 springboot项目处理响应结果方案ResponseBodyAdvice
在项目中我们有统一的返回结果定义。我们自己定义内容这个在我们自己项目都是这种返回结构,但是在对接其他公司的系统的时候,有的公司规定的返回结果结构跟我们的不一样。他们的是这样的这和我们项目中的是不一样的。字段名和含义都不一样。需要在不改变我们项目结构的同时满足这种返回结果。我们在controller层可以自己定义一个返回结果对象,但是项目中抛出异常,就会走我们定义的第一种响应结构。
2024-02-20 14:05:32 365 1
原创 elasticsearch搜索会限制结果数量
现象:elasticsearch在搜索时,会限制默认的搜索条数10000。比如有一个spu_index索引,里面的数据有50000条,在执行页面搜索的时候,前10000条数据能显示出来,下一页就没有数据了。解决方法,重新设置一下这个限制,在kibana中执行。
2024-01-29 08:56:09 287
原创 java 项目中有需要记录操作日志,统一处理
代码的实现主要是:利用短信 模板的形式。先给定一段话,里面的变量用字符串代替。等针的有操作的时候,就替换变量,改成一段话记录下来。变量替换的参数可以对象,map,或者是json。基本使用就这些,如果想更方便,还可以做成注解形式,解析参数,利用切面保存。
2023-12-08 09:36:18 1068
原创 spring参数校验@Validated及嵌套校验
对象校验,用post传参,对象属性的校验注解导包使用正确集合作为校验接收参数使用ValidList这个类接收对象中集合校验使用List接收,不能使用ValidList,会出现2次错误信息get参数校验,需要在类上加@Validatedservice层校验需要自己写校验工具类。写校验方法。
2023-03-27 19:55:26 5167 1
原创 springboot项目配置序列化,反序列化器
本文介绍在项目中时间类型、枚举类型的序列化和反序列化自定义的处理类,也可以使用注解。建议枚举都实现一个统一的接口,方便处理。我这定义了一个Dict接口。由于上边规定所有的枚举都需要实现Dict接口,下面的反序列化只针对符合条件的处理/*** 枚举反序列化器*/
2023-03-11 16:09:50 3687
原创 记Java调用第三方接口封装实现
在Java项目中,会遇到很多调用第三方接口的地方,比如接入微信,其他公司的系统,需要传token或者签名。由于接入调用接口很多,每个接口内部都需要手动设置token或者其他数据,这就显得很麻烦。而且发送http请求还需要自己创建request对象。下面介绍2中封装方式,一、利用feign功能封装请求,所有接口和服务之间调用是一样的,只需要执行后面的url,参数类,请求方式等。内部需要传输的token信息,在自定的拦截器中设置,自定义的拦截器需要实现RequestInterceptor接口。
2023-02-15 16:13:40 5281
原创 系统体验环境数据抽取创建
本文主要介绍系统体验环境的数据抽取和复制。需求:有一个项目需要有用户体验,或者是演示功能,这些操作又不能在正式环境操作,测试环境也不稳定,用户体验不好。所以需要有新的一套系统,供用户使用,但是这些数据不会长期保存。这些用户也不需要登录。
2023-01-15 18:36:12 403
原创 nacos配置动态刷新及监听到变化触发一些方法
在使用spring 时,动态更新配置是常见的,属性值更新,但是需要开启支持刷新功能,一个是spring.cloud.nacos.config.isRefreshEnabled=true; 这个值一般是默认的,可以在nacosConfigProperties这个类中看到。还要在扩展配置中开启refresh = true
2023-01-10 20:54:50 12442 1
原创 证明volatile 是线程可见的
java中 volatile 关键字是线程可见的,以前了解的是一个线程对volatile 修饰的遍历修改之后,另一个线程再次获取这个变量的值的时候,就是修改之后的值了。如果变量没有 volatile 修饰,另一个线程就不会感知到便获。
2022-12-18 21:15:02 427
原创 mybatis查询多个结果返回map--@MapKey使用方法
mybatis查询结果集返回多个,想用map接收,使用@Mapkey解决,并介绍源码实现
2022-11-30 10:55:35 9797 1
原创 spring事务传播代码测试
介绍spring事务在不同的传播机制下,执行的不同结果事务传播配置7中,具体的参见org.springframework.transaction.annotation.Propagation这个类场景:serviceA类有方法A调用 serviceB类有方法B。B方法出异常,哪个会提交??初始值<update id="updateUserA"> UPDATE `t_user` SET `name` = '张三11' WHERE `id` = 1; &
2022-03-02 17:33:01 599 1
原创 java线程状态及中断interrupt()
线程中断参考视频【Java并发·08】线程中断 interrupt_哔哩哔哩_bilibili距离上次更新过去了快两个月,虽然快两个月,但是这集还是做的比较仓促可能是年纪大了吧……内容自然是精心准备的。不过有些画面细节可能还比不上前面的作品,特别是文字质量,发虚是因为我又换软件了,这次都是用开源软件做的后面有时间了我会去研究研究怎么改进https://www.bilibili.com/video/BV1CM4y157vc/?spm_id_from=pageDriver1.判断线程是否中断,只有在线.
2022-02-09 14:40:37 648
原创 强大的CompletableFuture开启异步执行任务
本文介绍CompletableFuture类,开启线程异步执行任务。参考视频:这个视频讲的很好,一定要去看。。。。。。【Java并发·03】CompletableFuture入门_哔哩哔哩_bilibili异步编程,原来可以这样简单多线程、异步 是近些年来工作中越来越常用的技术但是有好多同学都停留在 Thread 层面,没有去了解更方便的工具这是制作视屏以来的第三个作品,加入了一些搞笑的元素。希望能让你们轻轻松松学知识-本节课是 CompletableFuture 的入门课讲到了 Completab
2022-02-08 18:19:22 1002
原创 BlockingQueue的实现类讲解
jdk有几个BlockingQueue阻塞队列的实现类,总结一下,不同点及用处。看类图第一个:ArrayBlockingQueue入队方法public boolean add(E e) ---- 内部会调用offer(e),返回false就抛异常,需要自己捕获,否则线程遇到这个异常就结束了public boolean offer(E e)----往队列里添加元素,添加成功返回true,添加失败返回false。public void put(E e) throws Inte
2022-02-07 16:25:02 924
原创 Cannot find a @StreamListener matching for message with id: 99a2a40a-fcf9-800a-384d-e3782846c0ed
rocketMQ报错Cannot find a @StreamListener matching for message with id: 99a2a40a-fcf9-800a-384d-e3782846c0ed原因:RocketMQ整合Spring cloud stream之后代码中写了@StreamListener(value = OrderEventSink.ORDER_STATUS_CHANGED_EVENT_INPUT, condition = "headers['rocketmq_
2022-01-28 16:36:48 1545
原创 CountDownLatch的2种使用场景
CountDownLatch是基于AQS的操作共享锁的表现,可以控制多个线程,一起执行。模仿并发CountDownLatch类中有2个方法。1. await();表示线程阻塞,2. countDown();表示,计数器减一。在线程阻塞后,计数器减至0后才可以唤醒阻塞的线程。场景一:模仿高并发,多个线程,同事访问一个资源。代码:package com.example.demo2.cusdemo.countdowndemo;import java.util.concurrent.C.
2022-01-28 10:49:44 1563
原创 ReentrantLock加锁解锁线程入队源码分析
本文介绍ReentrantLock加锁解锁过程在看这个类的代码时,先看类的关系,ReentrantLock,内部有sync类,继承了AbstractQueuedSynchronizer,这个类中封装很多锁的公共方法,比如,获取锁,释放锁,创建队列,入队,阻塞,共享锁的逻辑。测试代码:import java.util.concurrent.locks.ReentrantLock;public class TestLock { public static void main(Strin
2022-01-27 17:06:52 631
原创 线程中断方法Thread.currentThread().interrupt()、Thread.interrupted()、Thread.currentThread().isInterrupted()
本文介绍3个线程中断方法的意义及使用结果。在ReentrantLock类中会看到有使用的地方。 Thread.currentThread().interrupt():表示为当前线程打中断标记。 Thread.interrupted():表示清除中断标记,如果当前线程中断,返回true,否则返回false Thread.currentThread().isInterrupted():表示查看当前线程的状态是否中断,不清除中断标记 测试代码public static v
2022-01-26 18:35:17 4562 1
原创 易懂--详解--线程池ThreadPoolExecutor执行流程
介绍线程池的执行流程,及源码分析线程池接收任务:1.先创建核心work,执行任务,核心work创建满了,再来新的任务,没有空闲的核心work,2.就将任务放进队列,队列添加满了,3.就创建非核心work,此时,非核心work和核心work一起执行队列中的任务,当核心、非核心work、队列都满了,再添加任务,就执行拒绝策略注1:一个线程池创建的work数量是有限的,当work达到ctl最大值即563870912,此线程池就拒绝接收任务,每次创建一个work,不论是核心还是非核心的,ctl值
2022-01-19 16:49:19 1829 1
原创 springboot服务认证方式Tomcat中session创建管理流程分析
本文介绍springboot项目采用spring-security认证,传递token,session的生成流程,分析源码创建过程。最主要的入口在org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationProcessingFilter#doFilter这个请求过滤器中。具体访问流程如下Tomcat接收请求进入org.apache.catalina.authenticator.Authentic
2022-01-18 14:26:18 1022
原创 spring-web项目采用token认证session创建过多导致OOM
本文介绍关于session过多,分问题、解决方案、分析在另写文章。问题:spring-boot微服务互相调用时,采用的是spring-security来认证,比如A服务调用B服务用feign调用方式。1. 浏览器访问web项目,传递token,Bearer 0d8c2dfa-5a3f-4fde-935e-96da27712687,此时,web服务会拿着token,去用户服务认证,认证通过,放行。每次访问都会在web服务创建一个新的session,有效期是30分钟,即使前端下次访问的时候,传递上次响应
2022-01-18 11:10:21 888
原创 mybatis-plus解析注解,自动生成sqlNode
本文介绍,mybatis-plus在项目启动的时候,解析实体类的注解,比如:@Table等,生成sqlNode,然后在真正访问的时候,再拼接成sql语句。访问流程:入口:1. com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean#buildSqlSessionFactory// 构建SqlSession的时候根据接口解析自动生成的sqlNode。protected SqlSessionF...
2022-01-10 11:35:28 676
原创 mybatis-plus查询sql条件拼接deleted = 0
本文介绍springboot整合mybatis-plus在项目中使用时,写查询方法的时候,使用lambda表示查询数据,在真正执行sql的时候where条件会拼接deleted = 0 。原因:1、全局配置配置删除字段。默认删除值=1.未删除值=0。配置方式如下:mybatis-plus.global-config.db-config.logic-delete-field = deleted在使用全局配置的时候,如果实体类中有deleted字段,就会拼接deleted = 0.2. 如果
2022-01-06 10:09:49 10083 2
原创 springboot集成mybatis-plus源码分析
本文介绍springboot-集成mybatis-plus,(又出现很多以Mybatis开头的配置类),启动时如何加载各个类,解析配置文件,生成接口代理类。sql执行器。自定配置入口1.找到自动配置类MybatisPlusAutoConfiguration,会看到@Bean@ConditionalOnMissingBeanpublic SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {}
2022-01-04 15:12:14 620
原创 springmvc整合springboot执行流程---源码分析
本文介绍springmvc被springboot整合之后,web容器注册spring容器,初始化DispatcherServlet,controller里面的方法注册,访问过程。首先从springboot-autoconfigure包下面的META-INF/spring-factories里面找到WebMvcAutoConfiguration这个自动配置类,在209行会看到RequestMappingHandlerMapping这个类被创建成bean,这个类有个afterProperti...
2021-12-31 16:56:38 552
原创 修改spring-security-oauth2获取用户资源使用连接池
本文介绍使用spring-security-oauth2进行授权认证后,获取用户资源时,使用oauth2RestTemplate进行访问,没有使用连接池,进行优化。设置连接池的代码package org.springframework.security.oauth2.client.test;import org.springframework.beans.factory.ObjectProvider;import org.springframework.boot.autoco...
2021-12-24 10:39:04 725
原创 spring内部事件监听类加载源码(下)ApplicationEvent
介绍spring启动加载监听类源码,包括注解@EventListener和实现ApplicationListener
2021-12-14 17:06:53 398
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人