java待整合
概念
业务层将服务类设计为接口和实现类两层的目的,这样可以对调用者隐藏接口的实现细节。
微服务
- 相近业务作为单个服务开发,使用单独的后端,包括数据库等。好处是低耦合度,便于扩展等
- 在开发单个模块的过程中,将服务的请求属性注册到Nacos中,方便开发、调整请求属性等操作,应用日志,并且配置日志时支持ELK等分布式日志处理工具,从而使得日志追溯时可以追溯全部微服务日志
服务注册管理-Nacos
作用:注册项目的各个服务,将服务的路径、端口、方法名、参数等细节可视化,方便调用和管理服务
搭建Nacos环境-》引入依赖-》配置Nacos相关参数-》对启动类注解使用Nacos注册服务
搭建Nacos集群
防止单个服务器故障时Nacos不可用
nacos持久化-》配置相关节点参数
负载均衡
将相同的模块布置到多个服务器,请求先到达Ribbon组件,再由组件根据已配置的算法选择处理请求的服务器
安全防护
通过sentinel实现限流、熔断、服务降级等功能
系统架构
配置项目名
spring:
application:
name: nine
整体架构
登录
前端发送用户名、密码、验证码到后端
后端验证验证码
后端验证用户信息
后端创建token:用token的基础密码签名,与UUID绑定,设置token有效期
后端返回token给前端
前端携带token访问需要权限验证的路径
后端通过过滤器对登录进行登录验证
Spring Security安全组件
引入依赖
<!-- Security组件--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.1</version> </dependency>
在application.yml中配置token基础数据
# token配置,此处配置为自定义变量,非官方配置
token:
# 自定义标识
header: Authorization
# 签名密钥
secret: nine123
# 有效期30分钟,单位在代码中确定,也可以是30天
expireTime: 30
新建配置类
- 配置类使用注解,注解声明开启方法级安全,允许在控制器等类上使用相应注解进行安全验证,注解中的参数代表允许使用相关注解
@EnableGlobalMethodSecurity(prePostEnabled = true,securedEnabled = true)
- 配置类继承
WebSecurityConfigurerAdapter
切面编程
定义切面、切点以及通知方法
导入依赖
普通切面编程
注解
- @Aspect:此类为切面类
- @Comment:纳入spring组件管理
通过@Pointcut定义切点,注解中的参数代表此切点指向的方法,当这些方法执行时,这个切点的相关通知方法被调用,此点锚定所有需要被定义为切点的方法,类似代理
@Before等注解的参数方法名为上述的切点方法名
全局切面编程
对类使用@RestControllerAdvice注解之后,此类的切面编程就是面对全局代码的,在类中的通知方法上使用相应注解,当全局代码某个运行状态符合通知方法上的注解的条件之后,通知方法即可运行
自定义切面编程
通过如下方式定义注解
@Target(...)
@Retention(...)
public @interface MyAnnotation{
...
}
定义切面类指向注解,则当应用注解时会调用切面类中定义的通知方法
拦截器
创建一个类继承HandlerInterceptorAdapter定义拦截器
创建一个配置类实现WebMvcConfigure添加拦截器并指定需要检查的请求
过滤器
缺点:做不到通过IOC机制获取其他bean,过滤请求时使用,但是如果需要再请求前后做复杂动作时最好使用拦截器
过滤器的生命周期
- springboot项目启动时会创建该项目定义的所有过滤器并执行其init()方法
- 当符合条件的请求到达时会执行doFilter()方法
- springboot项目停止时会调用destroy()方法
应用
- 继承Filter类重写生命周期方法
- 在使用@Configuration的配置类中添加此过滤器,并指定会调用此过滤器的请求类型
操作
事务
@Transactional注解
事务粒度:也就是注解使用在方法上还是类上,这个由具体情况决定
注解中的参数
- roll-back:指定回滚异常类型
- isolution:隔离级别
- timeout:事务超时限制
- propagation:事务传播机制,也就是嵌套事务之间相互调用的方式
隔离类型解释:
此外还有与读相关的事务配置,主要是在写过程中,如果有其他事务对正在写还未提交的数据进行读取,就会出现误读的情况,这些情况主要分为如下三类:脏读、重复读和幻读
- 脏读:一个事务修改后被读取,但是读取后又写操作被回滚
- 重复读:一个事务过程中会对某个数据进行两次读取,但是两次读取中间有另一个事务对此数据进行写操作并提交,此事务的前后两次读取不同叫重复读
- 幻读:一个事务两次按照某个条件对查询符合条件的数据数量,但是第一次查询之后,有事务进行写操作新增或减少了符合条件的数据,第二次符合条件的数量发生变化
通过Transactional的isolution参数可以控制事务隔离级别,也就是在事务执行过程,其他事务对数据的操作权限
脏读 | 不可重复读 | 幻读 | |
Read uncommitted | √ | √ | √ |
Read committed | × | √ | √ |
Repeatable read | × | × | √ |
Serializable | × | × | × |
参考
spring boot+vue.js企业级管理系统实战
mysql事务和隔离级别学习--笔记SpringCloud微服务架构