# spring-boot-starter-vertx **Repository Path**: chenzhaoplus/spring-boot-starter-vertx ## Basic Information - **Project Name**: spring-boot-starter-vertx - **Description**: No description available - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-05-20 - **Last Updated**: 2024-05-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Vertx Starter Spring Boot无缝集成vertx-web框架。 ## 使用方法 添加依赖: ``` cn.fh spring-boot-starter-vertx 1.5-SNAPSHOT ``` 添加配置: ```yaml server: port: 9000 vertx: # 事件循环处理线程数 nio-thread-count: 6 # worker线程池大小 worker-thread-count: 10 # HTTP Server Verticle部署数量 verticle-count: 6 # 允许NIO线程处理单个请求的最长时间, 毫秒 max-event-loop-execute-time: 2000 handler-mappings: # path为/demo的请求, 会依次经过homeHander, demoHandler - path: /demo method: POST # spring bean名 beanNames: homeHandler,demoHandler ``` 编写Handler: ```java @Component // @BlockedHandler @Slf4j public class DemoHandler implements Handler { @Override public void handle(RoutingContext route) { log.info("invoke DemoHandler, path: {}", route.request().path()); route.response().end("ok"); } } ``` 所有的Handler都会在vertx的NIO线程中执行,所以不要在handler中出现阻塞调用。 如需调用会阻塞线程的方法,可以在Handler上添加`@BlockedHandler`注解,带有此注解的Handler会在vertx的worker线程池中执行; 或者使用vertx的异步编程方式: ```java Future fut1 = Future.future(); Future fut2 = Future.future(); // 执行block调用 route.vertx() .executeBlocking( fut -> { String result = demoService.blockingLogic(1); fut.complete(result); }, fut1.completer() ); // 执行block调用 route.vertx() .executeBlocking( fut -> { String result = demoService.blockingLogic(2); fut.complete(result); }, fut2.completer() ); // 组合结果 CompositeFuture.all(fut1, fut2).setHandler(ar -> { if (!ar.succeeded()) { log.error("", ar.cause()); route.response().end("error"); return; } log.info("final step"); List resultList = ar.result().list(); route.response().end(resultList.toString()); }); ```