1. 简介

处理一段业务逻辑,首先要确保数据输入的正确性,所以需要先对数据进行检查,保证数据在语义上的正确性,再根据数据进行下一步的处理。
前端可以通过 js 程序校验数据是否合法,后端同样也需要进行校验。而后端最简单的实现就是直接在业务方法中对数据进行处理,但是不同的业务方法可能会出现同样的校验操作,这样就出现了数据的冗余。为了解决这个情况,JSR 303 出现了。
JSR 303 使用 Bean Validation,即在 Bean 上添加相应的注解,去实现数据校验。这样在执行业务方法前,都会根据注解对数据进行校验,从而减少自定义的校验逻辑,减少代码冗余。

2. springboot中JSR的使用

2.1引入依赖

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
Read more »

分布式事务理论

传统的一个工程内为了保证数据的一致性,使用本地事务。本地事务只能解决同一工程中的事务问题,而现在的场景更加复杂,关系到两个工程模块,怎么保证要么都成功,要么都失败?

分布式事务就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。

分布式事务场景:不同应用相同数据库,相同应用不同数据库,不同应用不同数据库。

分布式事务产生的原因:分布式系统异常除了本地事务那些异常之外,还有:机器宕机、网络异常、消息丢失、消息乱序、数据错误、不可靠的TCP、存储数据丢失…

Read more »

git日常使用的小问题

嵌套仓库

如果在一个git仓库中嵌套了一个git仓库,那么被嵌套的git仓库的改动,不能被大git仓库检测到。

解决方案:

  • 可以使用submodule,当引入子仓库时,使用如下命令即可:

    1
    git submodule add https://github.com/子仓库

    作用类似git clone,但是他会在父仓库的下面新建.gitmodules文件,并且包含以下内容

    1
    2
    3
    [submodule "apps/firstApp"]
    path = apps/firstApp
    url = https://github.com/muchang/mean-seed-app.git

    这一段表示子仓库的位置,以及子仓库的远程仓库的地址。

    删除子仓库并且commit之后,这个文件和这个子仓库有关的部分就会消失。

  • 本质和第一个方案类似,它会把总仓库内的所有内容拉取下来(包含子仓库):

    1
    git clone --recursive https://github.com/总仓库

    这两种方案可以同时维护两个仓库,字仓库也可以随时拉取更新

  • 删除子仓库

    1. 卸载子模块 git submodule deinit <submodule_path>
    2. 删除子模块目录 git rm <submodule_path>
    3. git add
    4. git commit -m "Remove submodule <submodule_path>"
Read more »

Gateway 简介

Gateway是在Spring生态系统之上构建的API网关服务,基于Spring 5,Spring Boot 2和 Project Reactor等技术。Gateway旨在提供一种简单而有效的方式来对API进行路由,以及提供一些强大的过滤器功能, 例如:熔断、限流、重试等。

Spring Cloud Gateway 具有如下特性:

  • 基于Spring Framework 5, Project Reactor 和 Spring Boot 2.0 进行构建;
  • 动态路由:能够匹配任何请求属性;
  • 可以对路由指定 Predicate(断言)和 Filter(过滤器);
  • 集成Hystrix的断路器功能;
  • 集成 Spring Cloud 服务发现功能;
  • 易于编写的 Predicate(断言)和 Filter(过滤器);
  • 请求限流功能;
  • 支持路径重写。

相关概念

Read more »

spring

到底为什么要用 IoC 和 AOP
IoC 解决了以下问题:

  1. 创建了许多重复对象,造成大量资源浪费;
  2. 更换实现类需要改动多个地方;
  3. 创建和配置组件工作繁杂,给组件调用方带来极大不便。

AOP 解决了以下问题:

  1. 切面逻辑编写繁琐,有多少个业务方法就需要编写多少次。
Read more »
0%