liuyueyi / spring-boot-demo

Spring Boot & Spring Cloud & Spring Security Demo Case(Spring学习示例实战项目)
http://spring.hhui.top
Apache License 2.0
653 stars 330 forks source link
aop bean influxdb jdbctemplate jpa mongodb mysql react redis solr spel spring spring-boot spring-cloud spring-mvc springboot-redis springsecurity sse webflux websocket

Spring-Boot-Demo

#

Build Status Average time to resolve an issue Percentage of issues still open

SpringBoot + SpringCloud + SpringSecurity学习过程中的源码汇总,沉淀记录下学习历程

说明:Spring系列教程现已根据专栏方式进行收集整理,更便于系统学习,详情查看: [一灰灰的Spring系列专栏](https://hhui.top/spring/)

欢迎关注公众号 一灰灰blog 更多干货持续分享

QrCode

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

大致规划的内容包括以下章节,希望能用半年到一年(严重超期)的时间完成....

I. 基础篇

II. 高级篇

III. MVC篇

IV. SpringCloud篇

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. 实战系列

  1. 【SpringBoot实战】Bean之注销与动态注册实现服务mock
  2. 【SpringBoot实战】FactoryBean及代理实现SPI机制的实例
  3. 【SpringBoot实战】借助Redis实现排行榜功能
  4. 【SpringBoot实战】借助Redis搭建一个简单站点统计服务
  5. 【SpringBoot实战】AOP实现日志功能
  6. 【SpringBoot实战】徒手撸一个扫码登录示例工程
  7. 【SpringBoot实战】mock一个简单的分布式定时任务
  8. 【SpringBoot实战】Redis实现分布式锁(应用篇)
  9. 【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它的定义

那么具体能干嘛?

相关博文

7. SpringCloud系列

微服务系列

Eureka系列

踩坑、填坑

8. 运维

docker

9. 中间件

zookeeper

prometheus

邮件

Caffiene缓存

10. 扩展点

3. 其他

拒绝单机,欢迎start或者加好友支持

待更新系列

[x] @Value支持绑定自定义的配置源,并支持动态刷新 [ ] 事务后置\前置\回滚操作 [ ] druid数据源配置相关 [ ] 多线程的事务支持 [ ] 扩展点系列 [ ] prometheus监控druid仙姑噶那配置向 [ ] websocket补齐 [ ] webflux配套教程

声明

尽信书则不如无书,以上内容,一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

扫描关注

公众号&博客

QrCode

打赏码

pay