spring
文章平均质量分 81
莫轻言舞
莫笑少年江湖梦,谁不少年梦江湖。曾经年少立志三千里,如今踌躇百步无寸功。儿女蹒跚学堂中。碎银几两催人老。心仍少,皱纹却上眉目中,浮生醉酒回梦里。青春人依旧,只叹时光太匆匆!
展开
-
在SpringBoot中重试调用第三方API
Spring Retry是Spring框架提供的一个模块,它通过提供注解或编程方式的方式,帮助我们实现方法级别的重试机制。在Spring Boot中,可以很方便地集成并使用Spring Retry。在Spring Boot项目中,通过集成Spring Retry模块,我们可以优雅地实现对第三方API调用的重试机制。通过@Retryable注解,我们能够很方便地在方法级别上添加重试策略。同时,异步方法和异常类型的支持使得我们能够更灵活地应对不同的业务场景。原创 2024-01-02 09:57:34 · 1148 阅读 · 1 评论 -
SpringBoot 项目部署方案
分享的是springboot打包并结合shell脚本命令部署,重点在分享一个shell程序启动工具,希望能便利工作;profiles指定不同环境的配置maven-assembly-plugin打发布压缩包分享 shenniu_publish.sh程序启动工具linux上使用 shenniu_publish.sh启动程序。原创 2024-01-02 09:53:48 · 950 阅读 · 0 评论 -
SpringBoot 集成支付宝支付
通过AlipayClient执行request调用SDK生成表单,用HttpServletResponse(浏览器响应的一个流)写表单的内容,创建一个html的网页)--------------------------->执行请求,拿到响应的结果,返回给浏览器;创建AlipayTradePagePayRequest,设置Request参数(参数包含支付宝回调的订单流水号、总金额、我的订单编号)(格式:JSON格式)---------------------------->创建Request,设置参数;原创 2024-01-02 09:48:50 · 1029 阅读 · 0 评论 -
Spring 在多线程环境下如何确保事务一致性
一次事务的完成通常都是默认在当前线程内完成的,又因为一次事务的执行过程中,涉及到对当前数据库连接Connection的操作,因此为了避免将Connection在事务执行过程中来回传递,我们可以将Connextion绑定到当前事务执行线程对应的ThreadLocalMap内部,顺便还可以将一些其他属性也放入其中进行保存,在Spring中,负责保存这些ThreadLocal属性的实现类由。(这里其实就是责任链模式的应用)事务的结束分为两种情况: 需要进行事务回滚或者事务正常提交,如果是事务回滚,还需要判断。原创 2023-10-09 15:57:07 · 524 阅读 · 0 评论 -
项目接口请求合并
请求合并到底有什么意义呢?我们来看下图。假设我们3个用户(用户id分别是1、2、3),现在他们都要查询自己的基本信息,请求到服务器,服务器端请求数据库,发出3次请求。我们都知道数据库连接资源是相当宝贵的,那么我们怎么尽可能节省连接资源呢?这里把数据库换成被调用的远程服务,也是同样的道理。我们改变下思路,如下图所示。我们在服务器端把请求合并,只发出一条SQL查询数据库,数据库返回后,服务器端处理返回数据,根据一个唯一请求ID,把数据分组,返回给对应用户。原创 2023-10-09 15:50:35 · 283 阅读 · 0 评论 -
忽视日志吃大亏,玩转 SpringBoot 日志
学习完本文,你应当对现在这几个常用框架的有所了解,并能基础应用了。此次我们没有讲源码,也没有深入的讲其配置及进阶使用,这些我们会在后面慢慢学习,可前往[日志专栏][Link2]查看。但现在我希望你能知道的是。一定要写好日志,一定要写好日志,一定要写好日志。重要的事情说三遍!这是区别新人和老鸟的一个重要依据,也是让自己排查问题更轻松的不二法门!另外,现在很多中间件都自己引用了日志插件,我们作为一个整体工程在使用中间件时,要及时发现并解决插件冲突,避免我们自己的日志配置失效,这也是一个程序员该注意的点。原创 2023-10-09 15:45:18 · 74 阅读 · 0 评论 -
SpringBoot 调用外部接口的三种方式
SpringBoot不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。在Spring-Boot项目开发中,存在着本模块的代码需要访问外面模块接口,或外部url链接的需求, 比如在apaas开发过程中需要封装接口在接口中调用apaas提供的接口(像发起流程接口submit等等)下面也是提供了三种方式(不使用**dubbo**的方式)供我们选择。原创 2023-10-09 15:32:37 · 850 阅读 · 0 评论 -
ELK 处理 SpringCloud 日志
举个例子,一个 Indexer 在持续读取 Redis 中的记录,现在想加入第二个 Indexer,如果使用 list ,就会出现上一条记录被第一个 Indexer 取走,而下一条记录被第二个 Indexer 取走的情况,两个 Indexer 之间产生了竞争,导致任何一方都没有读到完整的日志。我的Nginx 与 Spring Boot 项目部署在同一台机器上,所以还需修改 Shipper 类型的 Logstash 的配置以支持两种类型的日志输入和输出,其配置文件的内容可 点击这里获取。原创 2023-10-09 15:27:02 · 494 阅读 · 0 评论 -
网关 GateWay 的使用详解、路由、过滤器、跨域配置
有时候SpringCloudGateWay提供的过滤器工厂不能满足自己的要求。可能有时候需要在过滤时做一些其它的逻辑操作。那么这时候可以选择使用java代码自定义全局过滤器。@Component@Override// 1.获取请求参数//1.这里的request并不是servlet中的request//2.返回值是一个多键的map集合、也就是说这个map集合的键可以重复// 2.获取userName参数// 3.校验// 放行// 4.拦截// 4.1.禁止访问,设置状态码。原创 2023-09-19 10:25:51 · 1456 阅读 · 0 评论 -
WebSocket 的 6 种集成方式
实现一个库【Spring Cloud】一个配置注解实现 WebSocket 集群方案3种方式(Javax,WebMVC,WebFlux)在Spring Boot中的服务端和客户端配置。原创 2023-09-19 10:21:57 · 431 阅读 · 0 评论 -
注解实现接口幂等性
简单来说,就是对一个接口执行重复的多次请求,与一次请求所产生的结果是相同的,听起来非常容易理解,但要真正的在系统中要始终保持这个目标,是需要很严谨的设计的,在实际的生产环境下,我们应该保证任何接口都是幂等的,而如何正确的实现幂等,就是本文要讨论的内容。/*** 参数名,表示将从哪个参数中获取属性值。* 获取到的属性值将作为KEY。* @return*//*** 属性,表示将获取哪个属性的值。* @return*//*** 参数类型* @return*/原创 2023-09-19 10:17:57 · 104 阅读 · 0 评论 -
spring boot 使用AOP+自定义注解+反射实现操作日志记录修改前数据和修改后对比数据,并保存至日志表
*** 写入日志表时,字段对应的中文注释*/@Retention(RetentionPolicy.RUNTIME) // 注解会在class字节码文件中存在,在运行时可以通过反射获取到@Target({ElementType.FIELD,ElementType.METHOD})//定义注解的作用目标**作用范围字段、枚举的常量/方法@Documented //说明该注解将被包含在javadoc中/*** 汉字全称* @return*/原创 2023-09-08 15:25:05 · 2546 阅读 · 3 评论 -
13 秒批量插入 30 万条数据
13 秒批量插入 30 万条数据原创 2023-08-31 16:58:06 · 75 阅读 · 0 评论 -
SpringBoot 该如何预防 XSS 攻击
*** Filter 过滤器,拦截请求转换为新的请求*//*** 初始化方法*/@Override/*** 过滤方法*/@Override} else {@Override/*注入自定义的序列化工具,将RequestBody的参数进行转译后传输*/// XSS序列化就是注意要分情况处理。拦截器处理一部分,并注意拦截器的注册方式Jackson的方式处理另一部分,也是注意配置方式。原创 2023-08-10 10:44:33 · 1140 阅读 · 0 评论 -
网关 GateWay 的使用详解、路由、过滤器、跨域配置
有时候SpringCloudGateWay提供的过滤器工厂不能满足自己的要求。可能有时候需要在过滤时做一些其它的逻辑操作。那么这时候可以选择使用java代码自定义全局过滤器。@Component@Override// 1.获取请求参数//1.这里的request并不是servlet中的request//2.返回值是一个多键的map集合、也就是说这个map集合的键可以重复// 2.获取userName参数// 3.校验// 放行// 4.拦截// 4.1.禁止访问,设置状态码。原创 2023-08-07 10:29:10 · 2211 阅读 · 0 评论 -
使用上 Spring 的事件机制
新增一个类,继承我们的ApplicationEvent。如下面代码,继承后定义了一个userId,有一个UserChangePasswordEvent方法。这里就定义我们监听器需要的业务参数,监听器需要那些参数,我们这里就定义那些参数。/*** @Description 修改密码事件**/@Getter@Setter。原创 2023-08-03 10:29:35 · 866 阅读 · 0 评论 -
SpringBoot + Docker 实现一次构建到处运行
Docker 作为一种新兴的虚拟化方式,它可以更高效的利用系统资源,不需要进行硬件虚拟以及运行完整操作系统等额外开销。传统的虚拟机技术启动应用服务往往需要数分钟,而 Docker 容器应用,由于直接运行宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。最重要的是一致的运行环境。Docker 的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性。从而达到真正意义上的 一次构建,到处执行。原创 2023-08-03 10:25:15 · 496 阅读 · 0 评论 -
Java 中的 7 种重试机制
从手动重试,到使用 Spring AOP 自己动手实现,再到站在巨人肩上使用特别优秀的开源实现 Spring Retry 和 Google guava-retrying,经过对各种重试实现方式的介绍,可以看到以上几种方式基本上已经满足大部分场景的需要:如果是基于 Spring 的项目,使用 Spring Retry 的注解方式已经可以解决大部分问题如果项目没有使用 Spring 相关框架,则适合使用 Google guava-retrying:自成体系,使用起来更加灵活强大。原创 2023-08-03 10:21:58 · 203 阅读 · 0 评论 -
SpringBoot 项目使用 Redis 对用户 IP 进行接口限流
SpringBoot 项目使用 Redis 对用户 IP 进行接口限流原创 2023-07-27 18:58:45 · 1309 阅读 · 0 评论 -
新一代分布式任务调度框架
PowerJob是新一代分布式任务调度与计算框架,支持CRON、API、固定频率、固定延迟等调度策略,提供工作流来编排任务解决依赖关系,能让您轻松完成作业的调度与繁杂任务的分布式计算。原创 2023-07-27 18:53:57 · 576 阅读 · 0 评论 -
SpringBoot 快速实现 IP 地址解析
在spring boot 项目中获取请求的ip与详细地址,很多网站app 中都已经新增了ip 地址显示,大家也可以用在自己的开发中,显得更高级。原创 2023-07-27 18:46:50 · 1414 阅读 · 0 评论 -
Controller 就该这么写,简洁又优雅
有些时候 JSR303 标准中提供的校验规则不满足复杂的业务需求,也可以自定义校验规则自定义校验规则需要做两件事情自定义注解类,定义错误信息和一些其他需要的内容注解校验器,定义判定规则//自定义注解类/*** 是否允许为空*//*** 校验不通过返回的提示信息*/String message() default "不是一个手机号码格式";/*** Constraint要求的属性,用于分组校验和扩展,留空就好*/Class<?Class<?//注解校验器。原创 2023-07-27 18:22:25 · 95 阅读 · 0 评论 -
Elasticsearch 介绍及java集成
Elasticsearch 介绍及java集成原创 2023-07-18 19:10:04 · 7963 阅读 · 2 评论 -
SpringBoot 实现审核功能
SpringBoot 实现审核功能原创 2023-07-05 10:27:02 · 365 阅读 · 0 评论 -
java 接口防刷处理方案
接口防刷处理方案原创 2023-04-03 10:23:35 · 823 阅读 · 1 评论 -
优雅停止 SpringBoot 服务,拒绝 kill -9 暴力停止
优雅停止 SpringBoot 服务,拒绝 kill -9 暴力停止!原创 2023-03-01 11:45:21 · 503 阅读 · 0 评论 -
SpringBoot集成ElasticSearch,实现模糊查询,批量CRUD,排序,分页,高亮
SpringBoot集成ElasticSearch,实现模糊查询,批量CRUD,排序,分页,高亮转载 2023-03-01 11:41:40 · 143 阅读 · 0 评论 -
10 种 Spring 事务失效的常见场景
10 种 Spring 事务失效的常见场景原创 2023-03-01 10:58:34 · 138 阅读 · 0 评论 -
基于 ThreadLocal 实现一个上下文管理组件
基于 ThreadLocal 实现一个上下文管理组件原创 2023-03-01 10:46:40 · 105 阅读 · 0 评论 -
SpringBoot 中使用 spring-retry 解决失败重试调用
SpringBoot 中使用 spring-retry 解决失败重试调用原创 2023-03-01 10:33:01 · 978 阅读 · 0 评论 -
java MongoDB 列表分页查询
java MongoDB 列表分页查询原创 2023-02-01 15:59:15 · 780 阅读 · 0 评论 -
Springboot + MongoDB 大容量数据分页及条件查询(千万数据量级别)
Springboot + MongoDB 大容量数据分页及条件查询(千万数据量级别)转载 2023-02-01 15:33:53 · 1938 阅读 · 0 评论 -
Spring Boot Admin 服务监控利器
Spring Boot Admin 服务监控利器转载 2023-01-30 15:04:03 · 272 阅读 · 0 评论 -
多线程事务使用与回滚
多线程提交与回滚原创 2023-01-16 10:11:05 · 587 阅读 · 0 评论 -
SpringBoot 使用 Sa-Token-Quick-Login 插件实现快速登录认证
SpringBoot 使用 Sa-Token-Quick-Login 插件实现快速登录认证转载 2023-01-09 10:14:51 · 80 阅读 · 0 评论 -
SpringBoot整合Memcached
SpringBoot整合Memcached转载 2023-01-04 10:16:01 · 441 阅读 · 0 评论 -
MyBatis-Plus 支持连表查询
MyBatis-Plus 不支持联表?一个依赖轻松搞定转载 2023-01-03 11:51:03 · 1409 阅读 · 0 评论 -
消息重试框架 Spring-Retry 和 Guava-Retry
spring-retry 和 guava-retry 工具都是线程安全的重试,能够支持并发业务场景的重试逻辑正确性。两者都很好的将正常方法和重试方法进行了解耦,可以设置超时时间、重试次数、间隔时间、监听结果、都是不错的框架。但是明显感觉得到,guava-retry在使用上更便捷,更灵活,能根据方法返回值来判断是否重试,而Spring-retry只能根据抛出的异常来进行重试。转载 2022-12-29 11:05:55 · 90 阅读 · 0 评论 -
SpringCloud Gateway网关为认证中心和用户微服务构建统一的认证授权入口
SpringCloud Gateway构建一个网关微服务,作为统一的认证授权和访问入口。转载 2022-12-29 10:24:56 · 189 阅读 · 0 评论 -
Spring Cloud Sleuth在分布式中进行日志跟踪
zipkin可以把它当做就是一个带有可视化界面的jar包,项目当中集成zipkin依赖主要是将sleuth链路跟踪的数据,上传到zipkin,由zipkin对数据进行整理并在页面上展示了出来,真正实现链路跟踪的是sleuth。跨度可以启动和停止,并且它们会跟踪它们的时间信息。假如不使用Sleuth,在我们进行远程调用的时候报错了,实际上我们是看不到他是因为什么报错的,我们只知道调用他报错了,日志如下,要想真正知道报的什么异常还得去查看远程调用的服务日志,而且还得比对服务调用时间,来查看当时报错的日志。翻译 2022-12-27 14:19:42 · 161 阅读 · 0 评论