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
2.编写配置文件application.yml
注意配置要正确!假如时区报错需要增加时区配置
3.测试
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>//导入此依赖才可以使用RestController注解
增删改类似,可以自己尝试写一下
整合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>
配置
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
新建配置类,绑定配置文件
启动
导入log4j依赖,否则无法进入此页面
执行一次查询
后台显示信息
因为springboot内置了servlet容器,所以没有web.xml,替代方法:ServletRegistrationBean配置过滤器
整合mybatis框架
整合包
mybatis-spring-boot-starter
新建项目
导入依赖
配置文件
测试
整合mybatis
写实体类与接口
.xml文件实现接口
controller调用
springSecurity
过滤器,拦截器
做网站设计之初考虑安全问题
shiro,springSecurity,认真,授权
1.功能权限
2.访问权限
3.菜单权限
4.过滤器,拦截器大量原生代码,冗余
新建项目导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
关闭模板引擎缓存,不然每次要重启
`导入静态资源:gitee搜索狂神springboot
编写controller
测试
使用security只需要导入
spring-boot-starter-security模块
记住一下类:
WebSecurityConfigurerAdapter:自定义security策略
AuthenticationManagerbuilder:自定义认证策略
@EnableWebSecurity:开启WebSecurity模式
两个主要目标
认证
授权
官方文档
https://docs.spring.io/spring-security/site/docs/5.4.5/reference/html5/#getting
下载源码可以看到注释
没有权限则进入登入页面
认证
登入成功
注销模板网站:https://semantic-ui.com/elements/icon.html
导入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版本降级才能生效
菜单根据用户角色显示
记住我及首页定制
关闭浏览器重新进入,已经登录
cookie默认保存两周
清楚cookie
shiro
下载
新建项目
导入依赖
依赖位置
自己该版本号
导入log4j.properties与shiro.ini
导入Quickstart.java
删除错误的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>
shiro实现登录拦截
拦截添加页与更新页
shrio实现用户认证
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
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
4.配置swagger>>>>config
5.测试
不成功降依赖swagger版本2.9.2版本http://localhost:8080/swagger-ui.html
配置swagger信息
swagger的bean实例docket
swagger 配置扫描接口
Docket.select()
我们只希望swagger在生产环境中使用,在发布环境中不使用
1.判断是不是生产环境flag=false
2.注入enable(flag)添加配置文件
生产环境访问不到
分组及接口注释
配置api文档的分组
配置多个分组
实体类配置
方法(接口上)和参数上可以加注释
代码错误
测试出现错误
1.我们可以通过swagge给一些难以理解的属性接口,增加新的注释信息
2.接口文档实时更新
3.可以在线测试
几乎所有的大公司都在使用它
注意点:在正式发布的时候,关闭swagger,处于安全考虑,节省内存
任务
异步任务
定时任务
邮件任务
异步任务
等待三秒进入页面
现在页面秒刷新,不用在等待三秒
邮件任务
导入依赖,实际上导入javax.mail
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
获得第三方登入密码
收到自己给自己发送的邮件
将以上封装为方法,工具类
为什么给别人发送邮件失败
定时执行任务
TaskScheduler任务调度者
TaskExecutor 任务执行者
//开启定时功能的注解
@EnableScheduling
@Scheduled//什么时候执行
Cron表达式
分布式系统理论Dubbo+Zookeeper
dubbo是一款高性能的轻量级的开源javaRPC框架,他提供三大核心能力:面向接口的远程方法调用,智能容错,负载均衡,以及服务自动注册和发现
zookeeper安装
下载地址:https://zookeeper.apache.org/releases.html
解压
以管理员的身份运行
闪退,打开文件查看配置
加入pause
运行时暂停
端口号:
与linux命令相似
dubbo-admin安装测试