Directorio artículo
A, Perfil WebFlux
SpringBoot2.x
Subyacentes utilizados Spring5
, Spring5
se introdujo la programación reactiva Spring WebFlux
.
WebFlux
características:
① SpringMVC
es la sincronización modelo IO bloqueada, desperdicio de recursos es relativamente grave. Y WebFlux
se puede hacer asíncrono no bloqueante.
② orientado a eventos ( Event-driven
), y similares Vue
y Angular
, como la dinámica cambios correspondientes en todo el valor asociado.
③ SpringMVC
Se requieren proyectos a ejecutar en los contenedores de servlets como Tomcat
, Jetty
... pero ahora WebFlux
no sólo se ejecutan en contenedor de servlets tradicional (el apoyo necesario Servlet3.1
), sino también para correr en apoyo NIO
de Netty
y Undertow
en.
Dos, la entrada WebFlux
① la introducción de WebFlux
la dependencia, introdujo webflux
no presentó spring-boot-starter-web
debido a spring-boot-starter-web
una mayor prioridad.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
② la puesta en marcha del modo por defecto Netty
el puerto 8080.
③ de codificación
Porque si es asíncrona para lograr el efecto de no bloqueo, la base de datos se debe reemplazar innoDB
la base de datos, donde la base de datos de simulación de variables estáticas.
public class User {
private long id ;
private String name;
}
@Service
public class UserService {
private static final Map<Integer, User> dataMap = new HashMap<>();
static {
dataMap.put(1,new User(1,"a"));
dataMap.put(2,new User(2,"b"));
dataMap.put(3,new User(3,"c"));
dataMap.put(4,new User(4,"d"));
}
/**
* 返回所有用户
*/
public Flux<User> getAllUser(){
Collection<User> users = dataMap.values();
return Flux.fromIterable(users);
}
/**
* 返回具体用户
*/
public Mono<User> getUserById(int id){
User user = dataMap.get(id);
return Mono.justOrEmpty(user);
}
}
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
UserService userService;
/**
* 返回指定用户额
*/
@RequestMapping("/{id}")
public Mono<User> getUserById(@PathVariable int id){
return userService.getUserById(id);
}
/**
* 返回所有用户
*/
@RequestMapping("/all")
public Flux<User> getAllUsers(){
return userService.getAllUser();
}
/**
* 延迟返回用户
* produces控制服务器返回客户端的格式
*/
@RequestMapping(value = "/delay",produces = MediaType.APPLICATION_STREAM_JSON_VALUE)
public Flux<User> getAllUsersDelay(){
return userService.getAllUser().delayElements(Duration.ofSeconds(2));
}
}
④ Descripción
Mono
Es representado por 0 o asíncrono que comprende elementos de secuencia, como un solo objeto
Flux
Representa la secuencia asíncrono que comprende 0 a N elementos, la lista de objetos array
Spring WebFlux
La aplicación no es estrictamente dependiente Servlet API
, y por lo tanto no se puede utilizar como war
la implementación del archivo no se puede usar el src/main/webapp
directorio.
Spring WebFlux
Plantilla soporta una variedad de técnicas, incluyendo Thymeleaf
, FreeMarker
.