Spring-Boot-Demo
SpringBoot + SpringCloud + SpringSecurity学习过程中的源码汇总,沉淀记录下学习历程
说明:Spring系列教程现已根据专栏方式进行收集整理,更便于系统学习,详情查看: [一灰灰的Spring系列专栏](https://hhui.top/spring/)
欢迎关注公众号 一灰灰blog
更多干货持续分享
0. 项目说明
如果想在本机使用这个项目的demo,下面有一些注意事项
环境要求
java: jdk1.8
maven: 3.2+
spring boot: 2.2.1.RELEASE
ide: IDEA/Eclipse/NetBeans随意
## 不同项目的环境依赖,请以项目对应的博文要求为准
db: mongodb + mysql + redis + solr + elasticsearch
中间件: promotheus + grafana + kibana + rabbitmq
IDEA插件
# 必须
lombok
# 推荐
maven helper: 查看依赖树的好工具(排除依赖冲突非常棒)
Free MyBatis plugin: mybatis的mapper与xml跳转比较方便
Mybatis log Plugin:日志
CodeGlance: 类似sublimetext 右边的快速预览框
Rainbow Brackets: 不同层级的括号颜色不一样
1. 知识点图谱
所有博文集中发布在个人博客网站 : 一灰灰Blog-Spring
大致规划的内容包括以下章节,希望能用半年到一年(严重超期)的时间完成....
II. 高级篇
III. MVC篇
- [x] 过滤器
- [x] 拦截器
- [x] Get/Post/Put/Delete等http方法支持
- [x] 参数绑定(get/post参数解析,自定义参数解析器)
- [x] 返回相关
- [x] 异常处理
- [ ] 安全相关(SQL/XSS等注入)
- [ ] 跨域处理
- [ ] WebSocket
- [ ] reactive
IV. SpringCloud篇
- [ ] 注册中心
- [ ] 配置中心
- [ ] 网关路由
- [ ] 负载均衡
- [ ] 熔断器
- [ ] 链路监控
- [ ] 安全模块
- [ ] oauth
- [ ] admin
V. 源码篇
VI. 项目说明
项目说明
| 项目 | 说明 | 知识点 |
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------|---------------------------------------------------------------------------------------|
| **SpringBoot** | SpringBoot项目 | - |
| [000-properties](spring-boot/000-properties) | 【配置】使用姿势 | `@PropertySource` 指定配置文件,
`@ConfigurationProperties` 指定配置前缀,
`@value` 配置绑定 |
| [001-properties](spring-boot/001-properties) | 【配置】环境选择 | 配置`spring.profiles.active`指定环境 |
| [002-properties](spring-boot/002-properties) | 【配置】刷新示例 | SpringCloud生态配置刷新
`@RefreshScope`,`EnvironmentChangeEvent`配置变更事件 |
| [002-properties-bind](spring-boot/002-properties-bind) | 【配置】刷新绑定的各种知识点 | `@ConfigurationProperties` |
| [002-dynamic-envronment](spring-boot/002-dynamic-envronment) | 【配置】自定义配置源 | `MapPropertySource` |
| [002-properties-value](spring-boot/002-properties-value) | 【配置】@Value扩展知识点 | `@Value` |
| [003-log](spring-boot/003-log) | 【日志】集成logback | logback日志集成与配置 |
| [003-log4j2](spring-boot/003-log4j2) | 【日志】集成log4j2 | log4j2日志集成与配置 |
| [004-bean](spring-boot/004-bean) | 【bean】使用姿势 | bean三种定义姿势
bean三种注入方式 |
| [005-autoconfig](spring-boot/005-autoconfig) | 【bean】自动加载 | `@Configuration`自动加载配置类 |
| [005-config-selector](spring-boot/005-config-selector) | 【bean】选择注入 | `ImportSelector` 选择在接口的多个实现中,具体实例化哪个 |
| [006-dynamicbean](spring-boot/006-dynamicbean) | 【bean】动态注册bean | `BeanDefinitionRegistryPostProcessor` 扩展实现bean动态注册 |
| [007-conditionbean](spring-boot/007-conditionbean) | 【bean】条件注入 | `@Coinditional` 使用姿势 |
| [008-beanorder](spring-boot/008-beanorder)
[008-beanorder-addition](spring-boot/008-beanorder-addition)
[008-beanorder-addition2](spring-boot/008-beanorder-addition2) | 【bean】加载顺序 | bean加载顺序的反面示例与正确写法 |
| [009-schedule](spring-boot/009-schedule) | 【定时器】定时任务/计划任务 | `@Scheduled` 基本语法与自定义线程池 |
| [010-aop](spring-boot/010-aop) | 【AOP】切面 | aop基本使用姿势与注意事项 |
| [011-aop-logaspect](spring-boot/011-aop-logaspect) | 【AOP】切面 | 实战,日志切面 |
| [012-context-listener](spring-boot/012-context-listener) | 【Listener】事件 | ContextListener |
| [013-spel](spring-boot/013-spel) | 【SpEL】 | SpEL语法与实例 |
| [014-spel-aop](spring-boot/014-spel-aop) | 【SpEL】 | SpEL & aop整合时注意事项 |
| [100-h2database](spring-boot/100-h2database) | 【DB】h2database整合 | - |
| [100-mysql](spring-boot/100-mysql) | 【DB】mysql整合 | - |
| [101-jdbctemplate](spring-boot/101-jdbctemplate) | 【DB】jdbctemplate使用姿势 CURD详解 | `JdbcTemplate` |
| [101-jdbctemplate-transaction](spring-boot/101-jdbctemplate-transaction) | 【DB】事务 | `@Transactional`声明式; 编程式事务
- 隔离级别
传递属性 |
| [102-jpa](spring-boot/102-jpa) | 【DB】 jpa使用姿势 | JPA |
| [102-jpa-errorcase](spring-boot/102-jpa-errorcase) | 【DB】环境配置易错点 | `@EnableJpaRepositories`, `@EntityScan`指定扫描包 |
| [102-jpa-errorcase2](spring-boot/102-jpa-errorcase2) | 【DB】Entity映射错误 | Field映射POJO |
| [103-mybatis-xml](spring-boot/103-mybatis-xml) | 【DB】mybatis xml配置整合方式 | mybatis |
| [104-mybatis-noxml](spring-boot/104-mybatis-noxml) | 【DB】mybatis 注解整合方式 | mybatis |
| [105-mybatis-plus](spring-boot/105-mybatis-plus) | 【DB】mybatis-plus整合 | mybatis-plus |
| [106-mybatis-plus-generator](spring-boot/106-mybatis-plus-generator) | 【DB】mybatis-plus代码自动生成 | mybatis-plus |
| [107-jooq-aop](spring-boot/107-jooq-aop) | 【DB】jooq体验demo,jooq+aop导致项目启动巨慢的坑 | jooq |
| [108-jooq-curd](spring-boot/108-jooq-curd) | 【DB】jooq CURD使用姿势 | jooq |
| [108-jooq-mysql](spring-boot/108-jooq-mysql) | 【DB】jooq代码自动生成 | jooq-code-gen |
| [109-multi-datasource](spring-boot/109-multi-datasource) | 【DB】多数据源配置 | JdbcTemplate, DataSource |
| [109-multi-datasource-mybatis](spring-boot/109-multi-datasource-mybatis) | 【DB】mybatis多数据源配置 | Mybatis DataSource |
| [109-multi-datasource-mybatis-ano](spring-boot/109-multi-datasource-mybatis-ano) | 【DB】mybatis多数据源配置 | Mybatis DataSource |
| [109-multi-datasource-mybatis-plus](spring-boot/109-multi-datasource-mybatis-plus) | 【DB】mybatis-plus多数据源配置 | Mybatis-Plus DataSource |
| [110-mongo-basic](spring-boot/110-mongo-basic) | 【DB】mongodb整合 | mongodb |
| [111-mongo-template](spring-boot/111-mongo-template) | 【DB】mongodb CURD使用姿势 | `MongoTemplate` |
| [120-redis-config](spring-boot/120-redis-config) | 【redis】环境配置与基本使用 | redis |
| [121-redis-jedis-config](spring-boot/121-redis-jedis-config) | 【redis】jedis配置 | jedis |
| [122-redis-template](spring-boot/122-redis-template) | 【redis】RedisTemplate 使用姿势详解 | `RedisTemplate` |
| [123-redis-lettuce-config](spring-boot/123-redis-lettuce-config) | 【redis】lettuce配置 | lettuce |
| [124-redis-cluster](spring-boot/124-redis-cluster) | 【redis】集群使用姿势 | redis集群实例 |
| [125-cache-ano](spring-boot/125-cache-ano) | 【Cache】缓存注解 | Spring缓存注解使用姿势 |
| [130-influxdb](spring-boot/130-influxdb) | 【DB】influxdb整合及CURD | 时序数据库 influxdb |
| [131-influxdb-java](spring-boot/131-influxdb-java) | 【DB】influxdb封装 | 封装更服务SpringBoot规范的`InfluxTemplate`,待实现 |
| [140-search-solr](spring-boot/140-search-solr) | 【Solr】solr环境+CURD使用姿势 | `SolrTemplate`, `SolrClient` |
| [141-search-solr-auth](spring-boot/141-search-solr-auth) | 【Solr】solr开启授权无法更新索引的四种解决方案 | 解决solr更新索引报错问题 |
| [142-search-es](spring-boot/142-search-es) | 【ES】es实例使用demo | ES,权限验证,CURD,高级特性等 `RestHighLevelClient` |
| [150-i18n](spring-boot/150-i18n) | 【i18n】国际化 | 国际化支持 |
| [161-schema-init](spring-boot/161-schema-init) | 【DB】数据初始化 | 数据初始化 |
| [162-liquibase](spring-boot/162-liquibase) | 【DB】Liquibase | Liquibase数据库版本管理 |
| [200-webflux](spring-boot/200-webflux) | 【web】WebFlux实例 | `React` |
| [201-web](spring-boot/201-web) | 【web】basic http实例 | `springmvc` |
| [202-web-params](spring-boot/202-web-params) | 【web】请求参数解析的各种姿势 | get参数解析
post参数解析
自定义参数解析`HandlerMethodArgumentResolver` |
| [202-web-params-validate](spring-boot/202-web-params-validate) | 【web】请求参数校验 | 参数校验validation-api |
| [203-websocket](spring-boot/203-websocket) | 【web】websocket实例 | `WebSocketHandler`, `WebSocketConfigurer` |
| [204-web-static-resources](spring-boot/204-web-static-resources) | 【web】静态资源访问实例 | `WebMvcConfigure`, `spring.resources.static-locations` |
| [204-web-static-resources-ui](spring-boot/204-web-static-resources-ui) | 【web】webjar静态资源 | 第三方jar包提供纯静态资源 |
| [204-web-xml](spring-boot/204-web-xml) | 【web】xml传参与返回实例 | xml传参返回使用姿势 |
| [204-web-xml-json](spring-boot/204-web-xml-json) | 【web】自定义返回数据类型的几种方式 | 返回xml,返回json,请求头、返回头,内容协商`ContentNegotiationConfigurer` |
| [204-web-freemaker](spring-boot/204-web-freemaker) | 【web】freemaker引擎整合 | freemaker |
| [205-web-thymeleaf](spring-boot/205-web-thymeleaf) | 【web】thymeleaf引擎整合 | thymeleaf |
| [206-web-beetl](spring-boot/206-web-beetl) | 【web】beetl引擎整合 | beetl |
| [207-web-response](spring-boot/207-web-response) | 【web】http响应的各种姿势 | 基本数据返回
重定向
错误页面配置
定制http code |
| [207-web-res-gzip](spring-boot/207-web-res-gzip) | 【web】返回结果压缩 | json/text/静态资源返回压缩 |
| [208-web-mapping](spring-boot/208-web-mapping) | 【web】自定义url映射规则 | `RequestCondition` |
| [209-web-error](spring-boot/209-web-error) | 【web】全局异常处理 | `ControllerAdvice`, `ExceptionHandler` |
| [210-web-filter](spring-boot/210-web-filter) | 【web】filter使用姿势 | HttpFilter过滤器 |
| [210-web-filter-order](spring-boot/210-web-filter-order) | 【web】filter优先级使用姿势 | `HttpFilter`, `@Order` |
| [211-web-servlet](spring-boot/211-web-servlet) | 【web】servlet使用姿势 | Servlet |
| [212-web-listener](spring-boot/212-web-listener) | 【web】listener知识点 | Listener |
| [219-web-asyn](spring-boot/219-web-asyn) | 【web】异步请求 | `AsyncContext方式`
`Callable`
`WebAsyncTask`
`DeferredResult` |
| [220-web-sse](spring-boot/220-web-sse) | 【web】sse 服务器发送事件 | `SseEmitter` |
| [221-web-resttemplate](spring-boot/221-web-resttemplate) | 【web】RestTemplate使用姿势 | `RestTemplate` |
| [222-web-client](spring-boot/222-web-client) | 【web】WebClient使用姿势 | `WebClient` |
| [223-webflux-params](spring-boot/223-webflux-params) | 【web】webflux参数解析实例demo | `webflux` |
| [230-web-resin](spring-boot/230-web-resin) | 【web】resion容器整合 | `resin` |
| [300-rabbitmq](spring-boot/300-rabbitmq) | 【web】rabbitmq整合 | rabbitmq |
| [301-rabbitmq-publish](spring-boot/301-rabbitmq-publish) | 【web】rabbitmq发送消息 | `RabbitTemplate`
消息确认模式
事务模式 |
| [302-rabbitmq-consumer](spring-boot/302-rabbitmq-consumer) | 【web】rabbitmq消费消息姿势 | `@RabbitListener` |
| [400-docker-demo](spring-boot/400-docker-demo) | 【docker】docker整合 | `Dockerfile` |
| [410-zookeeper-basic](spring-boot/410-zookeeper-basic) | 【中间件】zk使用姿势 | `ZooKeeper` |
| [411-zookeeper-distributelock](spring-boot/411-zookeeper-distributelock) | 【中间件】zk 分布式锁 | `DistributeLock` |
| [420-prometheus-basic](spring-boot/420-prometheus-basic) | 【中间件】Prometheus监控 | `Prometheus` |
| [421-prometheus-micro](spring-boot/421-prometheus-micro) | 【中间件】Prometheus监控 | `Prometheus` |
| [430-email](spring-boot/430-email) | 【中间件】email 邮件发送 | `email` |
| [500-cache-caffeine](spring-boot/500-cache-caffeine) | 【中间件】内存缓存Caffiene | `Caffiene` |
| [501-cache-caffeine-special](spring-boot/501-cache-caffeine-special) | 【中间件】内存缓存Caffiene | `Caffiene` |
| [600-snowflake-id](spring-boot/600-snowflake-id) | 【DB】雪花算法 | `Snowflake` |
| [601-actuator](spring-boot/601-actuator) | 【监控】检测 | `Actuator` |
| | | |
| **SpringCase** | 实战/应用演练项目 | - |
| [000-spi-factorybean](spring-case/000-spi-factorybean) | 借助FactoryBean实现SPI效果 | `FactoryBean` |
| [002-dynamic-config](spring-case/002-dynamic-config)
[002-dynamic-config-demo](spring-case/002-dynamic-config-demo) | 自定义配置加载与刷新示例工程 | 借助`InstantiationAwareBeanPostProcessorAdapter` + Spring事件机制实现`@Value` `@RefreshScope` |
| [006-importbean](spring-case/006-importbean) | 将非spring项目导入Spring生态
自定义注入实例 | `ImportBeanDefinitionRegistrar` |
| [008-bean-order](spring-case/008-bean-order)
[008-bean-order-client](spring-case/008-bean-order-client) | 指定bean加载优先级,让中间件的核心bean优于业务bean被加载 | `InstantiationAwareBeanPostProcessorAdapter`, `@Import` |
| [009-distribute-scheduler-task](spring-case/009-distribute-scheduler-task) | 分布式定时任务mock实例 | AOP实现定时任务选择; 重写`ScheduledAnnotationBeanPostProcessor`扩展定时任务生成 |
| [010-auto-inject](spring-case/010-auto-inject) | 自定义注入实现 | `BeanPostProcessor` 与 代理类创建 |
| [120-redis-ranklist](spring-case/120-redis-ranklist) | redis实现排行榜 | `zset` |
| [124-redis-sitecount](spring-case/124-redis-sitecount) | redis实现站点统计 | `redisTemplate` |
| [125-redis-distribuet-lock](spring-case/125-redis-distribuet-lock) | redis分布式锁 | `redisTemplate` |
| [126-redis-delay-list](spring-case/126-redis-delay-list) | redis实现的演示队列 | `redisTemplate` |
| [201-web-api-version](spring-case/201-web-api-version) | web版本控制 | `RequestMappingHandlerMapping` |
| [202-web-qrcode-login](spring-case/202-web-qrcode-login) | web扫码登录实战 | `SseEmitter` |
| [203-web-rest-adapter](spring-case/203-web-rest-adapter) | url匹配规则自定义,子类继承父类的参数注解 | `RequestMappingHandlerMapping`, `HandlerMethodArgumentResolver` |
| [204-web-request-proxy](spring-case/204-web-request-proxy) | 基于接口的REST访问支持 | `ClassPathBeanDefinitionScanner`, `ImportBeanDefinitionRegistrar` |
| [205-web-rest-enhanced](spring-case/205-web-rest-enhanced) | 单机应用最小成本扩展REST服务示例 | `RequestMappingHandlerMapping` |
| [421-prometheus-metric](spring-case/421-prometheus-metric) | AOP实现自定义的Prometheus埋点上报 | `Prometheus` |
| [430-mail-alarm](spring-case/430-mail-alarm) | 基于日志的邮件报警 | `javaMailSender` |
| [431-mail-report](spring-case/431-mail-report) | 每天邮件上报统计报表实例 | `javaMailSender` |
| | | |
| **SpringSecurity** | 安全 | |
| [000-basic-demo](spring-security/000-basic-demo) | 整合实例 | |
| [001-authentication-mem-config](spring-security/001-authentication-mem-config) | 内存认证 | |
| [001-authentication-mem-userdetail](spring-security/001-authentication-mem-userdetail) | 内存认证 | |
| [002-authentication-db](spring-security/002-authentication-db) | db认证 | |
| [010-accesscontrol-rbac](spring-security/010-accesscontrol-rbac) | rbac 权限管理 | |
| [011-accesscontrol-acl](spring-security/011-accesscontrol-acl) | acl权限管理 | |
| | | |
| **spring-cloud** | 微服务 | |
| [config-server](spring-cloud/config-server) | 配置中心 | spring cloud config |
| [eurka-server](spring-cloud/eurka-server) | 注册中心 | spring cloud eurka |
| [eurka-service-consumer](spring-cloud/eurka-service-consumer) | 服务提供者 | spring cloud eurka |
| [eurka-service-provider](spring-cloud/eurka-service-provider) | 服务消费者 | ribbon feign |
| [gateway](spring-cloud/gateway) | 网关 | spring cloud gateway 网关 |
| | | |
| **spring-extention** | Spring的扩展点 | |
| [100-application-context-extend](spring-extention/100-application-context-extend) | 上下文刷新前扩展点ApplicationContextInitializer | ApplicationContextInitializer |
| [101-bean-definition](spring-extention/101-bean-definition) | | |
| [102-bean-factory-post-processor](spring-extention/102-bean-factory-post-processor) | | |
| [103-instantiation-bean-post-processor](spring-extention/103-instantiation-bean-post-processor) | | |
| [104-smart-instantiation-bean-post-processor](spring-extention/104-smart-instantiation-bean-post-processor) | | |
| [105-bean-factory-aware](spring-extention/105-bean-factory-aware) | | |
2. 系列博文
0. 实战系列
- 【SpringBoot实战】Bean之注销与动态注册实现服务mock
- 【SpringBoot实战】FactoryBean及代理实现SPI机制的实例
- 【SpringBoot实战】借助Redis实现排行榜功能
- 【SpringBoot实战】借助Redis搭建一个简单站点统计服务
- 【SpringBoot实战】AOP实现日志功能
- 【SpringBoot实战】徒手撸一个扫码登录示例工程
- 【SpringBoot实战】mock一个简单的分布式定时任务
- 【SpringBoot实战】Redis实现分布式锁(应用篇)
- 【SpringBoot实战】借助redis来实现延时队列(应用篇)
1. 基础系列
基础系列博文包括 AOP, IoC(DI,Bean), 日志, 自动配置等
配置
IoC(DI/bean)
AOP相关
日志
定时任务
SpEL
事件
国际化
2. DB系列
我们将db区分为传统的关系型数据库如mysql,NoSql如redis、mongodb,时序数据库influxdb
h2database
MongoDB
redis
mysql
分别介绍多种不同的操作姿势
JdbcTemplate
jpa
mybatis
事务
采坑、填坑
jooq
数据初始化
3. 搜索系列
搜索主要会区分solr和es
solr
es
4. MQ系列
消息队列,如rabbitmq, rocketmq, activemq, kafaka
rabbitmq
5. WEB系列
web系列的东西就比较多了,基本上日常开发中,你需要的都会有;你没用过的也会有
websocket
采坑、填坑
应用实战
WebFlux系列
由于WebFlux和SpringMVC在一些基础上差别较大,单独开一个系列教程版块
webclient异步网络请求
6. SpringSecurity系列
记录SpringSecurity相关的所有技术文章,分类汇总如下,持续更新中
简单抽象的说一下SpringSecurity它的定义
那么具体能干嘛?
- 用户登录认证:用户名+密码登录,确定用户身份
- 用户访问鉴权(常见的ACL访问控制列表,RBAC角色访问控制):判定是否有权限访问某个资源
- 安全保护(CSRF跨站点攻击,Session Fixation会话固定攻击…)
相关博文
7. SpringCloud系列
微服务系列
Eureka系列
踩坑、填坑
8. 运维
docker
9. 中间件
zookeeper
prometheus
邮件
Caffiene缓存
10. 扩展点
3. 其他
拒绝单机,欢迎start或者加好友支持
待更新系列
[x] @Value支持绑定自定义的配置源,并支持动态刷新
[ ] 事务后置\前置\回滚操作
[ ] druid数据源配置相关
[ ] 多线程的事务支持
[ ] 扩展点系列
[ ] prometheus监控druid仙姑噶那配置向
[ ] websocket补齐
[ ] webflux配套教程
声明
尽信书则不如无书,以上内容,一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激
- 微博地址: 小灰灰Blog
- QQ: 一灰灰/3302797840
- WeChat: 一灰/liuyueyi25
扫描关注
公众号&博客
打赏码