jboot01:服务启动

jboot 可以算是扩展了jfinal,整合了一些流行技术的微服务开发框架。具体介绍参见:https://gitee.com/fuhai/jboot

微服务概念
服务启动

public static void main(String [] args){ Jboot.run(args); }
看一下做了哪些事情

  • 解析启动参数(通过main方法传入)
  • 打印banner信息
  • 打印配置信息
  • 通过JbootServerFactory 构建内置的服务器(分别支持undertow,tomcat,jetty)
  • 启动服务器,完成主要的初始化。(重点关注)
  • 打印服务部署的信息
    重点关注 UnderTowServer类 initUndertowServer方法
public void initUndertowServer() {

//设置类加载器
        JbootServerClassloader classloader = new JbootServerClassloader(UnderTowServer.class.getClassLoader());
        classloader.setDefaultAssertionStatus(false);

//构建部署信息,包括过滤器,监听器,servlet。 包括jfinal核心的JFinalFilter
        deploymentInfo = buildDeploymentInfo(classloader);

        if (webConfig.isWebsocketEnable()) {
            Set endPointClasses = JbootWebsocketManager.me().getWebsocketEndPoints();
            WebSocketDeploymentInfo webSocketDeploymentInfo = new WebSocketDeploymentInfo();
            webSocketDeploymentInfo.setBuffers(new DefaultByteBufferPool(true, webConfig.getWebsocketBufferPoolSize()));
            for (Class endPointClass : endPointClasses) {
                webSocketDeploymentInfo.addEndpoint(endPointClass);
            }
            deploymentInfo.addServletContextAttribute(WebSocketDeploymentInfo.ATTRIBUTE_NAME, webSocketDeploymentInfo);
        }

        servletContainer = Servlets.newContainer();
        deploymentManager = servletContainer.addDeployment(deploymentInfo);
//部署到容器
        deploymentManager.deploy();

        HttpHandler httpHandler = null;
        try {
            /**
             * 启动并初始化servlet和filter
             */
            httpHandler = deploymentManager.start();
        } catch (Throwable ex) {
            ex.printStackTrace();
        }


        pathHandler = Handlers.path(
                Handlers.resource(new ClassPathResourceManager(classloader, "webRoot")));

        pathHandler.addPrefixPath(config.getContextPath(), httpHandler);

        undertow = Undertow.builder()
                .addHttpListener(config.getPort(), config.getHost())
                .setHandler(pathHandler)
                .build();

    }

Undertow是一个轻量级的web容器,可以通过api来快速构建一个内置的web容器,来提供服务能力。
这里不关注web容器api的使用,我们只用关注buildDeploymentInfo方法。JFinalFilter拦截所有的请求,进入了jfinal的mvc处理流程。

你可能感兴趣的:(jboot01:服务启动)