当前位置:   article > 正文

Vert.x 与Springboot集成

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.

package com.yq.springboot;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;

/**
 * A configuration bean.
 * @author <a href="http://escoffier.me">Clement Escoffier</a>
 */
@Configuration
public class AppConfiguration {

    @Autowired
    Environment environment;

    public int httpPort() {
        return environment.getProperty("http.port", Integer.class, 8081);
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

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

package com.yq.springboot;

import io.vertx.core.AbstractVerticle;
import io.vertx.ext.web.Router;
import io.vertx.ext.web.handler.StaticHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;


@Component
public class StaticServer extends AbstractVerticle {

    @Autowired
    AppConfiguration configuration;

    @Override
    public void start() throws Exception {
        Router router = Router.router(vertx);

        // Serve the static pages
        router.route().handler(StaticHandler.create());

        vertx.createHttpServer().requestHandler(router::accept).listen(configuration.httpPort());
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

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

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

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

<html>
<head>
</head>
<body>
<h1>Static web server. Click on some links below</h1>

<br>
<br>
<a href="page1.html">Static Page 1</a>
<a href="page2.html">Static Page 2</a>

</body>
</html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

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

package com.yq;

import com.yq.springboot.StaticServer;
import io.vertx.core.Vertx;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import javax.annotation.PostConstruct;


@SpringBootApplication
public class VertxApplication {

    @Autowired
    private StaticServer staticServer;

    public static void main(String[] args) {
        SpringApplication.run(VertxApplication.class, args);
    }

    @PostConstruct
    public void deployVerticle() {
        Vertx.vertx().deployVerticle(staticServer);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

启动程序后再网页打开http://127.0.0.1:8081
效果图
这里写图片描述

代码放在这里,欢迎加星。

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

闽ICP备14008679号