Spring MVC 集成Servlet3.0 AsyncContext异步请求实现

Servlet 和基于 Servlet 的容器(例如Tomcat)默认处理请求和处理业务是同一条线程,即有请求进来后,分配一条线程接收并处理请求,并继续执行业务处理,直到所有处理结束才完成响应,线程才会释放。这使得 Servlet 对业务方法的调用变成一种阻塞调用,效率较低。

Servlet3.0 提供了AsyncContex 来异步处理请求,将请求线程与业务处理线程分离。

阅读更多

Spring Boot 2系列(六十二):集成 WebFux 实现响应式Web

Spring Framework 5.0 版本增加了响应式 Web 框架 Spring WebFlux 。 它是完全无阻塞的,支持 Reactive Streams 反背压,并且可以在 Netty、Undertow 和 Servlet 3.1+ 容器等服务器上运行。

Spring Boot 通过为 Spring Webflux 提供自动配置来简化响应式 Web 应用程序的开发。

阅读更多

设计模式:管道模式(Pipeline)

管道模式(Pipeline)不属于 GoF 提出的 23 种经典设计模式,但在工程中很常见。它与职责链模式相近,可看作其变体:数据/请求沿固定或可配置的处理阶段依次流动,每一阶段只做一类变换,再交给下一阶段。

阅读更多

事件驱动架构

事件驱动架构,通常指使用消息队列的异步架构。通常是应用在模块之间或服务之间的写操作,目的是实现依赖解耦。

使用消息队列实现异步架构是目前互联网应用系统中一种典型的架构模式。

阅读更多

Spring Boot 2系列(六十一):作为Linux服务运行Java程序

除了使用 java -jar 运行 Spring Boot 应用程序之外,还可以为 Unix 系统制作完全可执行的应用程序。

完全可执行的 jar 可以像任何其他可执行二进制文件一样执行,也可以使用 init.dsystemd 注册。

这有助于在常见的生产环境中安装和管理 Spring Boot 应用程序。

阅读更多

将Java程序注册为Windows系统服务

现实环境是有些甲方的物理服务器是Widnwos系统,还不能切换Linux,就必须在 Windows 运行 Java 程序,cmd 的控制台窗口很容易被误关闭,需要把 Java 程序注册为 Windows 随机启动。

阅读更多

解决Windows运行java -Dfile.encoding=utf-8 -jar乱码

UTF-8编译的 Java 应用程序,在 Windows 运行,指定了文件编码为 UTF-8 ,控制台显示的中文仍乱码。

右键 cmd 控制台 > 属性,可以看到当前代码页为:936 (简体中文 GBK),该代码只能显示 GBK 编码的中文。

或直接在控制台输入 chcp 命令,会输出当前:【活动的代码页:936】

需要通过 chcp 命令修改代码页,chcp 65001。(65001为UTF-8的代码页)

Windows 中 运行 Java 程序脚本新建一个 startup.bat 文件,内容如下。

1
2
3
title xxx-server
chcp 65001
java -Dfile.encoding=utf-8 -jar xxx.jar
阅读更多

组件化设计及边界定义

软件开发行业共识,应该将复杂的软件进行拆分,拆成多个低复杂度的子系统,子系统还可以继续拆分成更小粒度的组件。即软件需要进行模块化,组件化设计。

Java 开发依赖的一个个 Jar 包就是组件。

阅读更多