SpringBoot2.x从0到1后台实战教程
文章平均质量分 81
基于SpringBoot2.x版本的后台开发教程。面向初级、中级和高级开发者。从项目架构、搭建、开发到部署,完整生命周期,遵循代码规范、设计模式实战,帮助开发工程师形成良好的编码风格、规范的项目设计风格。
天然玩家
请大家不要再订阅了!!!如遇到专栏里可以解决您问题的文章,您可以私信我。为了保护之前订阅用户的权益,专栏内容依旧保留,但是不会再更新内容了。
展开
-
Chapter31:服务部署之Jenkins
本章讲解:Jenkins自动化部署服务(1)构建任务:自由软件任务;(2)配置构建参数:外部传参到Shell脚本;(3)免密登录服务器:容器内生成公钥和私钥;(4)打包服务:通过登录服务器,使用Maven打包;(5)启动服务:登录服务器,执行任务,添加守护进程文件:>nohup.out 2>&1。原创 2022-05-11 09:57:40 · 186 阅读 · 0 评论 -
Chapter30:集成YAPI接口文档管理平台
前后端分离的时代,多了一层前后端接口对接,如图1.1所示。这里讨论后端的变化,后端完成接口开发和自测后,需要将接口同步给前端,进行联调、联测,而,接口文档的承载有三种方式:(1)手写接口文档(Word或PDF,给第三方使用);(2)自动化接口文档(Swagger、YAPI、OpenAPI,团队内部使用);(3)某网页(团队内部或第三方使用)。本章讲解团队内部接口采集工具YAPI的应用。与Swagger相比,YAPI独立部署,与后台服务解耦,即无需占用后台服务内存资源(JVM),并且,同步接原创 2022-03-07 12:08:52 · 361 阅读 · 0 评论 -
Chapter29:集成Prometheus配置Grafana展示指标
Prometheus作为可靠的数据采集工具,常用于后台系统的流量、CPU利用率、时延等指标数据采集。Grafana作为指标展示工具,常用于后台系统的流量、CPU利用率、时延等指标数据展示,并可针对不同的指标配置告警。本文以SpringBoot后台系统为例,讲解Prometheus采集后台接口相关数据、Grafana配置并展示相关数据。原创 2022-02-22 18:16:45 · 433 阅读 · 0 评论 -
Chapter28:运行监控Druid
本章讲解:- 开启Druid监控页面:前缀datasource.druid,开启页面拦截;- 配置数据源连接池参数:在各自数据源Bean中设置参数,如最大连接数、最大等待时间等参数;- 去除监控页面底部广告;- 监控内容有:数据源、SQL、URI。原创 2022-01-24 12:15:00 · 338 阅读 · 0 评论 -
Chapter27:集成Kafka
Kafka典型的生产者和消费者模型。与RabbitMQ是同一类工具。为什么使用Kafka?为什么不。官网:[https://kafka.apache.org/](https://kafka.apache.org/)特点:|序号| 特点 |描述|--|--|:--| 1 | 高吞吐量 |网络吞吐量限制的情况下消息传输低至2毫秒| 2 | 可伸缩 |集群部署,弹性伸缩、存储| 3 | 持久化 |保证数据安全存储(分布式、容错集群)| 4 | 高可用 |在可用区域或者不同区域的集群上高效扩展集原创 2022-01-20 20:13:14 · 1543 阅读 · 0 评论 -
Chapter26:数据注解及参数校验注解
SpringBoot中常用的传参方式有:form-data、URL参数、请求体等。参数校验一般为方法级别,参数校验常用的有基础类型、实体属性校验。校验有显式和隐式校验:通过BindingResult。- 显式校验:直接通过hasErrors判断并返回;- 隐式校验:统一异常处理中判断,统一返回。原创 2022-01-15 12:06:11 · 302 阅读 · 0 评论 -
Chapter25:集成MongoDB实现增改查删CURD
MongoDB是文档数据库,采用易用和可伸缩设计理念。记录即文档,数据格式:属性名:值,键值形式存储,键对应多种格式的数据值,如数组、数组文档。优点:多种编程语言中均可映射文档数据类型;嵌入文档和数据减少了数据连接的开销;动态schema支持多态.原创 2022-01-07 15:48:09 · 664 阅读 · 0 评论 -
Chapter24:高可用组件resilience4j实现熔断、降级、限流
分布式系统中,服务间调用会出现失败、超时等异常情况。为保证系统正常运行和稳定(避免级联故障,提高系统的高可用),熔断机制是一种有效的解决方案。当分布式系统中某些服务不可用或者响应时间过长(超过某个阈值:忍耐),对服务进行熔断处理(熔断该节点,处理降级,返回预设的提示信息,保证调用方及时获取响应)。常用的熔断组件:Hystrix已进入维护阶段,SpringCloud2020.0.3版本使用了新的熔断组件:Resilience4j。本章围绕Resilience4j实现熔断、限流测试。原创 2021-12-28 19:15:20 · 1129 阅读 · 0 评论 -
Chapter23:openfeign服务间调用
服务间调用:OpenFeign、Eureka、loadbalancer。原创 2021-12-22 20:30:52 · 281 阅读 · 0 评论 -
Chapter22:单体服务强制从Eureka下线
说明:项目地址在文章最后本章代码所在分支为chapter22代码规则:每章一个分支后一章代码继承前一章代码1 简介Chapter20讲解了单体服务如何注册到Eureka服务端,本章讲解如何通过接口强制将单体服务永久从Eureka服务端下线。永久下线,即将单体服务断开与Eureka服务端的连接,不向Eureka发送(心跳:续约)信息。基于com.netflix.discovery.EurekaClient实现强制下线,直接注销服务,断开与Eureka服务端的连接,并且不可手动恢复,暴力下线原创 2021-11-22 19:34:32 · 705 阅读 · 0 评论 -
Chapter21:参数统一校验
1 简介参数校验,是功能实现的第一步。参数如果非法,无法获取正确数据。此时,后台系统应该返回给调用方可读的提示:如,参数非法、某参数为0、某参数为空等。后台系统设计时,通用的参数校验是在拦截的请求逻辑中进行,即,当前请求某个接口时,通过过滤链,拦截本次请求,校验参数是否合法,如空数据(null)等,而不是直接进入接口的具体逻辑。其他需要细粒度的数据校验,可以在接口逻辑中进行处理。2 请求拦截:参数校验拦截请求,进行数据校验,本章校验请求体是否为空。2.1 参数校验拦截器package co原创 2021-10-25 09:50:56 · 192 阅读 · 0 评论 -
Chapter20(下):服务注册与发现之注册中心Eureka-Client
注册到Eureka客户端服务每5分钟发送一次心跳原创 2021-10-19 19:18:27 · 108 阅读 · 0 评论 -
Chapter20(上):服务注册与发现之注册中心Eureka-Server
1 简介Eureka提供服务注册与服务通信的功能。架构如图1.1所示。当然,有条件的可以使用Nacos。图1.1 Eureka架构由图1.1可知,所有服务向Eureka(注册中心)注册,在同一个Eureka集群注册过的服务,服务之间通信可以使用Feign调用方式实现相互通信。2 SpringCloud与SpringBoot版本对应关系3 Eureka注册中心依赖配置Eureka Template项目使用的SpringBoot版本为2.4.5,因此,SpringCloud选择:2020.0.3原创 2021-10-13 20:19:52 · 107 阅读 · 0 评论 -
Chapter19:初始化Bean的三种方式
说明:项目地址在文章最后本章代码所在分支为chapter19代码规则:每章一个分支后一章代码继承前一章代码1 简介初始化Bean是在实例化Bean之后,将Bean刷新到Map<String, BeanDefinition>之前的操作。Bean生命周期概况如图1.1所示:图1.1 Bean生命周期概况初始化Bean有三种方式:(1)@PostConstruct(2)InitializingBean的afterPropertiesSet方法(3)自定义initMetho原创 2021-10-05 10:40:19 · 566 阅读 · 0 评论 -
Chapter18:定时任务Quartz
1 简介2 依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId></dependency>3 数据源配置3.1 创建数据库及表3.2 启动配置spring: quartz: job-store-type: jdbc initial-原创 2021-09-28 09:50:57 · 96 阅读 · 0 评论 -
Chapter17:请求合作方接口RestTemplate
说明:项目地址在文章最后本章代码所在分支为chapter17代码规则:每章一个分支后一章代码继承前一章代码1 简介2 配置package com.monkey.tutorial.common.config.rest;import org.apache.http.client.HttpClient;import org.apache.http.config.Registry;import org.apache.http.config.RegistryBuilder;import o原创 2021-09-20 19:25:21 · 95 阅读 · 0 评论 -
Chapter16(下):Websocket之接口与即时对话
说明:项目地址在文章最后本章代码所在分支为chapter16代码规则:每章一个分支后一章代码继承前一章代码1 简介2 接口2.1 接口列表2.2 Controllerpackage com.monkey.tutorial.api;import com.monkey.tutorial.common.config.websocket.WebSocketServerConfig;import com.monkey.tutorial.common.response.Response;i原创 2021-09-13 19:21:13 · 201 阅读 · 0 评论 -
Chapter16(上):Websocket之配置
说明:项目地址在文章最后本章代码所在分支为chapter16代码规则:每章一个分支后一章代码继承前一章代码1 简介2 依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId></dependency><dependency> &l原创 2021-09-06 15:33:05 · 128 阅读 · 0 评论 -
Chapter15:权限管理之Oauth2资源授权
说明:项目地址在文章最后本章代码所在分支为chapter15代码规则:每章一个分支后一章代码继承前一章代码1 简介2 授权服务器配置package com.monkey.tutorial.modules.oauth2.server;import com.monkey.tutorial.modules.authentication.mycustom.MyAuthenticationManager;import com.monkey.tutorial.modules.authentica原创 2021-08-30 19:41:41 · 326 阅读 · 0 评论 -
Chapter14(下):权限管理之SpringSecurity接口鉴权
1 简介本章的权限控制采用持久化(存储在MySQL中的数据)方式进行授权。原创 2021-08-23 20:06:54 · 132 阅读 · 0 评论 -
Chapter14(中):权限管理之SpringSecurity自定义登录授权
说明:项目地址在文章最后本章代码所在分支为chapter14代码规则:每章一个分支后一章代码继承前一章代码原创 2021-08-16 00:35:09 · 315 阅读 · 0 评论 -
Chapter14(上):权限管理之数据表设计
数据表系统用户表CREATE TABLE IF NOT EXISTS `db_monkey_run`.`tb_sys_user` ( `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键', `user_id` VARCHAR(45) NULL COMMENT '系统用户id', `username` VARCHAR(45) NULL COMMENT '用户姓名', `password` VARCHAR(255) NOT NULL COMMENT原创 2021-08-14 21:21:13 · 308 阅读 · 0 评论 -
Chapter13(下):Excel处理-原生POI读写
说明:项目地址在文章最后本章代码所在分支为chapter13代码规则:每章一个分支后一章代码继承前一章代码1 简介写入数据到Excel,并通过链接下载Excel。2 启动resources配置spring: resources: static-locations: classpath:/resources/3 路径拦截配置package com.monkey.tutorial.common.config.interceptor;import com.monkey.t原创 2021-08-03 22:52:49 · 109 阅读 · 0 评论 -
Chapter13(上):Excel处理-原生POI读写
说明:项目地址在文章最后本章代码所在分支为chapter13代码规则:每章一个分支后一章代码继承前一章代码1 简介27 小结本章讲解:SpringBoot缓存:开启缓存@EnableCaching配置添加缓存@Cacheable更新缓存@CachePut删除缓存@CacheEvictGuava缓存读取8 项目地址项目地址:https://gitee.com/xdq101/tutorial/tree/chapter13/...原创 2021-08-01 21:41:31 · 119 阅读 · 0 评论 -
Chapter12:缓存之@Cache和Guava缓存Cache
说明:项目地址在文章最后本章代码所在分支为chapter12代码规则:每章一个分支后一章代码继承前一章代码1 简介1.1 缓存SpringBoot(后台系统)中的缓存有两种:一种为Redis缓存(中间件),另一种为JVM自身缓存,如Map、Guava Cache、Caffeine缓存。其中,中间件缓存Redis具有持久化功能(非易失性)与JVM独立存在,数据读写不占用JVM资源,而Java自身缓存,速度比Redis更快,但是,数据不具备可持久性,每次更新服务数据会被刷新。依据自身业务原创 2021-07-24 20:33:16 · 345 阅读 · 0 评论 -
Chapter11(下):多数据源-应用
说明:项目地址在文章最后本章代码所在分支为chapter11代码规则:每章一个分支后一章代码继承前一章代码1 新建数据库新建数据库:db_monkey_fly和数据表:tb_order,模拟不同集群的数据库。-- 创建数据库CREATE DATABASE db_monkey_fly CHARACTER SET utf8 COLLATE utf8_general_ci;CREATE TABLE IF NOT EXISTS `db_monkey_fly`.`tb_order` ( `原创 2021-07-14 22:34:48 · 126 阅读 · 0 评论 -
Chapter11(上):多数据源-配置
说明:项目地址在文章最后本章代码所在分支为chapter11代码规则:每章一个分支后一章代码继承前一章代码1 数据源spring: devtools: restart: enabled: true datasource: database1: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/db_monkey_run?useUn原创 2021-07-11 23:31:34 · 99 阅读 · 0 评论 -
Chapter10:接口权限管理-Token认证
说明:项目地址在文章最后本章代码所在分支为chapter10代码规则:每章一个分支后一章代码继承前一章代码1 接口权限2 配置2.1 路由拦截拦截所有接口,授权/**/api/v1/**接口,即保证前面8章所有接口不用token即可测试。路由拦截使用的实例在注入Bean之前,因此需要先将请求拦截注入Bean,方可在请求拦截中正常注入Bean。package com.monkey.tutorial.common.config;import org.springframework.原创 2021-07-03 11:39:58 · 1293 阅读 · 0 评论 -
Chapter9(下):集成Redis
1 Redis2 依赖与配置2.1 依赖<!--Redis--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency>2.2 连接配置spring: redis: database: 0 ho原创 2021-06-26 20:45:35 · 97 阅读 · 0 评论 -
Chapter9(上):Windows部署Redis
1 下载服务端https://github.com/MicrosoftArchive/redis/releases或者https://download.csdn.net/download/Xin_101/196985782 配置2.1 配置密码找到文件:redis.windows-service.conf,添加如下:requirepass 1234562 部署服务端进入Redis文件夹redis-server --service-install redis.windows-serv原创 2021-06-26 20:10:47 · 118 阅读 · 0 评论 -
Chapter8(下):RabbitMQ部署与集成
12 依赖<!--RabbitMQ--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId></dependency>3 配置3.1 application-dev.ymlspring: rabbitmq: host: localho原创 2021-06-14 16:23:02 · 118 阅读 · 0 评论 -
Chapter8(上):RabbitMQ部署与集成
1 环境Windows102 安装Erlang2.1 下载https://www.erlang.org/downloads图2.1 Erlang资源位置2.2 安装图2.2 安装Erlang2.3 配置环境变量添加系统变量图2.3 添加Erlang环境变量编辑Path系统变量图2.4 编辑Path变量添加Erlang的变量。图2.4 添加Erlang Path变量2.4 验证Erlang打开命令行,输入erl,出现Eshell V12.0版原创 2021-06-14 16:18:40 · 133 阅读 · 0 评论 -
Chapter7:异步日志存储Log4j2
12 依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <!-- 使用了log4j2,就要将spring-boot-starter-logging排除 --> <gro原创 2021-06-12 11:05:03 · 270 阅读 · 0 评论 -
Chapter6:集成MySQL和增删改查
1 集成MySQL2 依赖3 Mapper4 DAO(Interface)5 Service6 接口原创 2021-06-05 10:37:24 · 114 阅读 · 0 评论 -
Chapter5:全局统一响应
说明:项目地址在文章最后本章代码所在分支为chapter5代码规则:每章一个分支后一章代码继承前一章代码1 全局统一响应全局统一响应即所有的接口返回数据结构是相同的,保证接口响应数据一致性,无论接口返回正常或异常数据,前端都可以通过固定的字段如status判断接口返回的信息是否正常,这些数据包括包括固定的数据字段和自定的数据字段,全局统一响应字段如下表所示。序号字段(属性)描述1code返回状态码2msg返回提示信息3status返回状态信息,原创 2021-05-30 10:19:04 · 135 阅读 · 0 评论 -
Chapter4(下):异常及异常处理
1 异常处理异常处理采用全局异常处理方式。2 Test2.1 API2.2 响应2.3 日志原创 2021-05-22 15:06:06 · 124 阅读 · 0 评论 -
Chapter4(上):异常及异常处理
1 异常2 自定义异常2.1 业务异常2.2 第三方系统异常3 系统异常4 异常处理原创 2021-05-21 23:06:50 · 495 阅读 · 0 评论 -
Chapter3:全局日志拦截
pom依赖<!--AOP--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId></dependency>日志拦截注解@Aspect@Ponintcut@Before@AfterReturning日志拦截package com.monkey.原创 2021-05-15 10:40:26 · 171 阅读 · 0 评论 -
Chapter2(下):接口开发-传参数
说明:项目地址在文章最后本章代码所在分支为chapter2代码规则:每章一个分支后一章代码继承前一章代码1 传参方式常用的接口传参方式有4种:URL路径传参form-data表单传参Header请求头传参Body请求体传参不同的传参方式,在SpringBoot中有不同的处理方式,SpringBoot中具有万能的注解,没有一个注解不能解决的事情,如果有,那就自己写一个注解。处理传参SpringBoot提供了不同的注解,如@PathVariable、@PathParam和@Requ原创 2021-05-09 15:58:16 · 203 阅读 · 0 评论 -
Chapter2(上):接口开发-无参数
1 接口接口即对外提供资源(数据)的API,通过Http协议调用,基于互联网,因此,接口开发即是互联网应用的开发。与离线的API不同,基于互联网的API是远程调用。常用API接口请求类型有:GET(查)、POST(增)、PUT(改)、DELETE(删),项目开发中中的增、删、改、查大多只使用了GET和POST,其中,GET的传参是在URL中,POST的传参是在Body体中,传输的数据量更大。2 接口注解基于SpringBoot的接口开发中,常用的注解有@RestController、@Reques原创 2021-05-09 13:14:53 · 313 阅读 · 0 评论