
SpringBoot
文章平均质量分 94
提供Spring Boot框架的深入解析与实战应用。内容涵盖框架基础、自动配置、Web开发、数据访问、安全控制等关键领域,通过实战案例和最佳实践,帮助大家快速掌握Spring Boot提高开发效
墩墩分墩
生活就像是一场精心策划的冒险:是一名不折不扣的“吃货探险家,深谙与喵主子斗智斗勇之道御用铲屎官
通过撸铁徒步旅游对抗烦恼,虐完自己后身心都舒畅,喜欢镜头捕捉那些让人心动的瞬间,~
偶尔写写博客是我与世界对话的窗口,通过思考与分享,穿插些生活小确幸~
展开
-
【SpringBoot】Redis Lua脚本实战指南:简单高效的构建分布式多命令原子操作、分布式锁
- **轻量级**: 它用标准C语言编写并以源代码形式开放,编译后仅仅一百余K,可以很方便的嵌入别的程序里。- 可扩展: Lua提供了非常易于使用的扩展接口和机制:由宿主语言(通常是C或C++)提供这些功能,Lua可以使用它们,就像是本来就内置的功能一样。- **数据类型丰富**,包括`数字、字符串、布尔值、表(数组和字典的集合)等`。这些数据类型使得Lua语言能够处理各种复杂的数据结构和算法。- 支持面向过程(procedure-oriented)编程和函数式编程(functional progra原创 2024-05-11 15:52:23 · 1326 阅读 · 1 评论 -
【SpringBoot】解锁后端测试新境界:学习Mockito与MockMvc的单元测试魔法
**所谓的mock就是创建一个`类的虚拟对象`,在测试环境中,`用来替换掉真实的对象`,以达到2个目的:** - 验证这个对象的某些方法的调用情况,调用了多少次,参数是什么等等 - 指定这个对象的某些方法的行为,返回特定的值,或者是执行特定的动作原创 2024-05-08 14:46:17 · 1120 阅读 · 0 评论 -
【SpringBoot】一文教会你使用mybaitsPlus进行面向生产开发
MyBatis-Plus (opens new window)(简称 MP)是一个MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。原创 2024-02-20 15:41:30 · 1086 阅读 · 0 评论 -
【SpringBoot】面向生产的统一异常处理方式
- 使用 @ ExceptionHandler 注解:对当前所在Controller的异常进行处理- 实现 HandlerExceptionResolver 接口- 使用` @controlleradvice+@ ExceptionHandler `注解:对全局异常进行处理(推荐)原创 2023-02-02 14:28:16 · 1083 阅读 · 2 评论 -
【SpringBoot】集成SpringSecurity+JWT实现多服务单点登录,原来这么easy
- **单点登录(SingleSignOn,SSO)**,当用户在身份`认证服务器`上登录一次以后,即可**获得访问单点登录系统中其他关联系统和应用软件的权限**,同时这种实现是不需要管理员对用户的登录状态或其他信息进行修改的,这意味着在多个应用系统中,`用户只需一次登录就可以访问所有相互信任的应用系统`。这种方式减少了由登录产生的时间消耗,辅助了用户管理,是目前比较流行的一种**分布式登录方式**。原创 2023-09-25 16:49:06 · 2765 阅读 · 0 评论 -
【SpringBoot】自从集成spring-security-oauth2后,实现统一认证授权so easy!
1.将`OAuth2和Spring Security集成`,就可以得到一套完整的安全解决方案。然后通过Spring Security OAuth2构建一个授权服务器来验证用户身份以提供access_token,并使用这个access_token来从资源服务器请求数据。2.搭建授权服务器最重要的是:继承` AuthorizationServerConfigurerAdapter接口 `并在实现类上加注解`@EnableAuthorizationServer`标识这是一个授权服务器原创 2023-04-24 17:36:04 · 1657 阅读 · 3 评论 -
【SpringBoot】分布式日志跟踪—通过MDC实现全链路调用日志跟踪
`MDC(Mapped Diagnostic Context,映射调试上下文`)是 log4j 和` logback` 提供的一种方便在`多线程`场景下记录日志的功能。MDC 可以看成是**一个与当前线程绑定的Map,可以往其中添加键值对。MDC 中包含的内容可以被同一线程中执行的代码所访问。当前线程的子线程会继承其父线程中的 MDC 的内容**。当需要记录日志时,只需要从 MDC 中获取所需的信息即可。MDC 的内容则由程序在适当的时候保存进去。对于一个 Web 应用来说,通常是在`请求被处理的最开始`保原创 2023-02-17 16:14:18 · 3045 阅读 · 4 评论 -
【SpringBoot】官方表达式语言SPEL(Spring Expression Language)全方位学习
**SpEL表达式的默认格式为:`#{expression}`。SpEL表达式以“`#”`开头,表达式主体包围在花括号中。**- 我们通常使用的属性取值表达式(也可称为`属性占位符,格式${expression}`)不可以嵌套SpEL表达式。不过SpEL表达式可以嵌套属性取值表达式,如下:```java#{${someProperty} + 2}//如果属性“someProperty”的值是2,这个表达式的值就是4。```原创 2023-02-01 15:09:21 · 6110 阅读 · 1 评论 -
【JavaWeb】小白也能看懂的服务器推送技术(WebSocket和SSE)
消息推送(push)通常是指网站的运营工作等人员,通过某种工具对用户当前网页或移动设备APP进行的主动消息推送- WebSocket是html5出现的一种在·`TCP连接`上进行`全双工通信`的协议- 浏览器和服务器仅需`一次握手`,就可以建立`持久性的连接`,并进行`双向数据传输`。- WebSocket目前支持ws和wss两种模式,对应HTTP和HTTPS。原创 2023-02-01 14:15:01 · 3563 阅读 · 1 评论 -
【SpringBoot】SpringBoot+SpringSecurity+CAS实现单点登录
CAS(Central Authentication Service的缩写,中央认证服务) 是耶鲁大学 Technology and Planning 实验室的 Shawn Bayern 在2002年出的一个开源系统。刚开始名字叫。Yale CAS 1.0的目标只是一个单点登录的系统,随着慢慢公开,功能就越来越多了,就提供了多种认证的方式。从结构上看,CAS 包含两个部分:。只要将开发单点登录的系统集成CAS Client,然后部署好CAS Server ,就可以实现多系统的单点登录。官网地址:https:原创 2022-11-22 14:15:15 · 3117 阅读 · 1 评论 -
【SpringBoot】SpringBoot整合SpringSecurity+thymeleaf实现认证授权(配置对象版)
**Spring Security 是 Spring 家族中的一个安全管理框架,Spring Security 的两大核心功能就是`认证(authentication)和授权(authorization)`。**- 认证 :你是什么人。- 授权 :你能做什么。- 用户 :主要包括用户名称、用户密码和当前用户所拥有的角色信息,可用于实现`认证`操作。- 角色 :主要包括角色名称、角色描述和当前角色所拥有的权限信息,可用于实现`授权`操作。原创 2022-11-04 16:52:49 · 2752 阅读 · 2 评论 -
【SpringBoot】API 接口设计之 token、timestamp、sign 具体架构与实现
Token:访问令牌access token, 用于接口中, 用于标识接口调用者的身份、凭证,减少用户名和密码的传输次数。一般情况下客户端(接口调用方)需要先向服务器端申请一个接口调用的账号,服务器会给出一个appId和一个key, key用于参数签名使用,注意key保存到客户端,需要做一些安全处理,防止泄露。Token的值一般是UUID,服务端生成Token后需要将token做为key,将一些和token关联的信息作为value保存到缓存服务器中(redis),当一个请求过来后,服务器就去缓存服务器原创 2021-12-14 10:20:45 · 1675 阅读 · 1 评论 -
【SpringBoot】使用注解控制Api接口幂等性之前后端分离架构设计
在传统的web项目比如使用SSM和SSH框架开发的时候,涉及表单提交时,可能会产生表单重复提交问题,还有分布式开发中rpc远程调用、MQ消费者幂等(保证唯一)、甚至常见的在网络产生延迟的情况下,都可能产生重复请求,这时候会涉及到表单重复提交,这种情况我们称之为幂等性;原创 2021-12-14 10:17:18 · 757 阅读 · 1 评论 -
【SpringBoot】使用MD5加盐验签Api接口之前后端分离架构设计
在现如今的Web开发,或者是涉及到H5、Android APP、IOS APP、小程序等移动端开发时,都是需要后端提供Api接口来给前端调用,那么接口安全问题就被大家重视起来了,尤其是一些架构师,在项目架构过程中,需要着重考虑安全问题;说到安全问题,最常见漏洞就是在传统的接口在传输的过程中,很容易被一些黑客技术者截取请求报文,对报文抓包分析,然后更改请求头里面的重要参数值,进而伪造请求信息达到目的。仔细思考一下如果我们的项目不对请求信息做一些防攻击、防抓包篡改的话,太过于危险,尤其涉及到金额的项目安全系数需原创 2021-12-14 10:14:57 · 4621 阅读 · 1 评论 -
【SpringBoot】集成缓存抽象层SpringCache进行项目实战
`Spring从3.1`开始定义了`org.springframework.cache.Cache `和`org.springframework.cache.CacheManager`接口来**统一不同的缓存技术**; 并支持使用`JCache(JSR-107)注解`简化我们开发。它本质上是一个`缓存抽象层`,底层是用`Map`实现的。`缓存数据量不是很大的时候推荐使用`,不然还是要用第三方的缓存redis、echcache等。原创 2021-09-05 16:32:24 · 662 阅读 · 0 评论 -
【Java基础】SPI机制开发指南—JavaSPI和SpringSPI机制的使用及源码浅析
SPI 全称为` Service Provider Interface`,JDK内置的一种`动态的服务提供发现机制`。**SPI 的本质**是将`接口实现类`的`全限定名(包名+类名)配置在文件中`,并由`服务加载器ServiceLoader读取配置文件来加载实现类`。`实现在运行时动态为接口替换实现类`。可以理解为 **`运行时动态加载接口的实现类`**。实际上就是“`基于接口的编程+策略模式+配置文件`”组合实现的一种**动态加载机制**原创 2021-05-17 15:47:09 · 491 阅读 · 1 评论 -
【SpringBoot】实现Mybatis+Druid的多数据源切换和动态数据源加载
1. **多DataSource + 多SqlSessionFactory** 在使用Dao层的时候通过不同的SessionFactory进行处理,一般的情况下我们都是使用Mybatis,配置多个DataSource,每个DataSource扫描不同的Mapper、注入到不同SqlSessionFactory实现的多数据源。2. **使用AbstractRoutingDataSource的实现类通过AOP或者手动处理实现动态的使用我们的数据源**, 基于这种方式,不仅可是实现真正意义上的`多数据源的原创 2021-04-22 09:52:15 · 1778 阅读 · 3 评论 -
【SpringBoot】实现JdbcTemplate、Druid、Dynamic-Datasource的多数据源动态切换
## 多数据源的使用场景1. 操作同一台服务器上不同的数据库,或者多台服务器上的相同或不相同数据库。2. 进行跨库操作、多数据源进行分离数据;3. 使得程序得以扩展,当一台或者部分服务器宕机,不影响整个应用的服务;## 多数据源配置的思路1. 创建数据源DataSource ,指定使用哪个的数据源(如Druid,DBCP,C3P0),并初始化数据源配置项,如连接url、驱动包、用户名、密码、连接数、连接超时时间等等。2. 创建会话工厂 sqlsessionFactory,并注入数据源以及要扫描原创 2021-04-02 15:19:29 · 4076 阅读 · 3 评论 -
【SpringBoot】整合 Mybatis 实现 Druid数据源监控(Mysql)
1. Druid 是阿里巴巴开源平台上一个数据库连接池实现,结合了 C3P0、DBCP、PROXOOL 等 DB 池的优点,同时加入了日志监控2. Druid 可以很好的监控 数据库池连接和 SQL 的执行情况,天生就是针对监控而生的 数据库 连接池3. Spring Boot 2.0 以上默认使用 Hikari 数据源,可以说 Hikari 与 Driud 都是当前 Java Web 上最优秀的数据源原创 2021-04-01 15:15:50 · 605 阅读 · 0 评论 -
【SpringBoot】使用hibernate-validator实现优雅的参数校验
高效使用hibernate-validator校验框架 分组序列@GroupSequenceProvider、@GroupSequence控制数据校验顺序,解决多字段联合逻辑校验问题【享学Spring MVC】原创 2021-02-23 11:42:37 · 2748 阅读 · 0 评论 -
【SpringBoot】异步请求的使用和拓展
**异步请求与异步调用的区别**- 两者的使用场景不同,**异步请求**用来解决`并发请求对服务器造成的压力`,从而`提高对请求的吞吐量`;而**异步调用**是用来`做一些非主线流程且不需要实时计算和响应的任务`,比如同步日志到kafka中做日志分析等。- **异步请求**是会`一直等待response响应的`,需要返回结果给客户端的;而**异步调用**我们往往`会马上返回给客户端响应`,完成这次整个的请求,至于异步调用的任务后台自己慢慢跑就行,客户端不会关心。原创 2020-12-22 15:40:25 · 302 阅读 · 0 评论 -
【SpringBoot】项目启动时执行指定代码的几种方式
在Spring应用服务启动时,需要提前加载一些数据和执行一些的初始化工作。例如:删除临时文件,清除缓存信息,读取配置文件,获取数据库连接,这些工作在开机启动之后只要执行一次就行了原创 2020-12-09 14:36:45 · 2259 阅读 · 0 评论 -
【SpringBoot】使用WebMvcConfigurer配置SpringMVC
WebMvcConfigurer配置类是使用Java代码代替传统的xml配置文件,对SpirngMvc进行配置的一种方式,需要创建一个`配置类@Configuration`并`实现WebMvcConfigurer 接口`- 在Spring Boot 1.5版本以前都是继承WebMvcConfigurerAdapter类来实现代码配置的。- SpringBoot 2.0 后,WebMvcConfigurerAdapter类被`@Deprecated(弃用)`。 - **官方推荐**使用`实现WebMv原创 2020-12-05 14:29:56 · 3069 阅读 · 0 评论 -
【SpringBoot】静态资源规则配置
spring.mvc.static-path-pattern代表的含义是我们应该以什么样的路径来访问静态资源,`默认配置为 /*`,换句话说,`只有静态资源满足什么样的匹配条件spring.resources.static-locations 用于告诉Spring Boot`在去哪里找静态资源文件`,可以配置多个,以逗号分割,根据`配置的先后顺序`依次进行查找文件原创 2020-12-05 11:17:48 · 2393 阅读 · 0 评论 -
【SpringBoot】spring-retry(重试机制)
在调用第三方接口或者使用Mq时,会出现网络抖动,连接超时等网络异常,所以需要重试。网络抖动:标识一个网络的稳定性。抖动越小,网络越稳定。Spring Retry是从Spring Batch 2.2.0版本独立出来的一个功能,主要实现了重试和熔断。在 Spring Retry需要指定触发重试的异常类型,并设置每次重试的间隔以及如果重试失败是继续重试还是熔断(停止重试)。对于重试是有场景限制的,不是什么场景都适合重试,比如参数校验不合法、写操作等(要考虑写是否幂等)都不适合重试。远程调用超时、网原创 2020-11-27 13:52:25 · 5884 阅读 · 2 评论 -
【SpringBoot】异步调用的使用和拓展
通常,在Spring程序中做一个耗时的操作(例如调用其他外部模块),一般会通过异步的方式执行。一版有这2种方法:创建原生线程池ThreadPoolExecutor,提交任务执行使用@Async注解,标注在需要异步执行的方法上一.Spring实现的线程池Spring实现的异步线程池,都实现了TaskExecutor接口,其实质是java.util.concurrent.Executor(TaskExecutor继承了Executor)。原创 2020-11-09 16:48:45 · 488 阅读 · 0 评论 -
【SpringBoot】@Configration与@Bean的使用
Spring Boot 推荐使用 java 配置完全代替 XML 配置,java 配置是通过 @Configration 和 @Bean 注解实现的。@Configration:作用在类上,声明当前类是一个配置类,相当于 Spring 中的一个 XML配置文件,可理解为用Spring的xml配置文件里的<beans>标签。@Bean:作用在方法上,声明当前方法的返回值是一个 Bean,相当于Spring的XML配置文件中的<bean>标签原创 2020-11-07 14:31:59 · 2585 阅读 · 0 评论 -
【SpringBoot】属性注入使用
application.properties,application.yml:全局配置文件,作用是对一些默认配置的配置值进行修改,在spring boot启动时默认加载此文件自定义属性文件:通过@PropertySource加载。@PropertySource可以同时加载多个文件,也可以加载单个文件。如果相同第一个属性文件和第二属性文件存在相同key,则最后一个属性文件里的key启作用。加载文件的路径也可以配置变量原创 2020-11-06 15:20:28 · 843 阅读 · 2 评论 -
【SpringBoot】了解CORS以及在2.0版本解决跨域问题三种方式
一.同源策略1.一个源的定义如果两个页面的协议,端口(如果有指定)和域名都相同,则两个页面具有相同的源。举个例子:下表给出了相对http://a.xyz.com/dir/page.html同源检测的示例:URL结果原因http://a.xyz.com/dir2/other.html成功http://a.xyz.com/dir/inner/another.html成功https://a.xyz.com/secure.html失败不同协议 ( https和原创 2020-06-22 18:49:44 · 655 阅读 · 0 评论 -
【SpringBoot】SpringBoot整合SpringDataJPA及基本使用
Spring Data JPA是Spring Data的子模块,是在`实现了JPA规范`的基础上`封装`的一套 JPA 应用框架虽然ORM框架都实现了JPA规范,但在切换不同的ORM框架时仍然需要编写不同的代码,使用Spring Data JPA能够方便大家`在使用不同的ORM框架之间进行切换而不需要更改代码。` Spring Data JPA旨在通过将`统一ORM框架的访问持久层的操作`,来提高开发的效率。Spring Data JPA 可以理解为 `JPA 规范的再次封装抽象原创 2020-04-07 18:49:57 · 10893 阅读 · 10 评论