- 博客(43)
- 收藏
- 关注
原创 SpringBoot下载文件的几种方式
小文件:直接将文件一次性读取到内存中,文件大可能会导致OOM。也可以使用ResponseEntity<Resource>通用大小文件:边读边输出。
2025-01-05 11:16:09
464
原创 springBoot使用groovy脚本
Apache Groovy是一种强大的、可选的类型和动态语言,具有静态类型和静态编译功能,用于Java平台,旨在通过简洁、熟悉和易于学习的语法提高开发人员的生产力。它可以与任何Java程序顺利集成,并立即为您的应用程序提供强大的功能,包括脚本功能、领域特定语言创作、运行时和编译时元编程以及函数式编程。
2024-12-29 12:09:44
532
原创 BigDecimal解决精度问题
BigDecimal对象中的值相加,返回BigDecimal对象。BigDecimal对象中的值相减,返回BigDecimal对象。BigDecimal对象中的值相乘,返回BigDecimal对象。BigDecimal对象中的值相除,返回BigDecimal对象。将BigDecimal对象中的值转换成双精度数。将BigDecimal对象中的值转换成单精度数。将BigDecimal对象中的值转换成字符串。将BigDecimal对象中的值转换成整数。比较大小:-1小于;使用BigDeciaml。
2024-12-28 15:33:25
397
原创 使用DelayQueue,手写延时任务工具类
可以看到:存放任务到开始处理延迟时间大约5s,并且我们开启了定时任务定时扫描队列是否是无任务处理,如果没有会关闭队列,再次使用会重新开启。
2024-12-14 16:37:41
389
原创 DelayQueue延时队列
DelayQueue 也是 Java并发包()中的一个特殊队列,用于在指定的延迟时间之后处理元素。我们可以看到它的继承体系,实现了BlockingQueue接口和Delayed接口,说明是线程安全的,在,
2024-12-14 14:26:11
480
原创 使用队列集合完成排队操作
可以看到当第一个请求1过来时候会加到队列,然后直接执行操作,当第4个请求进来时候·,队列已经满了,需要等待队列空位置。1执行完后,可以看到第4个请求入队,现在有3个在队列中。接着2执行,3执行....直到队列是空。后续有进来两个请求排队。
2024-12-08 10:50:35
261
原创 分布式事务Seata
在微服务远程调用的过程中,还存在几个问题需要解决。首先是问题:整个业务中,各个本地事务是有关联的。因此每个微服务的本地事务,也可以称为。多个有关联的分支事务一起就组成了。我们必须保证整个全局事务同时成功或失败。我们知道每一个分支事务就是传统的,都可以满足ACID特性,但全局事务跨越多个服务、多个数据库,是否还能满足呢?可想而知:事务并不会遵循ACID的原则,归其原因就是参与事务的多个子业务在不同的微服务,跨越了不同的数据库。
2024-12-01 15:09:54
807
原创 Nacos部署和使用(服务注册与发现、配置中心)
微服务共享的配置可以统一交给Nacos保存和管理,在Nacos控制台修改配置后,Nacos会将配置变更推送给相关的微服务,并且无需重启即可生效,实现配置热更新。我们可以把微服务共享的配置抽取到Nacos中统一管理,这样就不需要每个微服务都重复配置了。)初始化时处理的,发生在项目的引导阶段。文件尚未读取,根本不知道nacos 地址,该如何去加载nacos中的配置文件呢?在大型微服务项目中,服务提供者的数量会非常多,为了管理这些服务就引入了。中,那么在项目引导阶段就可以读取nacos中的配置了。
2024-11-30 20:25:44
2393
原创 Spring boot 自定义@EnableXXX注解,实现bean的注入
在继承ImportSelector 类中,这个类其主要作用是收集需要导入的配置类,注册到容器,其中 String[] selectImports(AnnotationMetadata var1);方法的返回值就是注册bean的名字;我们在看springboot源码时候会发现许多@EnableXXX的注解,比如:@EnableAutoConfiguration 开启自动配置,@EnableAsync:开启异步等等。我们点开注解会看到,上边大部分都有 @Import注解,这个注解是控制bean的注入。
2024-11-24 11:20:05
514
原创 正则表达式
正则表达式(Regular Expression),通常简称为“正则”或“Regex”,是⼀种⽤于描述字符串模式 的表达式。它是由字符和运算符组成的⽂本模式,⽤于匹配、查找或替换⽂本中的字符序列。主要功能 :匹配⽂本模式;查找和替换;数据提取;表单验证;⽂本处理⼯具。
2024-11-17 10:58:20
1004
原创 一文理解ThreadLocal、InheritableThreadLocal、TransmittableThreadLocal
ThreadLocal:在当前线程中共享数据的,JUC 中提供的InheritableThreadLocal:也是JUC中的一个工具类,解决 ThreadLocal 难以解决的问题TransmittableThreadLocal:阿里开源的一个工具类,解决上面2个ThreadLocal 难以搞定的问题。
2024-11-16 16:37:36
809
原创 父子线程间传值问题以及在子线程或者异步情况下使用RequestContextHolder.getRequestAttributes()的注意事项和解决办法
使用RequestContextHolder.setRequestAttributes(RequestContextHolder.getRequestAttributes(), true);1.拦截器拦截将请求头中信息放到TransmittableThreadLocal中。TransmittableThreadLocal上下文工具类。
2024-11-10 16:48:18
510
原创 springBoot动态加载jar,将类注册到IOC
建立一个公共接口,放在公共模块,以供加载jar时候,可以获取接口方法。然后 cleam-install打成jar。
2024-11-03 17:07:51
452
原创 多线程+CompletableFuture+List分段完美解决更新插入数据太慢
【代码】多线程+CompletableFuture+List分段完美解决更新插入数据太慢。
2024-10-27 17:26:20
395
原创 ES推荐搜索、自动补全,并且springBoot集成
在搜索过程中,因为单词的拼写错误,没有得到任何的结果,希望ES能够给我们一个推荐搜索。ES采取了不同的数据结构来实现,并不是通过倒排索引来实现的;completion;所以在将数据索引进ES之前需要先定义 mapping 信息。自动补全的功能对性能的要求极高,用户每发送输入一个字符就要发送一个请求去查找匹配项。自动补全应该是我们在日常的开发过程中最常见的搜索方式了,如百度搜索和京东商品搜索。2. missing 是当没有要搜索的结果的时候才推荐。1. popular 是推荐词频更高的一些搜索。
2024-10-17 16:22:09
563
原创 docker安装RabbitMQ,开启mqtt协议,并且SpringBoot继承mqtt
MQTT(消息队列遥测传输)是ISO标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议。国内很多企业都广泛使用MQTT作为Android手机客户端与服务器端推送消息的协议。特点MQTT协议是为大量计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议,它具有以下主要的几项特性:使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合;
2024-10-13 17:10:09
1554
原创 Springboot使用ThreadPoolTaskScheduler轻量级多线程定时任务框架
Spring注解定时任务使用不是很灵活,如果想要灵活的配置定时任务,可以使用xxl-job 或者 quartz等定时任务框架,但是过于繁琐,可能成本较大。所以可以使用ThreadPoolTaskScheduler来灵活处理定时任务。
2024-09-21 17:06:48
1287
2
原创 SpringBoot使用@Scheduled注解实现定时任务
默认情况下,@Scheduled 创建的线程池大小为 1,如果想增加线程池大小的话,可以让 SpringTaskConfig 类实现 SchedulingConfigurer 接口,通过 setPoolSize 增加线程池大小。spring Task 支持 Cron 表达式,还有 fixedRate(固定速率执行)、fixedDelay(固定延迟执行)、initialDelay(初始延迟)三种用法。在启动类使用@EnableScheduling 注解开启定时任务也可以写个配置类开启。3.Cron 表达式。
2024-09-21 14:19:40
345
原创 整合Redis和RedisCacheManger
Bean// 设置Key的序列化方式// 设置Value的序列化方式,根据需求选择// 同样可以设置hashKey和hashValue的序列化方式// 配置Jackson2JsonRedisSerializer// 避免出现获取缓存时出现的类型转换错误// 此项必须配置,否则会报java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to XXX再次执行存储对象,存储字符串。
2024-09-08 16:07:59
1621
原创 SpringCache之本地缓存
针对不同的缓存技术,需要实现不同的cacheManager,Spring定义了如下的cacheManger实现。描述使用简单的Collection来存储缓存,主要用于测试使用ConcurrentMap作为缓存技术(默认),需要显式的删除缓存,无过期机制仅测试用途,不会实际存储缓存使用EhCache作为缓存技术,以前在hibernate的时候经常用使用google guava的GuavaCache作为缓存技术(1.5版本已不建议使用)
2024-09-08 16:00:57
2274
原创 多线程下载,并展示下载速度,支持断点下载
输出操作从文件指针开始写入字节,并随着对字节的写入而前移此文件指针。由于下载的文件较大,单线程下载会导致时间较长,影响体验,因此在串行程序基础上引入多线程,提高下载速度;打开以便读取和写入,对于 “rw”,还要求对文件的内容或元数据的每个更新都同步写入到底层存储设备。打开以便读取和写入,对于 “rw”,还要求对文件内容的每个更新都同步写入到底层存储设备。创建从中读取和向其中写入(可选)的随机访问文件流,该文件由 File 参数指定。创建从中读取和向其中写入(可选)的随机访问文件流,该文件具有指定名称。
2024-09-01 10:55:27
787
原创 CompletableFuture方法的使用
对于上述Executor参数说明:若没有指定,则使用默认的ForkJoinPoolcommonPool()作为它的线程池执行异步代码,如果指定线程池,则使用我们自定义的或者特别指定的线程池执行异步代码。CompletableFuture减少阻塞和轮询,可以传入回调对象,当异步任务完成或者发生异常时,自动调用回调对象的回调方法。
2024-08-25 11:08:05
1002
原创 使用枚举消除if-else
但是可能出现 CAT,MONKEY都吃香蕉的情况,我们可以在枚举类中再定义一个内部枚举来进行扩充。举个例子,比如:如果是CAT,需要鱼,MONKEY需要香蕉,PANDA 吃竹子...那么我们需要这样写if-else。
2024-08-24 18:24:41
425
原创 泛型的应用
如在List<Object>,List<String>等类型,在编译后都会变成List,JVM看到的只是List,而由泛型的附加信息对JVM是看不到的。这个设计是为了兼容Java旧版本的字节码,因为泛型是在Java 5引入的,早期的Java版本并不支持泛型。总结来说,泛型擦除是为了在引入泛型后保持与旧版本Java代码的兼容性,并通过编译时的类型检查确保类型安全,尽管它在运行时会导致泛型类型信息丢失的情况。这是因为在运行时,JVM需要知道数组的确切类型,而由于类型擦除,这个信息是不可知的。
2024-08-03 23:23:59
1126
原创 根据springBoot自动配置原理,编写starter组件
return "姓名:"+this.name+",性别:"+this.sex+",科目:"+this.subject;return sex;return sex;@ConditionalOnClass(Teacher.class) // 加载到Teacher这个类的话,就自动装配@EnableConfigurationProperties(TeacherProperties.class) //加载配置类/*** 将教师实体交给spring管理*/
2024-07-27 21:10:58
433
原创 积累知识库:线程池的使用
使用此线程池无法实现线程重用,每次调用都会新建一条线程。若系统中不断的创建线程,最终会导致系统占用内存过高,引发。CountDownLatch这个类能够使一个线程等待其他线程完成各自的工作后再执行。新建配置类(开启异步那个配置类)--配置线程池。使用的话可以把异步的放在一个类中,加上直接。在需要使用的类中注入这个异步类,调用方法。开启异步 :在启动器或者新建配置类。, 在需要异步的方法上加上注解。@Async自定义线程池。注解,在默认情况下用的是。
2024-07-21 09:33:06
429
原创 积累知识库:责任链模式实现数据多重校验
责任链模式(Chain of Responsibility): 使多个对象都有机会处理同一请求,从而避免请求的发送者和接受者之间的耦合关系,每个对象都是一个处理节点,将这些对象连成一条链,并沿着这条链传递该请求。原始概念中,是直到链上的某个接收对象能够处理它为止。实际使用中,链上的所有对象都可以对请求进行特殊处理。
2024-06-30 09:29:30
583
原创 积累知识库:ThreadLocal在工作中是怎么使用
每个线程在往ThreadLocal里设置值的时候,都是往自己的ThreadLocalMap里存,读也是以某个ThreadLocal作为引用,在自己的map里找对应的key,从而实现了线程隔离。如果你创建了一个ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的一个本地拷贝,多个线程操作这个变量的时候,实际是操作自己本地内存里面的变量,从而起到线程隔离的作用,避免了线程安全问题。上面源码的时候,大家有看到Entry ,这是ThreadLocalMap的内部类。2.存储用户登录信息。
2024-06-23 19:37:33
871
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人