springboot系列
文章平均质量分 78
菜鸟是大神
人有两次生命,一次是出生,一次是觉醒,希望我们可以在风华正茂时重获新生,而不是在垂暮之年幡然醒悟。
展开
-
【动态管理日志】Spring Boot 实现 热插拔 AOP,非常实用!
现在有这么一个需求:就是我们日志的开与关是交给使用人员来控制的,而不是由我们开发人员固定写死的。大家都知道可以用aop来实现日志管理,但是如何动态的来实现日志管理呢?aop源码中的实现逻辑中有这么一个步骤,就是会依次扫描Advice的实现类,然后执行。我们要做的就是自定义一个advice的实现类然后,在用户想要开启日志的时候就把advice加到项目中来,关闭日志的时候就把advice剔除就行了。org.aopalliance.aop.Advice“通知”,表示 Aspect 在特定的 Join point原创 2023-12-26 10:58:16 · 1599 阅读 · 4 评论 -
Springboot启动原理解析
..@Bean任何一个标注了@Bean的方法,其返回值将作为一个bean定义注册到Spring的IoC容器,方法名将默认成该bean定义的id。原创 2023-12-03 20:46:10 · 1114 阅读 · 0 评论 -
【已解决】spring-boot项目使用maven打包时出现BOOT-INF文件夹的问题
jar中多了这个BOOT-INF文件夹的原因,主要是因为我们在maven的pom文件中加入了。,意思也就是跳过这个插件的配置。子标签,并将skip的值设为。标签,并在里面嵌套加入一个。原创 2023-10-05 21:19:26 · 1672 阅读 · 0 评论 -
【redis实战1】SpringBoot2.0整合Redis自定义注入bean组件配置
在该配置文件中,我们还加入了“链接池”的概念,其中,链接池里最小可用的链接数为100个,最大可用的连接数为300个,如果还不够而需要动态扩增时,我们将最终将活跃的链接数增加到500个!本篇文章我们将首先基于SpringBoot2.0搭建的项目整合缓存中间件Redis,在项目中加入跟Redis相关的、常见的配置信息,并自定义注入Redis的模板操作组件StringRedisTemplate和RedisTemplate,最终给大伙撸个简单的Demo并由此开启Redis的实战之旅!原创 2023-06-26 14:02:27 · 817 阅读 · 0 评论 -
【SpringBoot19】SpringBoot中整合Ehcache实现热点数据缓存
Redis 是通过 Socket 访问到缓存服务,效率比 EhCache 低,比数据库要快很多,处理集群和分布式缓存方便,有成熟的方案。简单的共享可以,但是涉及到缓存恢复,大数据缓存,则不合适。SpringBoot 中使用 Ehcache 比较简单,只需要简单配置,说白了还是 Spring Cache 的用法,合理使用缓存机制,可以很好地提高项目的响应速度。这个注解一般加在查询方法上,表示将一个方法的返回值缓存起来,默认情况下,缓存的 key 就是方法的参数,缓存的 value 就是方法的返回值。原创 2023-04-07 16:14:30 · 689 阅读 · 0 评论 -
【SpringBoot18】SpringBoot 调用外部接口的三种方式
SpringBoot不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。在Spring-Boot项目开发中,存在着本模块的代码需要访问外面模块接口,或外部url链接的需求, 比如在apaas开发过程中需要封装接口在接口中调用apaas提供的接口(像发起流程接口submit等等)下面也是提供了三种方式(不使用dubbo的方式)供我们选择。原创 2023-04-07 15:59:25 · 701 阅读 · 0 评论 -
【SpringBoot15】SpringBoot中实现启动任务
我们在项目中会用到项目启动任务,即项目在启动的时候需要做的一些事,例如:数据初始化、获取第三方数据等等,那么如何在SpringBoot 中实现启动任务,一起来看看吧SpringBoot 中提供了两种项目启动方案,CommandLineRunner 和 ApplicationRunner使用 CommandLineRunner ,需要自定义一个类区实现 CommandLineRunner 接口,例如:我们首先使用 @Component 将该类注册成为 Spring 容器中的一个 Bean。原创 2023-03-12 15:20:26 · 420 阅读 · 0 评论 -
【SpringBoot14】SpringBoot中使用Session共享实现分布式部署
我们知道,在单体项目中,我们将用户信息存在 session 中,那么在该 session 过期之前,我们都可以从 session 中获取到用户信息,通过登录拦截,进行操作但是分布式部署的时候,我们请求的服务器可能不是同一台服务器,那么我们就必须要面对 session 共享的问题,下面介绍的是在 SpringBoot 实现 session 共享的方式一、创建项目创建 SpringBoot 项目,选择 Maven 依赖。原创 2023-03-12 15:04:58 · 705 阅读 · 0 评论 -
【SpringBoot13】SpringBoot中整合Redis实现热点数据缓存
【代码】【SpringBoot13】SpringBoot中整合Redis实现热点数据缓存。原创 2023-03-10 11:24:00 · 646 阅读 · 0 评论 -
【SpringBoot12】SpringBoot中使用Kaptcha实现验证码
【代码】【SpringBoot12】SpringBoot中使用Kaptcha实现验证码。原创 2023-03-10 10:19:20 · 737 阅读 · 0 评论 -
【SpringBoot10】SpringBoot中利用AOP切面开启全局事务管理
我们业务逻辑一般都放在 service 层进行处理,所以我们定义的切入点为:com.lzzy.meet.service..(…),即 service 下的所有方法。最后我们利用 AspectJExpressionPointcut 设置切面 = 切点 + 通知(写成内部bean的方式)我们设置了事务失效时间为:5秒,超过五秒,则回滚事务,并定义了事务的隔离性和隔离级别,并声明该事务为只读。通过 @Aspect 定义一个切面,使用 @Configuration 声明当前类是一个配置类。原创 2023-03-09 08:06:34 · 940 阅读 · 0 评论 -
【SpringBoot9】HandlerInterceptor拦截器的使用 ——防重复提交
看本篇博客前应当先看完前面三篇,这一篇是基于前面三篇的知识点的整合。所以很多重复的代码这里就不写出了后台通过和redis实现防重复提交,避免因为网络原因导致多次请求同时进入业务系统,导致数据错乱,也可以防止对外暴露给第三方的接口在业务尚未处理完的情况下重复调用。原创 2023-02-24 21:07:03 · 929 阅读 · 0 评论 -
【SpringBoot8】HandlerInterceptor拦截器的使用 ——自@RequestBody获取请求参数解决java.io.IOException: Stream closed
现在开发的项目是基于SpringBoot的maven项目,拦截器的使用很多时候是必不可少的,当有需要需要你对body中的值进行校验,例如加密验签、防重复提交、内容校验等等。当你开开心心的在拦截器中通过request.getInputStream();获取到body中的信息后,你会发现你在controller中使用了@RequestBody注解获取参数报如下错误IO流关闭只能读取一次,接下来我们就开始解决这个BUG,有两种大的方向:这个需求咱不做了,特么有本事就把东西都放在请求头里面传过来;原创 2023-02-24 21:03:07 · 2172 阅读 · 2 评论 -
【SpringBoot7】HandlerInterceptor拦截器的使用 ——自定义注解
拦截所有添加了我们自定义的注解的方法,并将userId和userMobile放入HttpServletRequest,之后通过对应的注解取值。原创 2023-01-28 17:52:28 · 794 阅读 · 1 评论 -
【SpringBoot6】HandlerInterceptor拦截器的使用 ——基础
preHandle:在业务处理器处理请求之前被调用。预处理,可以进行编码、安全控制、权限校验等处理;postHandle:在业务处理器处理请求执行完成后,生成视图之前执行。后处理(调用了Service并返回ModelAndView,但未进行页面渲染),有机会修改ModelAndView (这个博主就基本不怎么用了);afterCompletion:在DispatcherServlet完全处理完请求后被调用,可用于清理资源等。返回处理(已经渲染了页面);原创 2023-01-22 10:14:12 · 1735 阅读 · 0 评论 -
【SpringBoot5】SpringBoot中使用Cors开启跨域
一、为什么要跨域?跨域问题来源于JavaScript的【同源策略】,即只有【协议+主机名+端口号】相同,则允许相互访问。也就是说JavaScript只能访问和操作自己域下的资源,不能访问和操作其他域下的资源。跨域问题是针对JS和Ajax的,HTML本身没有跨域问题,比如a标签、script标签、甚至form标签(可以直接跨域发送数据并接收数据)等。二、实现跨域的两种方式1、JSONP。原创 2023-01-20 11:10:41 · 2635 阅读 · 0 评论 -
【SpringBoot4】SpringBoot中拦截器功能的实现
Spring Boot 1.5,都是靠重写 WebMvcConfigurerAdapter 的方法来添加自定义拦截器SpringBoot 2.0 后,推荐实现 WebMvcConfigurer 或者继承 WebMvcConfigurationSupport 实现本次我们选择实现 WebMvcConfigurer 接口实现拦截器功能1、实现 WebMvcConfigurer 接口创建 MyWebConfigurer.java,并实现 WebMvcConfigurer 接口。原创 2023-01-20 10:40:37 · 358 阅读 · 0 评论 -
【SpringBoot3】SpringBoot中实现全局统一异常处理
2、@ControllerAdvice 只能捕获进入 Controller 层的异常,比如404,401等错误无法捕获。@ControllerAdvice 表示这是一个控制器增强类,当控制器发生异常且符合类中定义的拦截异常类,将会被拦截。3、ErrorController,该方式几乎可以处理所有的异常,包括未进入控制器的错误,比如404,401等错误。1、@ControllerAdvice 定义多个拦截方法,拦截不同的异常类,并且可以获取抛出的异常信息。当然,我们可以不返回页面,只返回异常信息。原创 2023-01-19 21:55:51 · 3020 阅读 · 0 评论 -
【SpringBoot2】SpringBoot中配置文件详解
我们在实际的开发过程中,需要不断调试,测试,上传到云服务器中,数据库配置,redis配置,nginx配置等等,需要在云服务器和本地服务器中来回切换,我们可以创建多个配置文件,在本地开发的时候,切换为本地配置文件,上传云服务器之前切换为云服务器配置文件,这样避免了配置信息修改错误。由此可以看出 application.yml 文件格式的内容更为简洁,清晰,目前大部分都是 YML 格式,我们主要讲 YML 格式的配置文件。2、、yml 格式:k: v,之间的空格必须有。3、配置文件中${key}引用配置信息。原创 2023-01-19 21:15:07 · 1079 阅读 · 0 评论 -
【SpringBoot1】创建第一个SpringBoot项目
我们的SpringBoot项目创建完成之后的目录结构就是这个样子,.mvn,mvnw,mvnw.cmd这三个文件是可以删除的,DemoApplication.java是我们这个项目的启动文件,我们在启动项目的时候,只需要Run这个文件或者Debug Run这个文件就可以了,接下来我们看看pom.xml文件的内容。这里是让你填写你的项目名称和项目地址的信息,点击Finish,我们就完成了第一个SpringBoot项目的创建工作,接下来只需要等待Idea成功引入Maven依赖,项目就算创建完成。原创 2023-01-13 15:14:55 · 600 阅读 · 2 评论 -
【快速简单登录认证】SpringBoot使用Sa-Token-Quick-Login插件快速登录认证
试想一下,假如我们开发了一个非常简单的小系统,比如说:服务器性能监控页面, 我们将它部署在服务器上,通过访问这个页面,我们可以随时了解服务器性能信息,非常方便。然而,这个页面方便我们的同时,也方便了一些不法的攻击者,由于这个页面毫无防护的暴露在公网中,任何一台安装了浏览器的电脑都可以随时访问它!你马上就会发现,写个监控页你一下午就可以搞定,然而这个登录页你却可能需要花上两三天的时间,这是一笔及其不划算的时间浪费。Sa-Token-Quick-Login 可以为一个系统快速的、零代码 注入一个登录页面?原创 2023-01-22 09:37:59 · 2807 阅读 · 1 评论 -
【开发规范】替API接口制定统一的报文返回格式
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758/*** 返回报文格式**/@Data/*** 返回码*//*** 返回描述*//*** 返回tid*//*** 时间*//**原创 2022-12-15 21:07:50 · 2654 阅读 · 0 评论 -
【多数据源动态切换】Spring Boot中实现多数据源动态切换效果(2):通过开源项目Dynamic Datasource Spring Boot Starter实现
在Spring Boot中,可以通过多种方式实现多数据源的动态切换效果,本篇介绍第二种实现方案。原创 2022-12-11 21:17:26 · 777 阅读 · 2 评论 -
【多数据源动态切换】Spring Boot中实现多数据源动态切换效果(1):通过继承AbstractRoutingDataSource类实现
提供了这个类,其中方法可以让用户根据自己定义的规则在某一个SQL执行之前动态地选择想要的数据源。123456789/***/@Nullable因此,我们的整体实现逻辑就很清晰了,具体分为以下几个步骤:定义类,继承类并实现方法(具体逻辑是从当前线程的中获取我们在某一个SQL执行之前通过AOP切面动态指定的数据源名称);在中配置多个数据源;解析在中配置的多个数据源,然后生成实例,并设置默认数据源()和其他数据源();调用的的方法的时候,会先调用。原创 2022-12-11 21:13:46 · 1219 阅读 · 0 评论 -
【RestTemplate详解】Spring MVC中使用RestTemplate访问REST服务详解
在Java Web开发中,我们通常需要通过GET、POST请求其他系统提供的服务。其中,JDK自带的HttpURLConnection、Apache HttpClient等方式都可以实现。当然,这些方式都有一个很明显的缺陷,那就是代码很繁琐。而Spring提供的RestTemplate封装了这些库的实现,可以让我们的HTTP请求更加简洁、直观。在RestTemplate中定义了11个独立的操作,它们分别是:接下来,我将对常用的几个方法分别介绍。12345678910111213141516171819202原创 2022-12-07 23:01:46 · 1105 阅读 · 0 评论 -
Java中的Get和Post请求,使用万网接口判断域名是否已被注册
一 通过Get请求验证域名是否已被注册万网提供了一个免费的接口来查询域名是否已被注册,http://panda.www.net.cn/cgi-bin/check.cgi?area_domain=域名比如说我们在浏览器中输入:http://panda.www.net.cn/cgi-bin/check.cgi?area_domain=aliyun.com最后返回:123456200原创 2022-12-07 22:58:58 · 373 阅读 · 0 评论 -
【HttpClient详解】HttpClient的几种基本用法实例
package cn.zifangsky.httpclient;import java.io.File;import java.util.ArrayList;import java.util.List;import org.apache.http.Header;import org.apache.http.HttpEntity;import org.apache.http.NameValuePair;import org.apache.http.client.entity.UrlEncodedFo原创 2022-12-07 22:57:08 · 791 阅读 · 0 评论 -
【超详细demo】Spring Boot 多数据源配置
这样写看起来确实有些麻烦,通常可能不会像这样在一个方法里操作多个数据库,就比如说假设这是一个管理后台,为了图省事把所有业务都写在这一个项目里,这个时候就需要配置多个数据源,各个数据库的业务互相没有关联,只是写在同一个项目中而已,这样的话如果每次都手动设置数据源太麻烦,可以定义一个AOP切面来自动切换数据源。由于是MyBatsi-Plus,所以配的是MybatisSqlSessionFactoryBean,如果是MyBatis,则应该是SqlSessionFactoryBean。2、定义切面、切点、通知。原创 2022-11-28 21:31:05 · 1597 阅读 · 0 评论 -
Spring Cloud Gateway限流详解
Spring Cloud Gatway内置的提供限流的能力,基于令牌桶算法实现。目前,它内置的,依赖Redis存储限流配置,以及统计数据。当然你也可以实现自己的RateLimiter,只需实现接口,或者继承。:想象有一个水桶,水桶以一定的速度出水(以一定速率消费请求),当水流速度过大水会溢出(访问速率超过响应速率,就直接拒绝)。:系统按照恒定间隔向水桶里加入令牌(Token),如果桶满了的话,就不加了。每个请求来的时候,会拿走1个令牌,如果没有令牌可拿,那么就拒绝服务。原创 2022-11-28 21:02:00 · 1447 阅读 · 0 评论 -
【springboot项目详解】springboot项目整合-注册功能模块开发
2.JQuery封装了一个函数,称为$.ajax()函数,通过对象调用ajax函数,可以异步的加载一个请求,依靠的是JAVAScript提供的一个xhr(xmlHttpResponse),封装了这个对象。在控制层抽离一个父类,在这个父类中统一的处理关于异常的相关操作,编写一个BaseController类,在这个类中,统一的处理异常。3.正在执行数据插入操作的时候,服务器、数据库宕机。1.runtimeException异常,作为这个异常的子类,然后在定义具体的异常类型来继承这个异常,业务层异常的基类。原创 2022-11-02 22:31:04 · 986 阅读 · 2 评论 -
【最全最详细】SpringBoot 中实现跨域的几种方式
当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域首先编写一个过滤器,可以起名字为MyCorsFilter.java@Component}}在web.xml中配置这个过滤器,使其生效原创 2022-08-30 20:40:29 · 1361 阅读 · 1 评论 -
springboot定时任务,SERVICE层无法注入问题详细解决
这是spring的一个Bug ,需要手动去配置一个类,主动获取实例,在定时任务中(继承TimerTask类),@Autowired 是失效的,无法注入。于是我尝试不用@Autowired 注入实例,自己new ,但是还是失败了,报空指针。发一个微信小程序后台,建立websocket 长连接,需要后台开启定时任务,应注意,同样需要注入添加 @Compent注解。* 配置类,解决定时任务无法注入的问题。但是具体执行过程中一直在报空指针错误,,无法调用其相关的方法导致的。定时任务定时查库,相应前台。原创 2022-08-24 20:08:02 · 2588 阅读 · 1 评论 -
【最详细实战】实战项目添加操作日志(aop、注解实现)
OperationLog(module = "添加商品模块", desc = "添加商品操作", operationType = OperationType.ADD)* 后置通知,在目标方法完成之后调用通知,此时不会关 心方法的输出是什么。* 前置通知,方法调用前触发 -记录开始时间。// 接收到请求,记录请求内容。// 记录方法开始执行的时间。//获取当前登录人信息。6、在依赖里,排除logging。5、log4j2配置文件。原创 2022-08-22 15:16:51 · 861 阅读 · 2 评论 -
【springboot系列】springboot启动过程源码分析,【最全源码源码,手把手教】
SpringApplication 的构建都是为了 run() 方法启动做铺垫,构造方法中总共就有几行代码,最重要的部分就是设置应用类型、设置初始化器、设置监听器。初始化器和这里的监听器都要放置在 spring.factories 文件中才能在这一步骤加载,否则不会生效,因此此时 IOC容器 还未创建,即使将其注入到 IOC容器 中也是不会生效的。...原创 2022-08-09 13:15:26 · 945 阅读 · 0 评论 -
【springboot系列】Spring Boot 实现接口幂等性的 4 种方案
在HTTP/1.1中,对幂等性进行了定义。它描述了一次和多次请求某一个资源对于资源本身应该具有同样的结果(网络超时等问题除外),即第一次请求的时候对资源产生了副作用,但是以后的多次请求都不会再对资源产生副作用。这里的副作用是不会对结果产生破坏或者产生不可预料的结果。也就是说,其任意多次执行对资源本身所产生的影响均与一次执行的影响相同。幂等性是开发当中很常见也很重要的一个需求,尤其是支付、订单等与金钱挂钩的服务,保证接口幂等性尤其重要。...原创 2022-08-03 23:04:24 · 366 阅读 · 0 评论 -
【springboot系列】自定义一个拦截器,附源码
demo具体源码。原创 2022-07-29 14:16:52 · 170 阅读 · 0 评论 -
【Spring源码学习】spring IOC容器管理
具体源码下载参考我的资源B站【尚硅谷】Spring框架视频教程_spring5源码资料下载。2、idea新建项目先实现一个IOC例子。原创 2022-07-22 15:34:42 · 248 阅读 · 0 评论 -
【springboot系列】这样优化Spring Boot,启动速度快到飞起!
微服务用到一时爽,没用好就呵呵啦,特别是对于服务拆分没有把控好业务边界、拆分粒度过大等问题,某些SpringBoot启动速度太慢了,可能你也会有这种体验,这里将探索一下关于SpringBoot启动速度优化的一些方方面面。...原创 2022-07-21 18:21:43 · 1067 阅读 · 0 评论 -
【SpringBoot系列】Spring Boot+Redis 分布式锁:模拟抢单
redis的普通key一般都允许覆盖,A用户set某个key后,B在set相同的key时同样能成功,如果是锁场景,那就无法知道到底是哪个用户set成功的;这里jedis的setnx方式为我们解决了这个问题,简单原理是当A用户先set成功了,那B用户set的时候就返回失败,满足了某个时间点只允许一个用户拿到锁。某个抢购场景时候,如果没有过期的概念,当A用户生成了锁,但是后面的流程被阻塞了一直无法释放锁,那其他用户此时获取锁就会一直失败,无法完成抢购的活动;PXkey过期时间单位设置为毫秒(EX单位秒)...原创 2022-07-19 10:20:24 · 411 阅读 · 0 评论 -
【【SpringBoot系列】最详细demo--自定义日志脱敏组件,简单3 步完成 Spring Boot 的日志脱敏
最详细demo--自定义日志脱敏组件,简单3 步完成 Spring Boot 的日志脱敏原创 2022-07-19 09:46:25 · 603 阅读 · 0 评论