数据源 2020-01-07 SpringBoot 配置单数据源 引入依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.1.RELEASE</versio....
Swagger接口文档 2020-01-02 框架层集成Swagger文档 API虽然没有直接的UI,当API体验是十分重要的。API体验指的就是API文档,文档的书写时一个繁琐的体力活儿。大部分开发人员都不太愿意写文档。所以如果框架能够直接支持文档的自动生成,就会大大简化企业维护API文档的工作。 Springboot支持Swagger文档的自动生成。Swagger是基于当前业界Open API 规范开发的工具链。 Springboot中启用Swagger功能 引入依赖 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> </dependency> ....
异步调用处理:复制线程上下文 2020-01-02 异步调用 在微服务中,多数场景下采用:请求/响应 同步调用的风格,但在有些场景下并不需要同步、或是同步调用的方式性能开销比较大,这是则需要异步调用。(比如:邮件、短信等…) 异步支持也是一个服务框架的基础能力,Springboot通过Java线程池原生支持异步操作。 配置一个服务线程池即可。 ThreadPoolTaskExecutor 配置一个服务线程池 public class AppConfig { public static final String ASYNC_EXECUTOR_NAME = "asyncExecutor"; @Bean(name=ASYNC_EXECUTOR_NAME) public Executor asyncExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); // for passing in request scope context executor.setTaskDecorator(new ContextCopyingDecorator())....
强类型接口设计 2020-01-02 强、弱类型接口 服务API接口有强、弱类型之分。 强类型接口 传统的RPC服务(定制二进制协议,对消息进行编码和解码),采用TCP传输消息。RPC服务通常有严格的契约,开发服务前需要使用IDL(Interface description language)定义契约,最终通过契约自动生成强类型的服务器端、客户端的接口。服务调用直接使用强类型的客户端。(GRPC、Thrift) 优点:不需要手动的编码和解码、接口规范、自动代码生成、编译器自动类型检查。 缺点:服务端和客户端强耦合、任何一方升级改动可能会造成另一方break。自动代码生成需要工具支持,开发这些工具的成本比较高。强类型接口开发测试不友好、浏览器、Postman这些工具无法直接访问这些强类型接口。 弱类型 Restful服务通常采用JSON作为传输消息,使用HTTP作为传输协议,没有严格契约的概念,使用普通的HTTP Client即可调用。调用方需要对JSON消息进行手动的编码和解码工作。(Springboot) 优点:服务端和客户端非强耦合、开发测试友好。 缺点:调用方手动编码解码,没有自动代码生成、没有编译期接口....
ModelMapper 2020-01-07 简介 应用程序通常由相似但不同的对象模型组成,其中两个模型中的数据可能相似,但是模型的结构和关注点不同。使用 ModelMapper 可以轻松地将一个模型(DTO)转换为另一个模型(DMO),从而使分离的模型保持隔离状态。 ModelMapper 的目标是通过基于惯例的方式自动确定一个对象模型如何映射到另一个对象模型,从而简化对象映射,同时提供一种简单的,重构安全的 API 来处理特定的用例。 ModelMapper 分析您的对象模型,以智能地确定应如何映射数据。无需手动映射。ModelMapper 会为您完成大部分工作,并自动投影和展平复杂模型。 ModelMapper 使用约定来确定属性和值如何相互映射。用户可以创建自定义约定,也可以使用提供的约定之一。 ModelMapper 提供了一个简单,流畅的映射API,用于处理特殊用例。该 API 是类型安全和重构安全的,使用实际代码而不是字符串引用来映射属性和值。 ModelMapper 支持与任何类型的数据模型集成。从 JavaBeans 和 JSON 树到数据库记录,ModelMapper 可以为您完成繁重的工作。 快速上手....