spring-boot-starter-webflux 整合 tio-boot
本文档提供了如何将 tio-boot-server 集成到使用 spring-boot-starter-webflux 的项目中。默认情况下,Spring WebFlux 使用 Netty 作为网络处理层。本文档将引导你如何将 tio-boot-server 作为替代品整合到你的 Spring WebFlux 应用中。
pom.xml 配置:
Java 和 Spring Boot 版本:
- 设定了 Java 1.8 版本。
- 设定了 Spring Boot 的版本为 2.5.6。
依赖项配置:
- 移除了默认的
spring-boot-starter-json
和spring-boot-starter-reactor-netty
依赖,因为我们打算使用 tio-boot。 - 添加了
tio-boot
作为项目依赖,以及其他相关依赖。
- 移除了默认的
插件配置:
- 配置了
spring-boot-maven-plugin
以支持项目构建和运行。
- 配置了
<properties>
<java.version>1.8</java.version>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.5.6</spring-boot.version>
<main.class>demo.SpringWebFluxTioBootApp</main.class>
<tio-boot.version>1.8.7</tio-boot.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-json</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-reactor-netty</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.litongjava</groupId>
<artifactId>tio-boot</artifactId>
<version>${tio-boot.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.litongjava</groupId>
<artifactId>hotswap-classloader</artifactId>
<version>1.2.1</version>
</dependency>
<!-- SpringBoot集成Test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<!-- Spring Boot -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<includeSystemScope>true</includeSystemScope>
<!--使该插件支持热启动 -->
<fork>true</fork>
<mainClass>${main.class}</mainClass>
</configuration>
</plugin>
</plugins>
</build>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
启动类配置:
接下来是 Spring Boot 应用的启动类 SpringWebFluxTioBootApp
。
- 注解配置:
@SpringBootApplication
标识这是一个 Spring Boot 应用。@Import({TioBootServerAutoConfiguration.class})
导入了 tio-boot 的自动配置,这是整合 tio-boot 的关键。@AComponentScan
用于 tio-boot 组件扫描。
package demo;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Import;
import com.litongjava.hotswap.wrapper.spring.boot.SpringApplicationWrapper;
import com.litongjava.jfinal.aop.annotation.AComponentScan;
import com.litongjava.tio.boot.spring.SpringBootArgs;
import com.litongjava.tio.boot.spring.TioBootServerAutoConfiguration;
@SpringBootApplication
@Import({TioBootServerAutoConfiguration.class})
@AComponentScan
public class SpringWebFluxTioBootApp {
public static void main(String[] args) {
long start = System.currentTimeMillis();
SpringBootArgs.set(SpringWebFluxTioBootApp.class, args);
SpringApplicationWrapper.run(SpringWebFluxTioBootApp.class, args);
long end = System.currentTimeMillis();
System.out.println(end - start + "(ms)");
}
}
Controller 编写:
定义了一个基本的 HelloWordWebFluxController
控制器,用于处理根路径("/"
)上的请求。
@RequestPath 注解:
- 类级别的
@RequestPath("/")
指定这个控制器处理的基本路径。 - 方法级别的
@RequestPath
(没有指定路径)默认处理根路径上的请求。
- 类级别的
业务方法:
index
方法简单地返回字符串 "index"。
package demo.controller;
import com.litongjava.annotation.RequestPath;
@RequestPath("/")
public class HelloWordWebFluxController {
@RequestPath
public String index() {
return "index";
}
}
测试应用:
完成上述配置后,可以启动应用并访问 http://localhost/
来测试是否成功集成了 tio-boot-server。
通过这种方式,你可以将 tio-boot-server 与 Spring WebFlux 结合使用,利用 tio-boot 提供的高性能网络处理能力,同时享受 Spring WebFlux 的响应式编程模型和丰富的开发特性。