Fork me on GitHub

java待整合

概念

业务层将服务类设计为接口和实现类两层的目的,这样可以对调用者隐藏接口的实现细节。

微服务

  1. 相近业务作为单个服务开发,使用单独的后端,包括数据库等。好处是低耦合度,便于扩展等
  2. 在开发单个模块的过程中,将服务的请求属性注册到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微服务架构
posted @ 2024-10-08 09:19  LosHill  阅读(6)  评论(0)    收藏  举报
Live2D