SpringBoot
文章平均质量分 79
奔向理想的星辰大海
这个作者很懒,什么都没留下…
展开
-
SpringBoot项目使用十个开发技巧
注:在生成环境下,你将无法看到上面的输出结果,你需要做其它的配置,情况下面的第九条。原创 2024-05-16 09:47:05 · 1 阅读 · 0 评论 -
SpringBatch高阶应用:大数据批处理框架实战指南
当程序恢复后你希望能够接着程序终止前的进度继续执行,这时候你需要进行如下的操作(本人没有发现有什么API能够操作的,可能文档没看仔细)。要想重复启动Job,我们可以在启动Job时设置不同的JobParameters参数,只要参数不同那么就可以重复的启动Job。当你调用该接口时,你会发现接口一直不会返回,一直阻塞,下图是Job的启动序列。// 节流限制10,这里配置的大小应该与你的数据库连接池大小及使用的线程池核心线程数一致。通过上面配置后,Job启动将是异步的会直接返回JobExecution。原创 2024-05-06 09:46:35 · 189 阅读 · 3 评论 -
redis zset详解:排行榜绝佳选择
跳跃表的查找和修改数据的性能较高,但是占用的内存也较多。membersWithScoresInScoreRange.forEach(o->log.info("9、获取ZSET中指定分数范围内的成员及其分数,成员:{},分数",o.getValue(),o.getScore()));membersWithScoresInRange.forEach(o->log.info("8、获取ZSET中指定排名范围内的成员及其分数,成员:{},分数",o.getValue(),o.getScore()));原创 2024-04-28 09:49:11 · 596 阅读 · 0 评论 -
利用Spring Boot以及Spring AI构建生成式人工智能应用
Spring AI,作为行业领导者,通过其强大、灵活的API和先进的功能,为各种行业提供了颠覆性的解决方案。在本专题中,我们将深入探讨Spring AI在各领域的应用示例,每个案例都将展示Spring AI如何满足特定需求,实现目标,并将这些LESSONS LEARNED扩展到更广泛的应用。希望这个专题能对你有所启发,更深入地理解和利用Spring AI的无限可能。Spring框架在软件开发领域已经有超过20年的历史,自Spring Boot 1.0版本发布以来已有10年。原创 2024-04-28 09:37:17 · 980 阅读 · 0 评论 -
SpringBoot java -jar 的启动原理
先简单说下上面目录结构,大体目录分三层:BOOT-INF、META-INF、org,BOOT-INF是存放对应的应用服务的.class文件和Maven依赖的jar包,包括启动类SpringBootTestApplication,META-INF下存放的是Maven相关的pom信息和MANIFEST.MF文件,org文件夹下存放的是Spring boot loader模块编译的.class文件,也就是jar启动的关键代码所在。不过由此也说明了JarLauncher 既支持JAR启动,又支持文件系统启动。原创 2024-04-23 09:25:44 · 6 阅读 · 0 评论 -
Spring 包含的模块
Spring的 AOP 封装包提供了符合AOP Alliance规范的面向方面的编程实现,让你可以定义,例如方法拦截器(method-interceptors)和切点(pointcuts),从逻辑上讲,从而减弱代码的功能耦合,清晰的被分离开。Context封装包的特性得自于Beans封装包,并添加了对国际化(I18N)的支持(例如资源绑定),事件传播,资源装载的方式和Context的透明创建,比如说通过Servlet容器。6. Spring Web 提供了web的一些工具类的支持。原创 2024-04-14 11:31:05 · 8 阅读 · 0 评论 -
详解WebSocketMessageBrokerConfigurer在SpringBoot中应用与实践
WebSocketMessageBrokerConfigurer是Spring WebSocket模块中的一个关键接口,它允许开发者对WebSocket消息代理进行高级定制。在Spring Boot 2环境中,我们可以通过实现这个接口来自定义WebSocket端点配置、消息代理(Message Broker)规则以及STOMP协议相关的细节。// 实现接口方法。原创 2024-04-12 10:48:18 · 7 阅读 · 0 评论 -
ObjectMapper JSON格式化的正确用法
如果你通过我们一系列的工具,定位到了热点代码,要测试它的性能数据,评估改善情况,就可以交给JMH。当然,由于ObjectMapper有很多的特性需要配置,你可能会为不同的应用场景分配一个单独使用的ObjectMapper。ObjectMapper也不例外,它也是线程安全的,你可以并发的执行它,不会产生任何问题。如果使用ThreadLocal的方式,每个线程给它分配一个解析器,则性能会有少许上升,但也没有达到非常夸张的地步。我的cpu有10核,直接就分配了10个线程的并发,cpu在测试期间跑的满满的。原创 2024-04-11 09:38:13 · 652 阅读 · 0 评论 -
SpringBoot 的底层原理实现
可以想下,SpringBoot肯定是需要使用到Spring的核心能力的,而Spring的核心能力就是如何管理Bean的生命周期,那就脱离不了Spring的应用上下文,但是我们在使用SpringBoot的过程中,从头到尾都没有明确创建过Spring应用上下文。那么,什么是自动装配?笔者看来自动装配就像是搭积木,将多种形状的模型组装在一起,对应SpringBoot中的自动装配则是将单独的第三方功能,组装到Spring这个大的容器中,让Spring可以全权管理所涉及到的Bean实例,并在整个项目中使用。原创 2024-04-09 09:23:55 · 14 阅读 · 0 评论 -
java+spring 获取上下文中的登录信息应该用静态方法还是实例方法
通过以上步骤,我们成功地实现了Java SpringBoot上下文的创建和使用。上下文为我们提供了一种访问应用程序中各种资源的方法,使得开发和管理SpringBoot应用程序更加方便和灵活。原创 2024-04-08 09:36:52 · 67 阅读 · 0 评论 -
支付系统就该这么设计,稳的一批
数据一致性治理 大型的支付公司,内部都有非常严格和完备的数据一致性方案,比如采用业务侵入性非常大的分布式事务等,以牺牲开发效率来提升数据的稳定,是非常有必要的。因此,可以拆分获取凭证的操作,通过独立网关渠道前置服务,将获取的方式异步化,从前置网关获取内部凭证,然后由前置网关去异步调用第三方。2. 核心系统解析 交易核心 交易核心把公司的业务系统和底层支付关联起来,让业务系统专注于业务,不比关心底层支付。异步化 支付是整个交易链路的核心环节,那么,怎么兼顾支付系统的稳定性和执行效率呢?热点账户账务单独处理。原创 2024-04-07 11:41:52 · 248 阅读 · 0 评论 -
Spring在多线程环境下如何确保事务一致性
一次事务的完成通常都是默认在当前线程内完成的,又因为一次事务的执行过程中,涉及到对当前数据库连接Connection的操作,因此为了避免将Connection在事务执行过程中来回传递,我们可以将Connextion绑定到当前事务执行线程对应的ThreadLocalMap内部,顺便还可以将一些其他属性也放入其中进行保存,在Spring中,负责保存这些ThreadLocal属性的实现类由TransactionSynchronizationManager承担。(这里其实就是责任链模式的应用)原创 2024-04-03 09:53:24 · 10 阅读 · 0 评论 -
Spring Boot3,启动时间缩短 10 倍!
Spring Boot 启动性能从参数上来说,到底提升了多少。先告诉大家结论:启动速度提升 10 倍以上。原创 2024-04-03 09:28:53 · 2 阅读 · 0 评论 -
提升单体springboot的并发数
从对接口响应内容的影响按业务进行拆分,将与接口响应数据相关的业务逻辑全拎出来,剩下的业务流程按需在各个阶段进行异步化处理,这部分可以走MQ、异步线程处理等等。将拎出来的那部分业务逻辑再进行拆分,找出可以并行处理的业务进行异步并行执行,如果依赖异步执行的数据时,可以监听并等待异步业务执行成功后再进行处理;降级,其实是最后的无赖之举,断臂求生,把所有资源都提供给核心业务,保证核心业务的正常服务,边缘业务暂停服务;将可以并行的业务剥离出来,异步并行执行,缩短整体业务执行时间,提升系统单位时间吞吐量;原创 2024-04-01 13:23:06 · 184 阅读 · 0 评论 -
SpringCloud项目开发中实用技巧总结
通过 spring.factories添加 PropertySourceLocator 类型的 Bean 来添加其他属性源。@Override在spring.factories中添加如下配置以上是本篇文章的全部内容。原创 2024-03-28 10:12:39 · 18 阅读 · 0 评论 -
SpringBoot 快速实现 api 加密
该项目使用RSA加密方式对API接口返回的数据加密,让API数据更加安全。别人无法对提供的数据进行破解。Spring Boot接口加密,可以对返回值、参数值通过注解的方式自动加解密。首先我们当然是了解RSA加密RSA加密是一种非对称加密。可以在不直接传递密钥的情况下,完成解密。这能够确保信息的安全性,避免了直接传递密钥所造成的被破解的风险。是由一对密钥来进行加解密的过程,分别称为公钥和私钥。两者之间有数学相关,该加密算法的原理就是对一极大整数做因数分解的困难性来保证安全性。原创 2024-03-26 10:56:47 · 945 阅读 · 0 评论 -
spring多数据源动态切换的实现原理及实现
当系统执行数据库操作之前,会先获取数据源链接,即调用getConnection方法,该类重写的getConnection方法,会获取到真正的目标数据源,进而将数据库操作委托给目标数据源进行处理。根据业务需求选择不同类型的数据源,实现对多数据库的支持。数据源负载均衡:根据负载均衡策略来选择合适的数据源,将请求均匀地分配到不同的数据源上,提高系统的整体性能和可伸缩性。读写分离:为了提高数据库的读写性能,可能会采用读写分离的方式,根据读写操作的类型来选择合适的数据源,实现读写分离。* 数据源名称,默认主库。原创 2024-03-25 10:38:06 · 579 阅读 · 0 评论 -
使用 Spring Boot 的自动装配特性
第二个,这个配置类是放在第三方jar包里面,如何通过SpringBoot中的约定优于配置的一个理念,去把这个配置类的全路径,放在classpath:META-INF/spring.factories文件里面,这样的话,SpringBoot就可以知道第三方jar包里面这个配置类的位置。1.启动类的main方法中,调用了类SpringApplication中的一个run()方法,这个run()方法的主要作用是去加载启动类。(1)在类SpringApplication中的第一个run()方法,把参数传了进去。原创 2024-03-23 20:15:44 · 7 阅读 · 0 评论 -
为什么说 Java 程序员必须掌握 Spring Boot
Spring Boot 简化了基于 Spring 的应用开发,通过少量的代码就能创建一个独立的、产品级别的 Spring 应用。综上我们可以这样来理解,正是由于 Spring Ioc 和 Spring Aop 两个强大的功能才有了 Spring ,Spring 生态不断的发展才有了 Spring Boot ,使用 Spring Boot 让 Spring 更易用更有生命力,Spring Cloud 是基于 Spring Boot 开发的一套微服务架构下的服务治理方案。原创 2024-03-22 16:14:33 · 12 阅读 · 0 评论 -
springboot整合redis的哨兵模式
在Spring Boot中整合Redis的哨兵模式涉及到配置Spring Boot应用程序以连接到Redis哨兵集群。哨兵模式是Redis的一种高可用解决方案,它提供了自动故障转移功能,可以在Redis主节点发生故障时自动将一个从节点升级为新的主节点。在您的Spring Boot项目的application.properties或application.yml文件中配置Redis哨兵模式的连接信息。配置Redis哨兵。在Spring Boot项目中创建一个配置类,配置Redis连接工厂。原创 2024-03-21 11:37:51 · 111 阅读 · 0 评论 -
SpringBoot-设计优秀的后端接口
前端发出接口请求》》controller处理请求》》同时ResponseControllerAdvice中添加了扫描控制层的全局异常处理类》》beforeBodyWrite规定了返回统一的结果体》》结果体ResultVO中定义了其内容包含有code,msg,data》》所以controller中处理的结果被增强操作,封装成了ResultVO中的格式》》由此达到了统一返回。OK,这个异常信息响应就非常好了,状态码和响应说明还有错误提示数据都返给了前端,并且是所有异常都会返回相同的格式!原创 2024-03-20 09:40:05 · 473 阅读 · 0 评论 -
详解基于SpringBoot的WebSocket应用开发
WebSocket是一种在单个TCP连接上进行全双工通信的协议,其最大的特点是服务器可以主动向客户端发送消息,而不需要客户端先发起请求。相较于传统的HTTP长轮询或轮询机制,WebSocket能有效减少不必要的网络通信开销,并提供更优的实时性。通过上述步骤,我们已经在Spring Boot项目中成功实现了WebSocket功能。需要注意的是,实际应用场景中可能需要对用户权限、连接管理、消息队列、心跳检测等功能进行更细致的设计与实现,以确保WebSocket服务的稳定性和性能表现。原创 2024-03-19 10:03:05 · 26 阅读 · 0 评论 -
SpringBoot + validator优雅参数校验,消除if-else
Hibernate Validate是Bean Validation实现的,内置了JSR303/JSR380中所有的constraint的实现,同时也额外提供了很多自定义的constraint。Bean Validation为JavaBean的验证提供了很多相关的元数据模型和API。java@NotNull(message = "userId不能为空",groups = Update.class) private Long userId;原创 2024-03-14 13:39:52 · 7 阅读 · 0 评论 -
SpringBoot 3.X 版本的变化,需要注意的点
Spring6已删除对 Apache HttpClient 的支持,并替换为org.apache.httpcomponents.client5:httpclient5(注意:此依赖项具有不同的 groupId)。在Spring6之前版本,server.max-http-header-size在四个支持的嵌入式web服务器上的处理不一致。为了解决这种不一致,server.max-http-header-size已被弃用,并引入了server.max-http-request-header-size的替代品。原创 2024-03-08 11:15:55 · 25 阅读 · 0 评论 -
SpringBoot统一封装返回前端结果集
但是,由于我们的项目可能是由很多人开发的,所以我们最好将返回的结果统一起来,这样每个人都可以返回相同的数据格式,这不仅规范了代码,也方便了前端人员调用,否则每个人都会按照自己的风格编写,代码会变得非常混乱。例如,0表示成功,1表示失败,2表示必须传递错误的参数,4表示系统异常,依此类推。然后还有我们的核心数据。这种类型必须是多样的,所以我们需要使用统一的父类,以便对象可以接收所有类型。例如,用户名已经存在,事实上,业务并不成功,但HTTP的结果肯定是200, 因此我们需要一个代码来描述我们的业务状态。原创 2024-03-06 13:16:18 · 155 阅读 · 0 评论 -
Spring 减少10%的代码:自定义参数解析器真的很强大,你不来了解一下?
原因是:SpringBoot 2.0.0 以上都采用内置tomcat8.0以上版本,而tomcat8.0以上版本遵从RFC规范添加了对Url的特殊字符的限制,url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~四个特殊字符以及保留字符(!user={"age":12,"id":"1","name":"凹凸曼"} 那么这种我们可能一般都是使用String接收,然后在调用转JSON的API进行处理。通过循环枚举的值然后比较。而且我们的参数传递的是:0,1这种数字,方法参数是枚举类型。原创 2024-03-06 13:04:23 · 661 阅读 · 0 评论 -
SpringBoot+Redis 解决海量重复提交问题
本篇介绍了使用springboot和拦截器、redis来优雅的实现接口幂等,对于幂等在实际的开发过程中是十分重要的,因为一个接口可能会被无数的客户端调用,如何保证其不影响后台的业务处理,如何保证其只影响数据一次是非常重要的,它可以防止产生脏数据或者乱数据,也可以减少并发量,实乃十分有益的一件事。2、token机制,每次接口请求前先获取一个token,然后再下次请求的时候在请求的header体中加上这个token,后台进行验证,如果验证通过删除token,下次请求再次判断token。原创 2024-03-04 09:44:52 · 1121 阅读 · 0 评论 -
探秘OpenFeign核心架构原理
所以,这就是为什么使用注解配置时为什么配置类不能加@Configuration注解的原因,因为一旦被项目启动的容器扫描到,这个配置就会作用于所有的FeignClient,并且优先级是最高的,就会导致你其它的配置失效,当然你也可以加@Configuration注解,但是一定不能被项目启动的容器扫到。之后根据MethodMetadata和方法的入参,构造出一个RequestTemplate,RequestTemplate封装了Http请求的参数,在这个过程中,如果有请求体,那么会通过Encoder序列化。原创 2024-02-29 14:31:35 · 238 阅读 · 0 评论 -
SpringBoot实现动态增删启停定时任务
在spring boot项目中,可以通过@EnableScheduling注解和@Scheduled注解实现定时任务,也可以通过SchedulingConfigurer接口来实现定时任务。要实现动态增删启停定时任务功能,比较广泛的做法是集成Quartz框架。添加实现了CommandLineRunner接口的SysJobRunner类,当spring boot项目启动完成后,加载数据库里状态为正常的定时任务。添加定时任务注册类,用来增加、删除定时任务。修改定时任务,先移除原来的任务,再启动新任务。原创 2024-02-29 10:56:02 · 291 阅读 · 0 评论 -
springboot--配置线程池实现定时任务
封装自定义线程池类是为了在线程执行完毕后,我们检查是否存在异常,如果存在异常,日志打印详细异常信息,这样可以可以帮助我们及时发现和解决问题。JDK 默认提供的定时调度线程池类是ScheduledThreadPoolExecutor,我们只需要继承它并重写它的 afterExecute 方法,添加异常日志打印的逻辑。@Override// 打印异常信息// 判断 r 是 Future 实例并且已经完成执行的情况下,获取它的执行结果,并检查是否有异常抛出>) {try {Future原创 2024-02-29 10:07:36 · 739 阅读 · 0 评论 -
SpringBoot集成ffmpeg实现视频转码播放
之前构建过文件预览服务,对于视频部分前端播放组件限制只能为mp4格式,为了支持更多视频格式决定对方案进行升级,由于视频格式较多,针对每一种格式定制选择播放器不太现实,决定对视频源统一转码,转码后的格式为mp4,兼容性稳定且前后端改造工作较小。原创 2024-02-29 09:14:03 · 134 阅读 · 0 评论 -
MyBatis-Plus整合SpringBoot 快速上手,值得收藏!!!
MyBatis-Plus 是一个为了简化开发效率而生的 MyBatis 增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。其整合到 Spring Boot 项目中,可以让开发过程更加便捷。原创 2024-02-23 10:56:08 · 355 阅读 · 0 评论 -
Spring Boot程序的打包与运行:构建高效部署流程
将项⽬打成 war 包,部署到外部的 tomcat 中,这个时候,不能直接访问 spring boot 项⽬中配置⽂件配置的端⼝。application.yml 中配置的 server.port 配置的 是spring boot 内置的 tomcat 的端⼝号 , 打成 war 包部署在独⽴的 tomcat 上之后 , 配置的server.port 是不起作⽤的。通过本文的介绍,你学会了如何使用 Maven 插件打包 Spring Boot 应用,灵活的打包和部署。--添加servlet的依赖-->原创 2024-02-23 10:47:06 · 807 阅读 · 0 评论 -
spring boot rector 打包部署
Spring Boot提供了一种快速构建基于Spring的应用程序的方式,它自动配置了许多常见的功能和依赖项,让我们能够专注于业务逻辑的开发。使用Spring Boot Rector,我们可以将应用程序打包成一个独立的、可执行的JAR文件,而不需要安装和配置任何其他的软件。一旦我们完成了应用程序的业务逻辑的编写,我们就可以使用Spring Boot Rector构建和打包应用程序了。在Application类中,我们可以使用Spring Boot的常规注解来编写我们的应用程序的业务逻辑。原创 2024-02-23 10:27:46 · 301 阅读 · 0 评论 -
Spring Boot 实现各种参数校验,建议收藏!
业务需求总是比框架提供的这些简单校验要复杂的多,我们可以自定义校验来满足我们的需求。自定义非常简单,假设我们自定义加密id(由数字或者a-f的字母组成,32-256自定义约束注解String message() default "加密id格式错误";Class原创 2024-02-21 13:53:31 · 1104 阅读 · 0 评论 -
Java 8 新特性-日期时间API之LocalDate类
需要注意的是,这个方法并不会对输入的天数进行有效性检查,因此如果输入的天数超出了给定年份的范围(例如,在2月输入了30),那么创建出来的 LocalDate 对象可能不准确。这个方法返回的是一个长整型(long)的值,它将此本地日期与指定的时间和作为参数传递的偏移量相结合,以计算epoch-second值,该值是从1970-01-01T00:00:00Z开始经过的秒数。LocalDate的lengthOfMonth()方法用于获取此LocalDate表示的月份的长度,即该月份的天数。原创 2024-02-15 22:58:54 · 525 阅读 · 0 评论 -
【Java】优化 Spring Boot 项目的性能
排除不必要的 Spring Boot 启动项,例如 `spring-boot-starter-web` 如果你不需要内置的 Tomcat。- 使用更高效的数据结构,如 `ConcurrentHashMap` 替代 `HashMap`。- 使用 Spring Profiles 指定环境,避免在启动时加载不需要的环境配置。- 使用 JVM 参数调整堆内存大小,如 `-Xmx` 和 `-Xms`。- 减少 synchronized 块的使用,优化线程竞争。- 优化 SQL 查询,使用索引、合理设计表结构等。原创 2024-02-15 22:10:26 · 452 阅读 · 0 评论 -
Spring Boot + MinIO 实现文件切片极速上传技术
现代Web应用中,文件上传是一个常见的需求,尤其是对于大文件的上传,如视频、音频或大型文档。本文将介绍如何使用Spring Boot和MinIO实现文件切片极速上传技术,通过将大文件分割成小片段并并行上传,显著提高文件上传速度。文件切片上传是指将大文件分割成小的片段,然后通过多个请求并行上传这些片段,最终在服务器端将这些片段合并还原为完整的文件。在文件上传完成后,需要将所有的切片文件合并还原为完整的文件。创建一个文件上传的控制器,负责处理文件切片上传的请求。创建文件上传服务类,处理文件切片的具体上传逻辑。原创 2024-02-07 11:36:01 · 678 阅读 · 0 评论 -
Spring Boot整合Redis:实现高效缓存管理
Redis是一个开源的内存数据结构存储系统,它支持多种类型的数据结构,如字符串(Strings), 哈希(Hashes), 列表(Lists), 集合(Sets), 有序集合(sorted sets)等等。Spring Boot提供了自动配置的Redis模板和高级的数据访问抽象,这使得在Java应用中使用Redis变得非常简单和直观。正确地配置和使用Redis,将会使你的应用更加健壮和高效。Spring Cache抽象提供了一个易于使用的缓存技术的抽象层,它可以通过简单的注解来实现方法级别的缓存。原创 2024-02-07 11:20:55 · 357 阅读 · 0 评论 -
SpringBoot 优雅实现超大文件上传的小技巧
通俗的说,你把要上传的东西上传,服务器会先做MD5校验,如果服务器上有一样的东西,它就直接给你个新地址,其实你下载的都是服务器上的同一个文件,想要不秒传,其实只要让MD5改变,就是对文件本身做一下修改(改名字不行),例如一个文本文件,你多加几个字,MD5就变了,就不会秒传了。分片上传,就是将所要上传的文件,按照一定的大小,将整个文件分隔成多个数据块(我们称之为Part)来进行分别上传,上传完之后再由服务端对所有上传的文件进行汇总整合成原始的文件。这里的“s”表示synchronous(同步)的意思。原创 2024-02-06 10:14:34 · 794 阅读 · 0 评论