目录

Life in Flow

知不知,尚矣;不知知,病矣。
不知不知,殆矣。

存档: 2020 年 01 月 (19)

RESTful Web Service

REST  REST 提供了一组架构约束(风格),当作为一个整体来应用时,强调组件交互的可伸缩性、接口的通用性、组件的独立部署、以及用来减少交互延迟、增强安全性、封装遗留系统的中间组件。 Richardson 成熟度模型  Richardson 服务成熟度模型是基于一个服务对于 URI,HTTP 和超媒体的支持,划分出服务成熟度的三个级别 + 零级(即:没有任何支持)。他以一种服务实现者容易理解的方式,将通用的架构模式映射到服务的设计。 如何实现 RESTFul Web Service 识别资源 选择合适的资源粒度 设计 URI 选择合适的 HTTP 方法和返回码 设计资源的表述 识别资源 找到领域名词:能用 CRUD 操作的名词 将资源组织为集合(即集合资源) 将资源合并为符合资源 计算或处理函数 资源粒度 站在服务端的角度,要考虑 网络效率 表述的多少 客户端的易用程度 站在客户端的角度,要考虑 可缓存性 修改频率 可变性 构建更好的 URI 使用域及子域对资源进行合理的分组或划分 在 URI 的路径部分使用斜杠分隔符 ( / ) 来表示资源之间的层次关系 在 ....

访问 Web 资源:RestTemplate 、WebClient

通过 RestTemplate 访问 Web 资源  Spring Boot 中没有自动配置 RestTemplate;  Spring Boot 提供了 RestTemplateBuilder:RestTemplateBuilder.build() 常用方法 GET 请求: getForObject() / getForEntity() POST 请求: postForObject() / postForEntity() PUT 请求: put() DELETE 请求: delete() 构造 URI 构造 URI: UriComponentsBuilder 构造相对于当前请求的 URI: ServletUriComponentsBuilder 构造指向 Controller 的 URI: MvcUriComponentsBuilder 示例 Coffee package geektime.spring.springbucks.customer.model; import lombok.AllArgsConstructor; import lombok.Builder; im....

Spring MVC

认识 Spring MVC DispatcherServlet (核心、也是所有请求的入口) Controller:业务处理逻辑 xxxResolver:解析器 ViewResolver HandlerExceptionResolver MultipartResolver HandlerMapping:Request 与 Controller 的映射。 Spring MVC 中的常用注解 @Controller @RestController :@Controller + @RequestBody。 @RequestMapping:此 Controller 要处理哪些请求。 @GetMapping @PostMapping @PutMapping @DeleteMapping @RequestBody:请求报文体 @ResponseBody:响应报文体 @ResponseStatus:响应状态码 定义一个简单的 Controller CoffeeController package geektime.spring.springbucks.waiter.control....

AOP 打印数据访问层摘要

APO核心概念 Spring AOP 常用注解 @EnableAspectJAutoProxy:开启AspectJ的支持。 @Aspect:当前类是一个切面。(需要配合@Component) @Pointcut: @Before:Advice在Join Point之前执行。 @After :不管成功或失败,只要结束就会执行。 @AfterReturning :在成功return之后执行。 @AfterThrowing :在失败return之后执行。 @Around:环绕通知。前+后 @Order:用于指定切面的执行顺序。数值越小,优先级越高。 如何打印SQL HikariCP  自身没有输出SQL的能力,需要借助P6Spy。 <dependency> <groupId>p6spy</groupId> <artifactId>p6spy</artifactId> <version>3.8.1</version> </dependency> Alibaba Druid  内置 SQL ....

Reactor

Reactive Programming  响应式编程是一种面向数据流和变化传播的编程范式。这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播。 # 传统模式下编程:a 的值在执行后被确定。 a = b + c # 响应式编程 a 的值随着 b、c 值的变化而变化。 Project Reactor  Reactor是由 Pivotal 团队开发的,第四代Reactive库,用于根据Reactive Streams规范在JVM上构建非阻塞应用程序。 核心的概念 Operators - Publisher / Subscriber Nothing Happens Util You subscribe() Flux [ 0..N ] - onNext()、onComplete()、onError() Mono [ 0..1 ] - onNext()、onComplete()、onError() Backpressure Subscription onRequest()、onCancel()、onDispose() 线程调度 S....

Spring for Redis

Spring 对 Redis 的支持  Redis 是 ⼀款开源的内存 KV 存储,⽀持多种数据结构。  Spring 对 Redis 的支持是通过 Spring Data Redis 项目。 Jedis / Lettuce RedisTemplate Repository Reference Docker 启动 Redis 容器  Reference # 拉取image docker pull redis # 启动 Redis docker run -p 6379:6379 --name myredis -d redis # 设置密码添加 --requirepass 参数 docker run -p 6379:6379 --name myredis -d redis --requirepass "123456" Jedis 客户端 Jedis 不是线程安全的:无法在多个线程之间共享同一个 Jedis 实例。 通过 JedisPool 获得 Jedis 实例 直接使用 Jedis 中的方法 引入依赖 <?xml version="1.0" encoding="UTF-8....

Spring for MongoDB

常见数据库分类 ClassificationName Key-ValueRedis、Memcached DocumentMongoDB、CouchDB ColumnarHBase、Cassandra GraphNeo4J Docker部署MongoDB # 拉取image [root@master ~]# docker pull mongo [root@master ~]# docker images | grep mongo mongo latest a0e2e64ac939 3 weeks ago 64MB # 创建本地挂载目录 [root@master ~]# mkdir /data/mongodb -pv # 创建容器 [root@master ~]# docker run --name mongo -v /data/mongod:/data/db -p 27017:27017 -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=123456 -d mongo 0503c6157ef3b....