当前位置:   article > 正文

Springboot跟Vert.x整合

vert.x springboot

众所知周,Vert.x 是一个异步无阻塞的网络框架,其参照物是 node.js。基本上 node.js 能干的事情,Vert.x 都能干。Vert.x 利用 Netty4 的 EventLoop 来做单线程的事件循环,所以跑在 Vert.x 上的业务不能做 CPU 密集型的运算,这样会导致整个线程被阻塞。

Springboot 是应用非常广泛的 java 快速开发框架,它提供了与数据库,websocket,消息系统等等各种集成。业务中已经使用了 springboot,如果又有需要使用 vert.x,最好是将这两者集成,而不是 Vert.x 单独作为一个程序。

如何集成 Vert.x 与 Springboot?非常简单,我们只需要创建一个 Vert.x Server,让它在 springboot 启动的时候自动启动即可。

第一步, 设置 Vert.x server 端口,创建一个简单的配置类,它从环境变量获取我们 Vert.x Server 的端口,如果环境变量没有设置,就使用默认的 8081.

  1. package com.yq.springboot;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.context.annotation.Configuration;
  4. import org.springframework.core.env.Environment;
  5. /**
  6.  * A configuration bean.
  7.  * @author <a href="http://escoffier.me">Clement Escoffier</a>
  8.  */
  9. @Configuration
  10. public class AppConfiguration {
  11.     @Autowired
  12.     Environment environment;
  13.     public int httpPort() {
  14.         return environment.getProperty("http.port", Integer.class, 8081);
  15.     }
  16. }

第二步,创建 Vert.x server我们需要创建一个简单的 WebServer, 这里直接使用 Vert.x 自带的 StaticHandler,也可以自己创建新的 Handler,这里只是演示,就直接使用 Vert.x 自带的 StaticHandler。

  1. package com.yq.springboot;
  2. import io.vertx.core.AbstractVerticle;
  3. import io.vertx.ext.web.Router;
  4. import io.vertx.ext.web.handler.StaticHandler;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.stereotype.Component;
  7. @Component
  8. public class StaticServer extends AbstractVerticle {
  9.     @Autowired
  10.     AppConfiguration configuration;
  11.     @Override
  12.     public void start() throws Exception {
  13.         Router router = Router.router(vertx);
  14.         // Serve the static pages
  15.         router.route().handler(StaticHandler.create());
  16.         vertx.createHttpServer().requestHandler(router::accept).listen(configuration.httpPort());
  17.     }
  18. }

第三步,设置静态页面我们使用了 StaticHandler,可以查看源码,发现只需要创建 webroot 目录,创建 index.html 页面即可,

  1. @VertxGen
  2. public interface StaticHandler extends Handler<RoutingContext> {
  3.     String DEFAULT_WEB_ROOT = "webroot";
  4.     boolean DEFAULT_FILES_READ_ONLY = true;
  5.     long DEFAULT_MAX_AGE_SECONDS = 86400L;
  6.     boolean DEFAULT_CACHING_ENABLED = true;
  7.     boolean DEFAULT_DIRECTORY_LISTING = false;
  8.     String DEFAULT_DIRECTORY_TEMPLATE = "vertx-web-directory.html";
  9.     boolean DEFAULT_INCLUDE_HIDDEN = true;
  10.     long DEFAULT_CACHE_ENTRY_TIMEOUT = 30000L;
  11.     String DEFAULT_INDEX_PAGE = "/index.html";

我们在 <project_path>ertxDemosrcmain esourceswebroot 下面创建 index.html, 详细路径可参看这里的源代码。index.html

  1. <html>
  2. <head>
  3. </head>
  4. <body>
  5. <h1>Static web server. Click on some links below</h1>
  6. <br>
  7. <br>
  8. <a href="page1.html">Static Page 1</a>
  9. <a href="page2.html">Static Page 2</a>
  10. </body>
  11. </html>

第四步 在 springboot,添加 postConstruct 注解在启动类中加上,当我们启动时部署 Vertx staticServer 的代码。备注:@PostConstruct 修饰的方法会在服务器加载 Servle 的时候运行,并且只会被服务器执行一次

  1. package com.yq;
  2. import com.yq.springboot.StaticServer;
  3. import io.vertx.core.Vertx;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.boot.SpringApplication;
  6. import org.springframework.boot.autoconfigure.SpringBootApplication;
  7. import javax.annotation.PostConstruct;
  8. @SpringBootApplication
  9. public class VertxApplication {
  10.     @Autowired
  11.     private StaticServer staticServer;
  12.     public static void main(String[] args) {
  13.         SpringApplication.run(VertxApplication.class, args);
  14.     }
  15.     @PostConstruct
  16.     public void deployVerticle() {
  17.         Vertx.vertx().deployVerticle(staticServer);
  18.     }
  19. }

启动程序后再网页打开 http://127.0.0.1:8081 效果图361271638332ce1b8932d0bac873ce6d.png

代码放在这里:

https://github.com/yqbjtu/java8study/tree/master/vertxDemo


作者:毛毛的猫毛

来源链接:

https://blog.csdn.net/m0_67400973/article/details/124456758

f7374eb512b4221ce457ddf03b9a8349.png

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/616114
推荐阅读
相关标签
  

闽ICP备14008679号