02、Eureka源码系列-源码启动入口

前言

本文介绍如何搭建eureka源码的debug环境,网上有一些博客抄来抄去,抄错了都不知道。

eureka-server启动

eureka-server模块下有一个测试类:eureka-server/src/test/java/com/netflix/eureka/resources/EurekaClientServerRestIntegrationTest.java。这个类里面是对eureka-server的REST接口的集成测试包,里面肯定包含启动eureka-server的代码,我们可以以这个类为切入点,将eureka-server启动起来进行debug。

这个类的startServer()方法是所有测试方法的前置方法,源码如下:

 

这个方法会做三个事情:

1、 找war包;
2、 声明并启动一个jetty容器,并将war包部署进容器;
3、 保存eurekaServiceUrl;

其中第一步对于我们debug来说太麻烦了,每次都要打war包,并且war包中的内容无法debug。所以我们修改源代码,让他直接去读eureka-server模块下的web配置。(这也是我从网上的博文中学来的,但是他们的配置文件路径写错了,真坑😅)。修改如下:

 

源码:

    private static void startServer() throws Exception {

        server = new Server(8080);

        // KLH: 其他资料里这里的文件路径都写错了,真坑
        WebAppContext webAppCtx = new WebAppContext(new File("./src/main/webapp").getAbsolutePath(), "/");
        webAppCtx.setDescriptor(new File("./src/main/webapp/WEB-INF/web.xml").getAbsolutePath());
        webAppCtx.setResourceBase(new File("./src/main/resources").getAbsolutePath());
        webAppCtx.setClassLoader(Thread.currentThread().getContextClassLoader());
        server.setHandler(webAppCtx);
        server.start();

        eurekaServiceUrl = "http://localhost:8080/v2";

    }

eureka-client启动

直接启动com.netflix.eureka.ExampleEurekaClient#main方法就可以向eureka-server进行注册。