Eureka源码系列 —— 2.源码启动入口
前言
本文介绍如何搭建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()
方法是所有测试方法的前置方法,源码如下:
这个方法会做三个事情:
- 找war包
- 声明并启动一个jetty容器,并将war包部署进容器
- 保存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进行注册。