![](https://img-blog.csdnimg.cn/7d1e6c097e374f0781a9e86259eb3453.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
SSM专栏笔记
文章平均质量分 89
本专栏主要记录Spring、SpringMVC、MyBatis、SpringBoot、SpringSecurity等框架相关的学习笔记,笔记也会找时间同步到我的知识星球,关注公众号,加入星球即可免费查看所有笔记文章。少喝一杯奶茶,多学一份知识。
Mr.小朱同学
Java 开发工程师,从事 Web 应用程序的研发,擅长 Spring、SpringBoot 等技术。
热爱编程,业余时间学习新知识,通过 CSDN 记录学习心得和笔记内容。
展开
-
【SpringBoot笔记48】SpringBoot多数据源配置(方式五:使用dynamic-datasource动态数据源插件)
在SpringBoot应用开发中,一般情况下,都是只会配置一个数据源信息,之后整个工程都是对当前数据源进行增删改查的操作。但是,在实际开发里面,也有可能会遇到多数据源的情况,例如:当前工程中除了需要访问自己应用的数据库,还需要直接连接第三方系统的数据库进行业务处理,这种情况下,就需要进行多数据源的配置。针对这个问题,也有一些开源的动态数据源插件可以解决,例如:dynamic-datasource动态数据源插件,它是MyBatis Plus官方实现的一个动态数据源插件,功能非常丰富,而且还支持分布式事务。原创 2024-06-12 07:57:47 · 111 阅读 · 0 评论 -
【SpringBoot笔记47】SpringBoot多数据源配置(方式四:根据前端传递的数据库连接参数动态切换数据源)
在SpringBoot应用开发中,一般情况下,都是只会配置一个数据源信息,之后整个工程都是对当前数据源进行增删改查的操作。但是,在实际开发里面,也有可能会遇到多数据源的情况,例如:当前工程中除了需要访问自己应用的数据库,还需要直接连接第三方系统的数据库进行业务处理,这种情况下,就需要进行多数据源的配置。SpringBoot考虑到了这一点,所以它是支持多数据源的配置的,下面介绍一下如何配置多数据源,并且根据前端传递的数据库连接信息,在代码中动态的创建并且切换要使用的数据源。原创 2024-06-08 10:55:55 · 91 阅读 · 0 评论 -
【SpringBoot笔记46】SpringBoot多数据源配置(方式三:基于AOP动态切换需要使用哪个数据源)
在SpringBoot应用开发中,一般情况下,都是只会配置一个数据源信息,之后整个工程都是对当前数据源进行增删改查的操作。但是,在实际开发里面,也有可能会遇到多数据源的情况,例如:当前工程中除了需要访问自己应用的数据库,还需要直接连接第三方系统的数据库进行业务处理,这种情况下,就需要进行多数据源的配置。SpringBoot考虑到了这一点,所以它是支持多数据源的配置的,下面介绍一下如何配置多数据源,并且在代码中动态切换使用的数据源。原创 2024-06-08 10:39:10 · 214 阅读 · 0 评论 -
【SpringBoot笔记45】SpringBoot多数据源配置(方式二:在代码中动态切换需要使用哪个数据源)
在SpringBoot应用开发中,一般情况下,都是只会配置一个数据源信息,之后整个工程都是对当前数据源进行增删改查的操作。但是,在实际开发里面,也有可能会遇到多数据源的情况,例如:当前工程中除了需要访问自己应用的数据库,还需要直接连接第三方系统的数据库进行业务处理,这种情况下,就需要进行多数据源的配置。SpringBoot考虑到了这一点,所以它是支持多数据源的配置的,下面介绍一下如何配置多数据源,并且在代码中动态切换使用的数据源。原创 2024-05-28 21:47:09 · 396 阅读 · 1 评论 -
【SpringBoot笔记44】SpringBoot多数据源配置(方式一:配置多个mapper扫描不同的包路径实现多数据源配置)
在SpringBoot应用开发中,一般情况下,都是只会配置一个数据源信息,之后整个工程都是对当前数据源进行增删改查的操作。但是,在实际开发里面,也有可能会遇到多数据源的情况,例如:当前工程中除了需要访问自己应用的数据库,还需要直接连接第三方系统的数据库进行业务处理,这种情况下,就需要进行多数据源的配置。SpringBoot考虑到了这一点,所以它是支持多数据源的配置的,下面介绍一下如何配置多数据源。原创 2024-05-28 21:20:25 · 305 阅读 · 0 评论 -
【SpringBoot笔记43】SpringBoot应用程序集成spring-boot-admin监控工具
创建一个SpringBoot工程,引入spring-boot-admin-starter-client依赖、spring-boot-starter-parent依赖、spring-boot-starter-web依赖。创建一个SpringBoot工程,引入spring-boot-admin-starter-server依赖、spring-boot-starter-parent依赖、spring-boot-starter-web依赖。(2)启用spring-boot-admin服务端。原创 2024-05-11 09:02:11 · 452 阅读 · 1 评论 -
【SpringBoot笔记42】SpringBoot集成knife4j生成接口文档
在实际开发过程中,后端需要提供对应的接口文档给前端人员,这样前端才可以根据文档进行开发,并且联调测试,这就引出了一个问题啦?接口文档怎么给到前端人员呢???写一个word文档,然后丢给前端开发吗?虽然这种方式是可以的,但是效率太低了,后端开发还得一边写代码,一边写word文档,太浪费时间了,为了节约时间(偷懒),各种接口文档工具就出现啦!swagger-ui:在代码中编写注解,启动程序后,就可以在swagger-ui提供的界面中看到对应接口,并且可以在线调试。原创 2023-11-04 18:23:34 · 458 阅读 · 0 评论 -
【SpringBoot笔记41】SpringBoot集成Sentry实现异常信息和日志内容的收集(包含详细步骤,注册Sentry账号、创建项目、收集异常信息等)
sentry是一款用于收集项目中的异常信息以及日志的第三方聚合平台,它可以将项目中出现的异常信息、日志等内容,全部保存到sentry平台里面,并且提供了可视化的界面用于查看对应的异常日志信息。其实,你可以将sentry看作是C/S模式的平台,其中我们的项目中需要引入sentry依赖,也就是我们的项目作为Client客户端,然后sentry会单独部署一个服务端,专门用于接收和保存Client客户端发送过来的异常日志信息,并且提供查看界面。原创 2023-09-19 22:55:54 · 457 阅读 · 0 评论 -
【SpringBoot笔记40】SpringBoot中@SendTo、@SendToUser、@MessageMapping、@SubscribeMapping注解介绍及其使用
SendToUser注解中,默认只会处理以【/user】开头的消息地址,因为@SendToUser注解标记的方法,是会被【UserDestinationMessageHandler】代理器处理的,当然,我们也可以自定义处理地址的前缀,这要在WebSocket配置类中设置。@MessageMapping注解是SpringBoot中提供的,它的作用是:当客户端向某个地址发送消息时候,此时会根据@MessageMapping注解映射的地址进行匹配,找到对应的映射地址之后,就会执行对应的方法。原创 2023-09-10 10:27:41 · 639 阅读 · 0 评论 -
【SpringBoot笔记39】SpringBoot + SockJS + Stomp实现WebSocket通信(建立连接、发送消息、订阅消息、断开连接)
MessageMapping注解是SpringBoot中提供的,它的作用是:当客户端向某个地址发送消息时候,此时会根据@MessageMapping注解映射的地址进行匹配,找到对应的映射地址之后,就会执行对应的方法。@SubscribeMapping注解是SpringBoot中提供的,主要作用是:指定一个订阅地址,当浏览器客户端订阅了某个地址之后,此时就会执行对应的方法,并且将对应方法的返回值立即返回给浏览器客户端。原创 2023-09-09 17:35:02 · 712 阅读 · 0 评论 -
【SpringBoot笔记38】SpringBoot基于jakarta.mail依赖实现发送邮件的功能(邮件发送)
发送邮件之前,我们需要知道发件人邮件、邮件服务器地址、邮件服务器、邮箱授权码(相当于发送邮件时候的认证密码)等信息,一般在实际开发中,这些信息都是作为配置信息存放在application.yml配置文件里面,SpringBoot已经给我们提供了mail邮箱的配置信息。到此,邮箱授权码就获取到啦,记住啦,这个东西是要放到application.yml配置文件里面的,并且不要随便让别人知道,不然别人就可以是要你的邮箱啦。接着点击【管理服务】,此时会跳转到安全设置界面,在这个界面中就可以生成【邮箱授权码】了。原创 2023-08-17 21:46:33 · 648 阅读 · 0 评论 -
【SpringBoot笔记37】SpringBoot基于@ServerEndpoint、@OnMessage等注解的方式集成WebSocket
Spring框架中是采用【javax.websocket】包下的注解实现了WebSocket的功能,常见的注解有下面这些:@ServerEndpoint:用于指定对外暴露的WebSocket服务端点,即:接口地址、服务地址。@OnOpen:当WebSocket创建连接的时候,会执行该注解标记的方法。注解标记的方法,可以有参数:Session、@PathParam路径参数。@OnMessage:当服务端接收到WebSocket发送的消息时候,就会执行该注解标记的方法,该方法必须有参数,参数就是客户端原创 2023-07-31 21:26:37 · 1389 阅读 · 0 评论 -
【SpringBoot笔记36】SpringBoot自定义WebSocketHandler集成WebSocket
WebSocketHandler是Spring提供的一个接口,用于创建一个WebSocket服务端,我们只需要自定义一个类,接着实现WebSocketHandler接口,该接口中有五个方法,重写下面这五个方法即可。TextWebSocketHandler:专门处理文本消息的实现类。SockJsWebSocketHandler:添加了SockJS消息架构的实现类,该类继承自TextWebSocketHandler类。/**原创 2023-07-31 21:09:45 · 948 阅读 · 0 评论 -
【SpringBoot笔记35】SpringBoot自定义Converter转换器和Formatter格式化器
Converter是Spring3.0开始提供的一个类型转换器接口,使用这个接口可以将一种数据类型转换成另外一种数据类型,注意:这个接口是位于org.springframework.core.convert.converter.Converter包里面的,别导入错了。Converter接口中只提供了一个【convert()方法】,该方法就是将源对象的数据类型,转换成目标对象T的数据类型,如果类型不能转换,那么就会抛出非法参数异常。原创 2023-07-25 21:47:40 · 564 阅读 · 0 评论 -
【SpringBoot笔记34】Spring Events事件驱动编程之事件的发布和监听操作
Spring中的事件,都必须继承自接口,然后通过构造方法指定事件源,这里的事件源也就是哪个对象触发的这个事件。/*** @Description: 自定义事件*/// 这是自定义的属性,可以根据你自己的需求来决定/*** @param source 这个是事件来源,也就是谁触发了这个事件* @param publishDate 这个是自定义的事件参数,触发事件的时候,传递过来的*/原创 2023-07-17 21:38:40 · 371 阅读 · 0 评论 -
【SpringBoot笔记33】SpringBoot中使用@Async注解 + Future实现异步操作并获取返回值
Async是Spring3.0版本开始提供的一个异步任务注释,这个注解可以使用在类、接口、方法上面,一般情况下,都是在指定的方法上添加@Async注解,使其能够采用异步任务的方式执行,本质上是开启一个线程去执行这个方法中的代码。Spring将@Async标记的方法,提交到线程池里面,让线程池中的线程去执行这个方法,这样可以提高一部分程序的执行效率,在一些项目中,可以考虑采用这种方式优化程序的耗时问题。原创 2023-07-15 16:06:47 · 1546 阅读 · 0 评论 -
【SpringBoot笔记32】SpringBoot使用MDC + Log4j2添加日志链路追踪标识tracecId,配置控制台彩色日志输出
我们可以统一的在过滤器中,给每一次HTTP请求生成一个唯一的标识traceId,这里我将采用UUID作为请求标识traceId,然后再过滤器中通过调用【MDC】类中的put()和remove()方法,添加和删除traceId到log4j2日志输出中,注意:MDC是slf4j日志门面框架中提供的一个类。原创 2023-06-26 20:59:30 · 1198 阅读 · 0 评论 -
【SpringBoot笔记31】SpringBoot之配置过滤器Filter的方式、配置拦截器Interceptor的方式
SpringBoot中,有两种方式可以配置过滤器,分别是:使用javax.servlet包中的@WebFilter注解进行配置;另外一种方式就是通过SpringBoot提供的FilterRegistrationBean过滤器注册器的方式进行注入。原创 2023-06-10 18:09:27 · 846 阅读 · 0 评论 -
【SpringBoot笔记30】SpringBoot之自定义HttpServletRequestWrapper实现流的重复使用
HttpServletRequestWrapper是javax.servlet包下提供的一个类,它是专门用于对HttpServletRequest请求对象进行包装的类,通过继承HttpServletRequestWrapper类,重写其中的方法,就可以对HttpServletRequest对象进行一些自定义的修改,例如:自定义HttpServletRequestWrapper类,对request流进行包装,实现流的重复使用,解决流关闭问题,这在实际的开发项目中,可能会经常遇到。原创 2023-06-10 17:48:27 · 1666 阅读 · 0 评论 -
【MyBatis笔记13】使用MyBatis判断数据表是否存在的两种方法(MySQL数据库)
这篇文章,主要介绍使用MyBatis判断数据表是否存在的两种方法(MySQL数据库),【information_schema.TABLES】是会将所有的数据库、数据表都查询出来,假设有两个数据库,那么就会将这个两个数据库中的所有数据表信息都返回。返回的数据表信息中,常见的字段信息有:原创 2023-06-08 21:23:33 · 3022 阅读 · 0 评论 -
【SpringMVC笔记15】SpringMVC框架中使用RequestBodyAdvice和ResponseBodyAdvice
SpringMVC框架中,提供了一个RequestBodyAdvice接口,这个接口可以对HTTP的请求进行拦截,之后我们就可以在这个拦截方法中,对请求进行一些额外的处理,例如:对请求的数据进行解密、解签等操作。supports()方法:返回一个boolean类型,表示是否执行beforeBodyRead()方法。beforeBodyRead()方法:在读取HTTP请求体数据之前执行这个方法。afterBodyRead()方法:在读取HTTP请求体数据之后执行这个方法。原创 2023-06-03 21:10:12 · 468 阅读 · 0 评论 -
【SpringBoot笔记29】SpringBoot集成RabbitMQ消息队列
SpringBoot工程中集成RabbitMQ,首先需要创建一个SpringBoot工程,然后引入RabbitMQ的依赖,而SpringBoot官方专门给我们提供了一个消息队列的启动器starter,即:【spring-boot-starter-amqp】。原创 2023-03-28 20:47:48 · 440 阅读 · 0 评论 -
SpringBoot整合阿里巴巴的druid数据库连接池
SpringBoot整合druid数据库连接池首先要创建一个springboot项目,这里就不具体说了。可以查看文章:如何创建springboot项目。springboot项目创建完成之后,添加对应的druid依赖到pom.xml文件中<!-- springboot整合druid连接池 --><dependency> <groupId&...原创 2020-04-03 18:27:43 · 448 阅读 · 0 评论 -
【SpringBoot笔记26】SpringBoot框架集成ElasticSearch数据库
ElasticSearch是一款分布式,基于Restful风格的文档搜索引擎,ES是一款非结构化的文档型数据库,它可以实现海量数据的快速搜索和分析。elasticsearch提供了多种语言的支持,例如:Java、C、Python等等,不同的编程语言要操作ES数据库,那就需要使用不同的编程语言实现一个ES客户端程序,然后通过ES数据库提供的Restful风格的API操作数据库。原创 2022-11-20 12:52:21 · 1039 阅读 · 0 评论 -
springboot添加JSP支持
springboot项目默认是不支持JSP的,要想使用JSP,需要手动添加JSP依赖。1、添加jsp依赖配置代码:<!-- servlet依赖 --><dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api&l...原创 2019-09-01 00:05:44 · 294 阅读 · 0 评论 -
【SpringBoot笔记06】SpringBoot集成log4j2日志框架
log4j2日志可以有两种类型的配置文件,分别是:【properties】和【xml】,一般情况下,都是采用【XML】格式的配置文件,因为看着更加的直观,并且log4j2默认的配置文件名称叫做:【log4j2.xml】或者【log4j2.properties】。SpringBoot框架中,默认是采用的Logback作为日志输出,如果我们要使用log4j2日志框架,那首先需要将Logback框架给排除掉,然后在引入log4j2框架,否则多个日志框架一起使用,启动工程的时候,就会报错。原创 2022-10-22 10:31:17 · 838 阅读 · 0 评论 -
【SpringBoot笔记12】SpringBoot框架实现文件上传和文件下载
SpringBoot文件上传和下载,还是使用的SpringMVC框架中的,只不过SpringBoot给我们做了简化,它提供了一些文件上传的配置属性,例如:设置单个文件上传大小、单个请求最大上传文件大小、是否支持多文件上传等。下面介绍如何在SpringBoot框架中实现文件上传。原创 2022-10-25 13:16:16 · 2317 阅读 · 2 评论 -
【SpringBoot笔记21】SpringBoot框架使用AOP + 自定义注解实现请求日志记录
这里我们自定义一个@LogRecord注解,该注解使用在方法上面,由于标记AOP切面会拦截这个方法,并且记录请求日志信息。/*** @Description 自定义日志注解*/// 注解可以保留到运行期间// 注解使用在方法上面/*** 操作名称*//*** 描述信息*/}为了能够收集请求日志的信息,这里定义一个日志实体类来保存没有一次请求的日志信息。/*** @Description 日志实体类*//** 日志唯一标识 *//** 操作名称 */原创 2022-11-03 20:28:12 · 881 阅读 · 0 评论 -
【SpringBoot笔记10】SpringBoot框架集成Druid数据源
SpringBoot框架中,默认采用的是HikariDataSource数据源,但是在实际的开发项目里面,都是采用的Druid数据源,Druid是阿里巴巴开源的一个数据库连接池,它不仅可以实现数据库连接池的功能,而且还可以监控每一条执行SQL,它提供了一个监控页面,里面可以看到各种SQL语句的执行情。这篇文章,需要基于上一篇文章基础之上,因为需要操作数据库。在【application.yml】配置文件中,添加Druid相关的配置信息。到此,SpringBoot框架集成Druid数据源就成功啦。原创 2022-10-24 09:45:00 · 495 阅读 · 0 评论 -
【SpringBoot笔记02】SpringBoot框架配置文件介绍
SpringBoot框架中,提供了两种类型的配置文件,分别是:【properties】和【yml】,其中【yml】也可以写成【yaml】后缀格式,默认的配置文件名称是【application】,即:配置文件可以是下面两种类型:第一种类型:【application.properties】。第二种类型:【application.yml】或者【application.yaml】(注意:其中yaml一般都会写成yml)。原创 2022-10-13 23:37:35 · 503 阅读 · 0 评论 -
【SpringBoot笔记04】SpringBoot框架之静态资源的处理
静态资源,是指:HTML、CSS、JS、IMG等等文件资源,这些统一的叫做静态资源。在SpringBoot框架中,静态资源的存放目录默认有四个,也可以自定义目录,下面就分别介绍一下。原创 2022-10-18 22:47:13 · 971 阅读 · 0 评论 -
springboot中使用thymeleaf模板
springboot中使用thymeleaf模板的步骤。(1) 使用thymeleaf模板步骤一:添加thymeleaf依赖。依赖代码:<!-- thymeleaf依赖 --><dependency> <groupId>org.springframework.boot</groupId> <artifac...原创 2019-08-27 20:54:03 · 2370 阅读 · 0 评论 -
【SpringBoot笔记16】SpringBoot集成Quartz实现定时任务功能
Quartz是一个实现定时任务的框架,它主要由三部分组成,分别是:Job任务、Trigger触发器、Scheduler调度器。Job任务:这是实际需要执行业务逻辑的方法,Quartz将其抽象成了一个Job对象。Trigger触发器:什么时候、什么条件下,应该执行Job任务呢,Quartz将其抽象成了一个Trigger对象。Scheduler调度器:当满足了执行条件时候,就要进行调度执行Job任务啦,Quartz将这个调度动作抽象成了一个Scheduler对象。原创 2022-10-28 12:47:22 · 950 阅读 · 0 评论 -
【多模块聚合工程】IDEA搭建SpringBoot多模块聚合工程详细步骤
这篇文章主要是介绍一下,如何在IDEA开发工具下,搭建一个基于SpringBoot的多模块聚合工程项目。多模块聚合工程:按照MVC的思想,将应用分成三层web、service、mapper/dao这三个主要模块。本篇文章,将项目模块细分为如下几个子工程模块:app-common:通用工具类模块,专门用于项目中使用的一些工具类。app-pojo:实体类模块,专门存放实体类对象,例如:DTO、BO、AO、VO等等对象。app-mapper:dao接口模块,专门存放操作数据库的dao接口原创 2022-04-05 21:38:54 · 5293 阅读 · 0 评论 -
【SpringBoot笔记19】SpringBoot框架如何自定义starter启动器
SpringBoot框架之所以能够简化开发,这完全依赖于SpringBoot提供的自动配置机制以及starter启动器,SpringBoot官方给我们提供了很多的starter启动器,当我们要使用某个功能时候,只需要在pom文件里面,引入相应功能的starter启动器,就能够快速的将其集成到SpringBoot框架里面。今天,这篇文章,主要介绍如何自定义一个starter启动器。然后在【application.yml】配置文件里面,开启自动配置功能。原创 2022-10-29 23:18:13 · 508 阅读 · 0 评论 -
【SpringBoot笔记05】SpringBoot集成JSP、Thymeleaf、Freemarker三种常见的视图模板
JSP、Thymeleaf、Freemarker三个是非前后端分离模式下,最常见的三种视图技术,一个项目中只需要使用一种视图技术就可以啦,没必要集成多个视图模板,下面就分别介绍SpringBoot如何集成JSP、Thymeleaf、Freemarker视图模板。PS:首先我们创建一个最基本的SpringBoot工程,引入依赖。原创 2022-10-21 23:29:26 · 626 阅读 · 0 评论 -
【SpringBoot笔记14】SpringBoot框架之RestTemplate对象及其常用方法
RestTemplate是SpringMVC框架中提供的一个专门用于调用HTTP接口的一个类,该类属于【spring-web】模块里面,RestTemplate类里面提供了一些通用的方法,这些方法可以简便的实现HTTP接口的调用,RestTemplate使用很多,微服务组件中的OpenFeign就是通过RestTemplate对象来实现微服务之间的接口调用的。上面已经将RestTemplate对象创建好了,那么之后,我们就可以在需要使用的地方,通过【@Autowired】注解,就可以自动装配该对象啦。原创 2022-10-26 20:42:33 · 1248 阅读 · 0 评论 -
【SpringBoot笔记11】SpringBoot框架集成Swagger2文档
Swagger是一款API文档工具,SpringBoot中集成Swagger之后,通过访问swagger-ui前端界面,就可以查看当前工程里面所有对外提供的接口以及出入参之后,不仅如此,swagger还可以和postman一样,直接调用后端接口地址,这在前后端分离模式下,swagger就变得非常有用了,因为前端开发人员,只需要看swagger接口文档,就可以进行开发,而不需要我们后端开发人员自己写个接口文档。SpringBoot没有专门提供swagger的starter启动器,所以我们需要自己单独引入s原创 2022-10-24 22:19:16 · 1048 阅读 · 0 评论 -
SpringBoot中访问SpringMVC控制器
springboot框架中,处理SpringMVC框架中的相关内容时,默认已经配置好了【DispatcherServlet】,并且映射路径是【/*】,所以在处理请求时,不需要和之前写jsp的路径一样。springboot推荐使用RESTful风格的API。(1) 在根包【cn.test.demo】包下,创建【controller】包。在controller包下,创建一个控制器类:Use...原创 2019-08-17 13:24:16 · 462 阅读 · 0 评论 -
【SpringBoot笔记13】SpringBoot框架之拦截器的使用
拦截器,这是SpringMVC框架中提供的一个组件,它主要是在Controller控制器方法执行前后进行拦截,可以决定是否继续执行控制器方法,使用拦截器可以实现很多的功能,例如:用户是否登录,记录日志、权限校验等等。拦截器是SpringMVC框架中的东西,所以在进行注册的时候,也是将其注册到SpringMVC框架里面,在SpringBoot框架中,有三种方式配置SpringMVC,分别如下所示。,那么这个时候,就会导致访问SpringBoot静态资源的时候出现404情况,如下所示。启动工程,浏览器访问【原创 2022-10-25 23:05:27 · 543 阅读 · 0 评论