spring boot
文章平均质量分 61
码农-文若书生
这个作者很懒,什么都没留下…
展开
-
springboot学习(八十六) springboot使用graalvm编译native程序
下载windows版本配置java环境变量,配置过程略。原创 2024-03-14 20:40:48 · 1661 阅读 · 0 评论 -
springboot学习(八十五) 解决springboot3.2找不到资源无法抛出404错误的问题
springboot3.2以下可以定义ErrorPageRegistrar将404错误转发到一个接口地址,但升级到springboot3.2(spring6.1)后,该配置不生效,抛出了500错误。原创 2023-12-28 18:59:07 · 1544 阅读 · 0 评论 -
springboot学习(八十四) 解决springboot中使用Redis缓存,java.time.LocalDatetime类型无法序列化的问题
修改函数:getRedisCacheConfigurationWithTtl。原创 2023-08-08 09:55:31 · 800 阅读 · 0 评论 -
springboot学习(八十三) springboot中自定义某个对象的JSON序列化反序列化方式
springboot可自定义JSON序列化和反序列化方式原创 2023-05-18 08:31:16 · 1439 阅读 · 1 评论 -
springboot学习(八十二) springboot中配置Caffeine和Redis缓存,自定义缓存失效时间,并自定义实现通配符删除缓存功能
在spring boot项目中,避免不了使用缓存,当前想实现单机缓存和共享缓存的配置和切换,这里使用了Caffeine实现单机缓存,Redis实现共享缓存。使用spring-boot-starter-cache只能实现全局缓存的失效时间,当前想为某些缓存单独设置失效时间,自定了缓存的配置。在清除缓存时,spring-boot-starter-cache只能定向删除单个key,通过自定义Cache和CacheManager的形式实现通配符清除缓存的功能。原创 2023-02-22 16:08:23 · 4025 阅读 · 0 评论 -
springboot学习(八十一) springboot中使用类和方法注解实现AOP切面,并同时生效
2、实现切面数据源切换的逻辑不用关心,这里只关心AOP,定义了一个Pointcut,使用和定位了类和方法上的注解,并使用或进行连接。环绕通知引用此切入点,并通过getAnnotation方法实现使用连接点获取到方法或类上的注解。最终此功能完成了。原创 2023-02-21 18:53:28 · 1415 阅读 · 0 评论 -
springboot学习(八十) springboot中使用Log4j2记录分布式链路日志
可以为每一个请求分配一个traceId,记录日志时,记录此traceId,从网关开始,依次将traceId记录到请求头中,并借用log4j2的MDC功能实现traceId的打印。其中TRACE_ID_HEADER和LOG_TRACE_ID为上下游约定好的key。2、注册traceId过滤器将LogTraceIdAutoConfiguration全限定名 写入,如果是老版的springboot,写入如果需调用其他服务,需要将获取到的traceId,写入请求头的TRACE_ID_HEADER中,例如使用o原创 2023-02-12 16:24:28 · 2569 阅读 · 0 评论 -
springboot学习(七十九) springboot+Mybatis使用懒加载时jackson序列化失败
springboot+Mybatis项目中使用了Mybatis的懒加载,返回前端从数据库中查询的1对1或1对多数据时,会报错。原创 2023-01-13 14:44:30 · 889 阅读 · 0 评论 -
springboot学习(七十八) springboot中通过自定义注解实现数据脱敏的功能
对于某些接口返回的信息,涉及到敏感数据的必须进行脱敏操作,例如银行卡号、身份证号、手机号等,脱敏方式有多种方式。可以修改SQL语句,也可以写硬代码,也可以修改JSON序列化,这里介绍通过修改Jackson序列化方式实现数据脱敏。其中 OTHER类型为自定义类型,需在后面自定义脱敏的长度等。/**/*** 中文名* 固话* 手机号* 住址* 密码* 银行卡号* 邮箱* 身份证* 其他类型* */ OTHER;/**/*** 中文名* 固话* 手机号* 住址* 密码。原创 2023-01-05 20:40:35 · 1208 阅读 · 0 评论 -
springboot学习(七十七) springboot中LocalDateTime和LocalDate序列化反序列化统一处理
注意的是上面为springboot3.0后的配置类方式,如果使用springboot2.x,则将。如果提示缺少jsr310的包,那么添加其依赖即可。原创 2023-01-03 10:48:53 · 1339 阅读 · 3 评论 -
springboot学习(七十六) springboot中为多个controller添加统一访问URL的前缀
在某些情况下,服务的controller中前缀是一致的,例如所有URL的前缀都为/context-path/api/v1,需要为某些URL添加统一的前缀。能想到的处理办法为修改服务的context-path,在context-path中添加api/v1,这样修改全局的前缀能够解决上面的问题,但存在弊端,如果URL存在多个前缀,例如有些URL需要前缀为api/v2,就无法区分了,如果服务中的一些静态资源不想添加api/v1,也无法区分。下面通过自定义注解的方式实现某些URL前缀的统一添加。原创 2022-12-29 09:47:00 · 4694 阅读 · 1 评论 -
springboot学习(七十五) springboot中使用undertow作为web容器导致文件上传文件名乱码
springboot工程中,如果把web容器改为undertow,在实现上传文件接口时,如果文件名为中文,会出现乱码问题,如果使用@PathVariable接收路径中的参数也会出现中文乱码。要解决乱码问题,在配置文件中设置了undertow编码格式为utf-8,如下,但是不生效。通过跟踪源码(跟踪过滤略)发现,HttpServletRequest对象中的charsetEncoding在解析文件时变为了null。原创 2022-12-13 09:23:31 · 1383 阅读 · 0 评论 -
springboot学习(七十四) spring中时钟计时器StopWatch的使用
StopWatch时钟计时器原创 2022-12-07 14:00:40 · 1507 阅读 · 0 评论 -
springboot学习(七十三) springboot中使用springdoc替换swagger(springfox)
距离swagger上次发布版本已经过去两年多了,一直没有更新,与当前的springboot2.6.x、springboot2.7.x存在各种兼容问题,对于即将发布的springboot3.x,可能存在更多兼容问题。如下图所示。其实swagger还在更新,应该是springfox不更新导致的,所以需要使用其他的API管理工具代替,springdoc是一种选择SpringDoc是一款可以结合SpringBoot使用的API文档生成工具,基于OpenAPI 3,是一款更好用的Swagger库!原创 2022-10-09 10:28:04 · 3597 阅读 · 0 评论 -
springboot学习(七十二) webflux中使用WebSocket实现服务端和客户端
文章目录前言一、服务端1、编写一个WebSocket Session封装类2、编写最重要的handler3、附JsonUtils4、Spring注册二、客户端1、客户端连接类前言springboot中不使用Servlet,而是使用WebFlux的情况下,可以使用其自带的websocket实现websocket的功能,网上大部分例子都只能实现一个最基本的DEMO,不能实现服务端在Handler外部推送消息到客户端。下面是我的解决办法。一、服务端1、编写一个WebSocket Session封装类原创 2022-04-13 21:06:24 · 5466 阅读 · 2 评论 -
springboot学习(七十一)解决问题:the URL contained a potentially malicious String “;“
访问某个请求报错:org.springframework.security.web.firewall.RequestRejectedException: The request was rejected because the URL contained a potentially malicious String ";"这是因为使用了SpringSecurity,其中有个防火墙:org.springframework.security.web.firewall.StrictHttpFirewall阻原创 2022-03-30 14:14:30 · 3104 阅读 · 0 评论 -
springboot学习(七十) 使用API接口签名验证权限
此篇文章介绍了API接口签名验证权限的方式,适用于系统间调用,需要校验权限的情况。原创 2022-02-23 21:30:17 · 3460 阅读 · 4 评论 -
springboot学习(六十九) 解决HttpServletRequest不可重复使用InputStream,报错报Stream closed的问题
spring boot项目,在过滤器、拦截器或自定义aop做统一处理时,获取了request中的inputstream来获取RequestBody里数据,获取之后在Controller里使用@RequestBody注解再获取就报错:Stream closed。这是因为HttpServletRequest中的inputstream是不可重复读的。修改方式如下:1、自定义RequestWrapperpackage com.iscas.base.biz.test.filter;import java.原创 2022-02-21 16:32:20 · 3993 阅读 · 2 评论 -
springboot学习(六十八) springboot-webflux全局异常处理
文章目录前言一、自定义错误处理二、加载自定义错误处理的配置信息三、效果前言如果springboot中未使用springmvc的依赖,而是使用了webflux的依赖,全局异常处理的方式需要做给改变。如果是springmvc,可以通过下面方式处理异常@Configuration@Slf4jpublic class ErrorPageConfig implements ErrorPageRegistrar { @Override public void registerErrorP原创 2022-01-27 09:28:08 · 2874 阅读 · 0 评论 -
springboot学习(六十七) springboot项目通过gradle-docker-plugin插件构建为doker镜像并推送至镜像私服
文章目录1、使用gradle部署springboot项目2、Docker开启远程访问3、安装镜像私服Harbor4、gradle中配置插件1、使用gradle部署springboot项目略2、Docker开启远程访问参考:https://blog.csdn.net/u011943534/article/details/1121348183、安装镜像私服Harbor参考:https://blog.csdn.net/u011943534/article/details/1109185624、g原创 2022-01-24 14:22:35 · 1464 阅读 · 0 评论 -
Prometheus+Grafana学习(一) 监控springboot应用
文章目录前言一、SpringBoot配置1.修改springboot工程2.测试springboot提供监控二、部署Prometheus1.安装docker2.下载docker镜像3. 编写prometheus配置文件4. 启动prometheus5. 测试prometheus三、部署Grafana1. 下载grafana镜像2. 运行grafana3. 测试访问grafana4. 关联prometheus4.1. 添加数据源4.2. 使用模板4.3. 附汉化后模板JSON前言Prometheus是原创 2022-01-12 14:26:45 · 865 阅读 · 0 评论 -
springboot学习(六十六) springboot中文件断点续传
springboot中,对于大文件上传,可以使用spring.servlet.multipart.max-file-size设置文件上传大小限制,但对于超大的文件,此参数不宜国大,也需要在因为网络等原因断掉传输后能够断点续传。文章目录一、定义两个接口二、定义数据结构三、使用Mybatis-Plus四、处理文件上传逻辑五、前端代码一、定义两个接口package com.iscas.biz.controller.common.file;import com.iscas.biz.domain.c.原创 2022-01-11 09:54:06 · 1639 阅读 · 0 评论 -
springboot学习(六十五) springboot中swagger3配置访问Token
springboot项目中配置了权限认证,需要在请求头携带Authorization,如果想使用swagger做测试,需要配置认证,swagger3.0与swagger2.x配置的方式不一样。配置方式如下:package com.iscas.biz.config;import io.swagger.annotations.ApiOperation;import org.springframework.beans.factory.annotation.Value;import org.spri.原创 2022-01-03 12:17:49 · 4056 阅读 · 7 评论 -
springboot学习(六十四) 解决springboot中aop使用了cglib代理导致注解丢失引发的问题
springboot中在使用aop时,会使用动态代理,如果此时再获取被代理的类上的注解会导致获取失败。比如使用websocket时候如果在方法上使用aop就会出现问题。1、问题复现下面websocket类中使用了@ServerEndpoint注解,并在@OnOpen方法上添加了一个自定义注解@LogRecord,这个自定义注解会使用aop,从而会复现问题。package com.iscas.biz.config;import com.iscas.biz.config.log.LogReco.原创 2021-12-28 22:37:40 · 2653 阅读 · 1 评论 -
springboot学习(六十三) springboot中使用@ConstructorBinding读取配置信息
文章目录前言一、添加测试配置信息二、使用步骤1.编写配置实体类2.编写配置类前言SpringBoot的配置文件与类之间的属性绑定(@ConfigurationProperties)是通过Setter方法来进行绑定对应的配置值,而从springboot2.2版本开始支持了构造函数的方式进行绑定。添加该注解的属性配置类不再需要添加Setter方法,不过需要添加构造函数,根据构造函数进行实例化属性配置类。这种注解适用于某些情况下要对某些配置做处理后再设置到类中。一、添加测试配置信息在applic原创 2021-12-28 13:48:54 · 755 阅读 · 3 评论 -
springboot学习(六十二) springboot中服务启动时执行SQL脚本
文章目录前言一、方式1二、方式2前言有些情况下我们需要在服务启动时执行一段SQL脚本,比如建立数据库,插入一些用户角色数据等,下面介绍两种方式。一、方式1方式1很简单,这种方式需要使用spring的数据源自动配置。在yaml文件或properties文件中直接配置,以properties为例:spring.datasource.username=rootspring.datasource.password=rootspring.datasource.driver-class-name=com原创 2021-12-26 17:50:49 · 1840 阅读 · 0 评论 -
springboot学习(六十一) 解决springboot2.6和swagger冲突的问题
1.问题springboot升级到2.6后发现无法启动,和swagger冲突,错误信息如下:org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException at org.springframework.context.support.Def原创 2021-12-01 16:10:00 · 10205 阅读 · 14 评论 -
springboot学习(六十) springboot中使用ImportSelector
文章目录前言一、ImportSelector是什么?二、使用步骤1.准备缓存接口和实现2.定义ImportSelector实现类3.定义注解4.测试前言ImportSelector接口是spring中导入外部配置的核心接口,在SpringBoot的自动化配置和@EnableXXX(功能性注解)都有它的存在。一、ImportSelector是什么?当在@Configuration标注的配置类上添加@Import引入一个ImportSelector的实现后,会将selectImports函数返回值中原创 2021-10-24 13:15:21 · 1655 阅读 · 0 评论 -
springboot学习(五十八) springboot中使用SseEmitter推送消息
服务端常用推送技术有:1、客户端轮询:ajax定时拉取2、服务端主动推送:WebSocket。全双工的,本质上是一个额外的tcp连接,建立和关闭时握手使用http协议,其他数据传输不使用http协议,更加复杂一些,适用于需要进行复杂双向数据通讯的场景。3、服务端主动推送:SSE (Server Send Event)。html5新标准,用来从服务端实时推送数据到浏览器端,直接建立在当前http连接上,本质上是保持一个http长连接,轻量协议简单的服务器数据推送的场景,使用服务器推送事件, SSE技.原创 2021-09-12 16:05:03 · 18501 阅读 · 10 评论 -
springboot学习(五十七) springboot中使用Callable和DeferredResult异步处理请求
文章目录前言一、异步请求处理的使用场景二、Callable1.先定义一个ThreadPoolExecutor2.定义通用返回实体3.编写测试的Restful接口二、DeferredResult1.定义一个通用处理DeferredResult的工具类2.编写测试的Restful接口总结前言Callable和DeferredResult可以用来进行异步请求处理。利用它们,我们可以异步生成返回值,在具体处理的过程中,我们直接在controller中返回相应的Callable或者DeferredResult原创 2021-09-09 22:10:14 · 3057 阅读 · 0 评论 -
springboot学习(五十六) springboot解决@Cacheable(redis)等注解不带生效时间的问题
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、Spring缓存注解介绍二、自定义缓存的失效时间1.配置文件内添加配置2.redis缓存配置类前言spring boot中使用Redis作为缓存系统,如果使用Spring的注解使用缓存,默认是不带失效时间的,需要自己做处理。一、Spring缓存注解介绍spring cache 主要使用3个注释标签,即 @Cacheable、@CachePut 和 @CacheEvict。@Cacheable主要针对方法配置,原创 2021-09-05 18:59:29 · 899 阅读 · 0 评论 -
springboot学习(五十五) springboot异步任务回调
spring的异步任务应该很多人都用过,但异步任务的回调用的比较少,其实可以使用异步任务回调来代替需要获取线程返回值的场景。1、定义一个线程池package com.iscas.biz.config;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.scheduling.原创 2021-08-30 21:31:07 · 1106 阅读 · 0 评论 -
springboot学习(五十四) springboot中记录审计/访问日志
在web项目中记录每个接口的访问信息做审计是很重要的,下面介绍使用log4j2+拦截器将日志记录到日志文件的一种方式。1、编写记录日志实体类AccessLogpackage com.iscas.biz.model.common.access;import lombok.Data;import lombok.experimental.Accessors;import java.util.Date;/** * 访问日志的实体 * * @author zhuquanwen * @ve.原创 2021-08-29 21:34:47 · 2220 阅读 · 1 评论 -
springboot学习(五十三) springboot中将logback切换为log4j2
文章目录前言一、为什么使用log4j2?二、使用步骤1.引入库2.编写log4j2配置文件总结前言springboot默认使用logback作为日志记录框架,常见的日志记录框架有log4j、logback、log4j2。这篇文章我们来学习怎样将logbak替换为log4j2。一、为什么使用log4j2?我们在项目中经常使用一个叫SLF4J的依赖,它是做什么的呢?slf4j是对所有日志框架制定的一种规范、标准、接口,并不是一个框架的具体的实现,它的接口并不能独立使用,需要和具体的日志框架实现原创 2021-08-23 21:00:02 · 1769 阅读 · 0 评论 -
springboot学习(五十二) springboot中使用retrofit实现调用本地接口访问远程服务
文章目录前言一、retrofit是什么?二、使用步骤1.引入库2.编写远程测试接口3.编写本地接口和测试接口3.1. retrofit的配置信息3.2. 本地和测试接口3.3. 测试4.编写拦截器5.自定义注解拦截器总结前言上一篇文章我们学习了使用openfeign来调用本地接口访问远程服务,这篇文章我们来学习另一种方式retrofit,这个工具在安卓中用的比较多,不过在springboot中使用也是一样啦。一、retrofit是什么?okhttp是一款由square公司开源的java版本h原创 2021-08-09 16:31:42 · 2021 阅读 · 0 评论 -
springboot学习(五十一) springboot中使用openfeign实现调用本地接口访问远程服务
上一篇 springboot学习(五十) springboot配置logback异步方式记录日志文章目录上一篇 [springboot学习(五十) springboot配置logback异步方式记录日志](https://blog.csdn.net/u011943534/article/details/119427147)前言一、Feign是什么?二、使用步骤1.引入库2.编写远程服务示例3.本地编写访问接口1.GET请求,使用RequestParam传参2.DELETE请求,使用PathVariable原创 2021-08-08 17:12:36 · 2535 阅读 · 1 评论 -
springboot学习(五十) springboot配置logback异步方式记录日志
1、同步异步分析(从网上找到的介绍图)同步记录日志方式如下:多个业务线程打印日志时候要等把内容写入磁盘后才会返回,所以打日志的rt就是写入磁盘的耗时。而异步记录日志方式如下:多个业务线程打印日志时候是把打印任务放入内存队列后就直接返回了,而具体打印日志是有日志系统的一个日志线程去队列里面获取然后执行,可见这种打印rt就是写入内存队列的耗时。2、异步配置方式springboot使用logback记录日志,在resources下创建logback-spring.xml文件来配置整体配置文件如下原创 2021-08-05 21:14:37 · 1858 阅读 · 0 评论 -
springboot学习(四十九) springboot中使用webjars依赖管理前端JS
WebJars能使Maven的依赖管理支持OSS的JavaScript库/CSS库,比如jQuery、Bootstrap等;WebJars是将Web前端Javascript和CSS等资源打包成Java的Jar包,这样在Java Web开发中我们可以借助Maven、Gradle这些依赖库的管理,保证这些Web资源版本唯一性,并且无需再去手动下载对应的JS、CSS依赖。以引入jquery的3.4.1的版本为例1、引入jquery的maven或gradle依赖maven:<!-- https:.原创 2021-07-18 18:16:10 · 956 阅读 · 0 评论 -
springboot学习(四十八) springboot中使用Jasypt对配置文件敏感信息做加密
利用jasypt对springboot配置文件参数进行加解密。在Spring boot开发过程中,需要将数据库连接等配置信息写在配置文件中,如果配置参数不加密,很容易造成敏感信息泄露,尤其是生产环境信息,因此需要对配置参数进行加密处理。1、引入依赖gradle:// https://mvnrepository.com/artifact/com.github.ulisesbocchio/jasypt-spring-boot-starterimplementation group: 'com.git.原创 2021-06-24 22:25:47 · 233 阅读 · 0 评论 -
springboot学习(四十七) springboot中使@ProperySource适配yml文件
@PropertySource加载指定的属性文件(*.properties)到 Spring 的 Environment 中。可以配合 @Value 和@ConfigurationProperties 使用:@PropertySource 和 @Value组合使用,可以将自定义属性文件中的属性变量值注入到当前类的使用@Value注解的成员变量中;@PropertySource 和@ConfigurationProperties组合使用,可以将属性文件与一个Java类绑定,将属性文件中的变量值注入到该Ja.原创 2021-06-21 22:22:53 · 588 阅读 · 0 评论