# SpringBoot高级学习 **Repository Path**: li2906776925/spring-boot-advanced-learning ## Basic Information - **Project Name**: SpringBoot高级学习 - **Description**: 【SpringBoot高级学习】 功能抽离成模块,防止每次需要启动太多组件。 相关性强的内容放到有个模块里面 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-04-13 - **Last Updated**: 2024-12-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SpringBoot高级学习项目目录说明 ## ControllerAdvice模块 全局异常处理、全局数据绑定、全局数据预处理 ## DataSource模块 动态切换数据源学习 ## DesignMode模块 ## Elasticsearch模块 使用Elasticsearch去查MySQL的数据 ## Multithreading模块 [详细笔记](./Multithreading/README) ## RedisStudy模块 1. [分布式锁(diy版)](https://www.cnblogs.com/toutou/p/redis_lock.html) 2. [集群共享session](https://www.cnblogs.com/toutou/p/redis_session.html) 3. [简化操作Redis工具===>Redisson](https://github.com/redisson/redisson/wiki/%E7%9B%AE%E5%BD%95) ## RocketMQ模块 消息队列学习 ## SpringBasicStudy ### 同一个类中方法互相调用AOP失效解决办法 方法 1.注入接口类并加上@Lazy注解,接口去调用本类方法 方法 2. 2.1 开启注解@EnableAspectJAutoProxy(proxyTargetClass = true, exposeProxy = true) 2.2 AopContext.currentProxy()强转为当前类对象再调用本类的方法 ### [事务传播机制讲解](https://www.cnblogs.com/jeremylai7/p/15816290.html) 总结: 补充: 1. 如果只是一个事务,捕获异常,事务失效。 2. 如果是发生事务传播且都为REQUIRED,==不管是否捕==获所有事务回滚。【实例18】 3. 如果是发生事务传播外层REQUIRED,内层NESTED。外层捕获,因为是嵌套事务,外层添加成功,内层添加失败【实例17】 | **==传播==**属性 | 总结 | |:--------------|:------------------------------------------------| | REQUIRED | 默认属性,所有的事务都处于同一个事务下,出现异常,==不管是否捕==获所有事务回滚 | | SUPPORTS | 如果不存事务,就以非事务的方式运行,存在事务就加入该事务 | | MANDATORY | 强制调用方添加事务,如果不存在事务就报错,存在事务就加入该事务 | | REQUIRES_NEW | 无论调用方是否存在事务,都会创建新的事务,并且调用方异常不会影响 REQUIRES_NEW事务 | | NOT_SUPPORTED | 无论是否调用方是否存在事务,都是以非事务的方式执行,出现异常也会回滚 | | NEVER | 不用事务,存在事务就报错,和 MANDATORY 相反 | | NESTED | 嵌套事务,新建一个子事务,事务执行相互独立,如果调用方出现异常,直接回滚 | ## [SpringSecurityStudy项目(停更)](SpringSecurityStudy) 需要阅读官方文档,停更 [博客代码](https://blog.csdn.net/I_am_Hutengfei/article/details/100561564) [jwt](https://blog.csdn.net/u012702547/article/details/89082314?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166063463116780357214949%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=166063463116780357214949&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-89082314-null-null.nonecase&utm_term=Spring%20Security%20%E4%B8%AD%E4%BD%BF%E7%94%A8%20JWT&spm=1018.2226.3001.4450) ## [WebFlux项目](WebFlux) [参考文档](https://chinalhr.github.io/post/spring-webflux-principle/) [尚硅谷](https://www.yuque.com/leifengyang/springboot3/xsu8qfbtgeyxhatb) 适用场景 使用 Spring WebFlux,下游使用的安全认证层、数据访问层框架都必须使用 Reactive API 保证上下游都是匹配的,非阻塞的。 然而Spring Data Reactive Repositories 目前只支持 MongoDB、Redis 和Couchbase 等几种不支持事务管理的 NOSQL,技术选型时需要权衡利弊和风险。 1. Spring MVC能满足场景的,就不需要更改为 Spring WebFlux,毕竟Reactive写法对比原本同步执行的程序写法很不同,而且很多基于Servlet线程模型的库将无法使用,如Spring Transaction……。 2. 需要底层容器的支持(Netty和Servlet3.1+)。 3. 适合应用在 IO 密集型的服务中(IO 密集型包括:磁盘IO密集型, 网络IO密集型),微服务网关就属于网络 IO 密集型,使用异步非阻塞式编程模型,能够显著地提升网关对下游服务转发的吞吐量。