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<Class> 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处理流程。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,933评论 18 139
  • jHipster - 微服务搭建 CC_简书[https://www.jianshu.com/u/be0d56c4...
    quanjj阅读 842评论 0 2
  • SpringBoot快速入门 设置spring boot的parent 说明:Spring boot的项目必须要将...
  • 人生其实很短,心底总有那么一点自己的原则修身处世 。 1、恪守诚信:敢做 敢当,坦坦荡荡,严于律己。 2、感恩:常...
    灬52赫兹灬阅读 795评论 0 0