springboot

  • 整合jdbc
  • 整合Druid数据源
  • 整合mybatis框架
  • springSecurity
  • 记住我及首页定制
  • shiro
  • shiro实现登录拦截
  • shrio实现用户认证
  • shiro整合mybatis
  • 开源项目分析
  • swagger
  • swagger简介
  • springboot集成swagger
  • 配置swagger信息
  • swagger 配置扫描接口
  • 分组及接口注释
  • 任务
  • 异步任务
  • 邮件任务
  • 定时执行任务
  • 分布式系统理论Dubbo+Zookeeper
  • zookeeper安装
  • dubbo-admin安装测试


整合jdbc

对于数据访问层,无论是sql还是nosql,springboot底层都是采用spring DATA的方式进行处理

1.连接mysql

狂神springboot资源 狂神说springboot笔记_mysql


2.编写配置文件application.yml

注意配置要正确!假如时区报错需要增加时区配置

狂神springboot资源 狂神说springboot笔记_spring_02

3.测试

狂神springboot资源 狂神说springboot笔记_mysql_03

狂神springboot资源 狂神说springboot笔记_狂神springboot资源_04

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>//导入此依赖才可以使用RestController注解

狂神springboot资源 狂神说springboot笔记_mysql_05


增删改类似,可以自己尝试写一下

整合Druid数据源

Druid是 阿里巴巴开源平台上的一个数据连接池实现,结合c3p0,BDCP等DB池的优点,同时加入了日志监控,可以很好的监控DB池的连接和sql的执行情况,天生就是针对监控而生的DB连接池。
导入依赖

<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.5</version>
</dependency>

配置

狂神springboot资源 狂神说springboot笔记_spring_06


druid专有配置

spring:
  datasource:
    username: root
    password: 12345
    url: jdbc:mysql://localhost:3306/user?useUnicode=true&characterEncoding=utf-8
    driver-class-name: com.mysql.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
      # 初始化连接池个数
    initialSize: 5
      # 最小连接池个数——》已经不再使用,配置了也没效果
    minIdle: 2
      # 最大连接池个数
    maxActive: 20
      # 配置获取连接等待超时的时间,单位毫秒,缺省启用公平锁,并发效率会有所下降
    maxWait: 60000
      # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
    timeBetweenEvictionRunsMillis: 60000
      # 配置一个连接在池中最小生存的时间,单位是毫秒
    minEvictableIdleTimeMillis: 300000
      # 用来检测连接是否有效的sql,要求是一个查询语句。
      # 如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用
    validationQuery: SELECT 1 FROM DUAL
      # 建议配置为true,不影响性能,并且保证安全性。
      # 申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
    testWhileIdle: true
      # 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
    testOnBorrow: false
      # 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
    testOnReturn: false
      # 打开PSCache,并且指定每个连接上PSCache的大小
    poolPreparedStatements: true
    maxPoolPreparedStatementPerConnectionSize: 20
      # 通过别名的方式配置扩展插件,多个英文逗号分隔,常用的插件有:
      # 监控统计用的filter:stat
      # 日志用的filter:log4j
      # 防御sql注入的filter:wall
    filters: stat,wall,log4j
      # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
      # 合并多个DruidDataSource的监控数据
    useGlobalDataSourceStat: true

新建配置类,绑定配置文件

狂神springboot资源 狂神说springboot笔记_java_07

狂神springboot资源 狂神说springboot笔记_mysql_08


启动

导入log4j依赖,否则无法进入此页面

狂神springboot资源 狂神说springboot笔记_java_09


执行一次查询

狂神springboot资源 狂神说springboot笔记_spring_10


后台显示信息

狂神springboot资源 狂神说springboot笔记_狂神springboot资源_11


因为springboot内置了servlet容器,所以没有web.xml,替代方法:ServletRegistrationBean配置过滤器

狂神springboot资源 狂神说springboot笔记_java_12

整合mybatis框架

整合包

mybatis-spring-boot-starter

新建项目

狂神springboot资源 狂神说springboot笔记_spring_13


狂神springboot资源 狂神说springboot笔记_狂神springboot资源_14


导入依赖

狂神springboot资源 狂神说springboot笔记_java_15


配置文件

狂神springboot资源 狂神说springboot笔记_狂神springboot资源_16


测试

狂神springboot资源 狂神说springboot笔记_mysql_17


整合mybatis

狂神springboot资源 狂神说springboot笔记_java_18


写实体类与接口

狂神springboot资源 狂神说springboot笔记_狂神springboot资源_19


狂神springboot资源 狂神说springboot笔记_狂神springboot资源_20


.xml文件实现接口

狂神springboot资源 狂神说springboot笔记_java_21


controller调用

狂神springboot资源 狂神说springboot笔记_java_22

springSecurity

过滤器,拦截器
做网站设计之初考虑安全问题
shiro,springSecurity,认真,授权
1.功能权限
2.访问权限
3.菜单权限
4.过滤器,拦截器大量原生代码,冗余
新建项目导入依赖

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

关闭模板引擎缓存,不然每次要重启

狂神springboot资源 狂神说springboot笔记_java_23


`导入静态资源:gitee搜索狂神springboot

编写controller

狂神springboot资源 狂神说springboot笔记_spring_24


测试

狂神springboot资源 狂神说springboot笔记_java_25


使用security只需要导入

spring-boot-starter-security模块

记住一下类:

WebSecurityConfigurerAdapter:自定义security策略

AuthenticationManagerbuilder:自定义认证策略

@EnableWebSecurity:开启WebSecurity模式

两个主要目标

认证

授权

官方文档
https://docs.spring.io/spring-security/site/docs/5.4.5/reference/html5/#getting

狂神springboot资源 狂神说springboot笔记_mysql_26


下载源码可以看到注释

狂神springboot资源 狂神说springboot笔记_狂神springboot资源_27

狂神springboot资源 狂神说springboot笔记_java_28

没有权限则进入登入页面

狂神springboot资源 狂神说springboot笔记_java_29


认证

狂神springboot资源 狂神说springboot笔记_mysql_30


登入成功

狂神springboot资源 狂神说springboot笔记_spring_31


注销模板网站:https://semantic-ui.com/elements/icon.html

狂神springboot资源 狂神说springboot笔记_狂神springboot资源_32

狂神springboot资源 狂神说springboot笔记_java_33

狂神springboot资源 狂神说springboot笔记_狂神springboot资源_34

狂神springboot资源 狂神说springboot笔记_狂神springboot资源_35

狂神springboot资源 狂神说springboot笔记_mysql_36

导入security-thymeleaf整合包

<!-- https://mvnrepository.com/artifact/org.thymeleaf.extras/thymeleaf-extras-springsecurity4 -->
<dependency>
    <groupId>org.thymeleaf.extras</groupId>
    <artifactId>thymeleaf-extras-springsecurity4</artifactId>
    <version>3.0.4.RELEASE</version>
</dependency>

导入命名空间

xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4

狂神springboot资源 狂神说springboot笔记_狂神springboot资源_37


springboot版本降级才能生效

菜单根据用户角色显示

狂神springboot资源 狂神说springboot笔记_java_38

记住我及首页定制

狂神springboot资源 狂神说springboot笔记_java_39


狂神springboot资源 狂神说springboot笔记_spring_40


关闭浏览器重新进入,已经登录

狂神springboot资源 狂神说springboot笔记_spring_41


cookie默认保存两周

狂神springboot资源 狂神说springboot笔记_mysql_42


清楚cookie

狂神springboot资源 狂神说springboot笔记_spring_43

shiro

下载

狂神springboot资源 狂神说springboot笔记_mysql_44


新建项目

导入依赖

狂神springboot资源 狂神说springboot笔记_spring_45


依赖位置

狂神springboot资源 狂神说springboot笔记_java_46


自己该版本号

导入log4j.properties与shiro.ini

狂神springboot资源 狂神说springboot笔记_mysql_47

狂神springboot资源 狂神说springboot笔记_java_48

导入Quickstart.java

狂神springboot资源 狂神说springboot笔记_spring_49


删除错误的import,

alt+enter重新导入包

运行,出现日志

尝试读QuickStart的方法

subject 用户
SecurityManager 管理所有用户
Realm 连接数据
导入依赖

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-spring-boot-starter</artifactId>
            <version>1.7.1</version>
        </dependency>

狂神springboot资源 狂神说springboot笔记_mysql_50


狂神springboot资源 狂神说springboot笔记_java_51

shiro实现登录拦截

拦截添加页与更新页

狂神springboot资源 狂神说springboot笔记_spring_52


狂神springboot资源 狂神说springboot笔记_java_53

shrio实现用户认证

狂神springboot资源 狂神说springboot笔记_spring_54

狂神springboot资源 狂神说springboot笔记_狂神springboot资源_55

狂神springboot资源 狂神说springboot笔记_狂神springboot资源_56

shiro整合mybatis

导入依赖

<dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.23</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.5</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/log4j/log4j -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.4</version>
        </dependency>

开源项目分析

1.看配置
2.看.class
3.创建数据库

swagger

学习目标
1.了解swagger的作用和目的
2.了解前后端分离
3.在springboot中集成swagger

swagger简介

前后端分离
vue+springboot
后端时代
前端只用管理静态页面;html给后端。模板引擎jsp,后端主力

前后端分离时代:
后端:控制层,服务层,数据访问层
前端:前端控制层,视图层

伪造后端数据json已经存在了,不需要后端,前端工程依旧能抛起来
前后端交互通过api访问
前后端相对独立,松耦合;
前后端甚至可以部署在不同的服务器上

出现一个问题:
前端后端联调,前后端人员无法:即使协商,尽早解决这个问题
解决方案
首先自定一个提纲,实时更新,实行更新最新的api,降低集成的风险
早些年:指定word计划文档
前后端分离: 前端测试后端接口postman
后端提供接口需要实时更新最新的消息!

swagger
1.号称世界上最新的api框架
2.restful api文档在线自动生成工具=api文档与api定义同步更新
3.直接运行,可以在线测试api接口
4.支持多种语言java,php

官网
在项目中使用swagger,需要spring-box
1.swagger2
2.swaggerui

springboot集成swagger

狂神springboot资源 狂神说springboot笔记_mysql_57

1.新建springboot-web项目
2.导入依赖

<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
</dependency>

<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.10.5</version>
</dependency>

3.编写hello world

狂神springboot资源 狂神说springboot笔记_spring_58

4.配置swagger>>>>config

狂神springboot资源 狂神说springboot笔记_spring_59


5.测试

不成功降依赖swagger版本2.9.2版本http://localhost:8080/swagger-ui.html

狂神springboot资源 狂神说springboot笔记_mysql_60

配置swagger信息

swagger的bean实例docket

狂神springboot资源 狂神说springboot笔记_java_61


狂神springboot资源 狂神说springboot笔记_java_62

swagger 配置扫描接口

Docket.select()

狂神springboot资源 狂神说springboot笔记_mysql_63

狂神springboot资源 狂神说springboot笔记_mysql_64


我们只希望swagger在生产环境中使用,在发布环境中不使用

1.判断是不是生产环境flag=false

2.注入enable(flag)添加配置文件

狂神springboot资源 狂神说springboot笔记_java_65


狂神springboot资源 狂神说springboot笔记_java_66


狂神springboot资源 狂神说springboot笔记_狂神springboot资源_67

生产环境访问不到

狂神springboot资源 狂神说springboot笔记_狂神springboot资源_68

分组及接口注释

配置api文档的分组

狂神springboot资源 狂神说springboot笔记_spring_69

配置多个分组

狂神springboot资源 狂神说springboot笔记_spring_70

狂神springboot资源 狂神说springboot笔记_java_71


实体类配置

狂神springboot资源 狂神说springboot笔记_spring_72

狂神springboot资源 狂神说springboot笔记_mysql_73


狂神springboot资源 狂神说springboot笔记_java_74


狂神springboot资源 狂神说springboot笔记_狂神springboot资源_75


方法(接口上)和参数上可以加注释

狂神springboot资源 狂神说springboot笔记_java_76

狂神springboot资源 狂神说springboot笔记_java_77


代码错误

狂神springboot资源 狂神说springboot笔记_mysql_78

测试出现错误

狂神springboot资源 狂神说springboot笔记_spring_79


1.我们可以通过swagge给一些难以理解的属性接口,增加新的注释信息

2.接口文档实时更新

3.可以在线测试

几乎所有的大公司都在使用它

注意点:在正式发布的时候,关闭swagger,处于安全考虑,节省内存

任务

异步任务
定时任务
邮件任务

异步任务

狂神springboot资源 狂神说springboot笔记_java_80

狂神springboot资源 狂神说springboot笔记_mysql_81


等待三秒进入页面

狂神springboot资源 狂神说springboot笔记_spring_82

狂神springboot资源 狂神说springboot笔记_java_83

狂神springboot资源 狂神说springboot笔记_mysql_84

现在页面秒刷新,不用在等待三秒

邮件任务

导入依赖,实际上导入javax.mail

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>

狂神springboot资源 狂神说springboot笔记_spring_85


获得第三方登入密码

狂神springboot资源 狂神说springboot笔记_java_86


狂神springboot资源 狂神说springboot笔记_狂神springboot资源_87

狂神springboot资源 狂神说springboot笔记_spring_88

收到自己给自己发送的邮件

狂神springboot资源 狂神说springboot笔记_spring_89

狂神springboot资源 狂神说springboot笔记_mysql_90


将以上封装为方法,工具类

狂神springboot资源 狂神说springboot笔记_狂神springboot资源_91

为什么给别人发送邮件失败

狂神springboot资源 狂神说springboot笔记_mysql_92

定时执行任务

TaskScheduler任务调度者

TaskExecutor 任务执行者

//开启定时功能的注解

@EnableScheduling

@Scheduled//什么时候执行

Cron表达式

狂神springboot资源 狂神说springboot笔记_mysql_93

分布式系统理论Dubbo+Zookeeper

dubbo是一款高性能的轻量级的开源javaRPC框架,他提供三大核心能力:面向接口的远程方法调用,智能容错,负载均衡,以及服务自动注册和发现

zookeeper安装

下载地址:https://zookeeper.apache.org/releases.html
解压
以管理员的身份运行

狂神springboot资源 狂神说springboot笔记_狂神springboot资源_94

闪退,打开文件查看配置

加入pause

狂神springboot资源 狂神说springboot笔记_狂神springboot资源_95


运行时暂停

狂神springboot资源 狂神说springboot笔记_java_96


端口号:

狂神springboot资源 狂神说springboot笔记_java_97


狂神springboot资源 狂神说springboot笔记_狂神springboot资源_98


与linux命令相似

狂神springboot资源 狂神说springboot笔记_spring_99

dubbo-admin安装测试