加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

大公司程序员带你死磕Tomcat—Tomcat如何做到一键式启停

发布时间:2019-11-02 02:00:44 所属栏目:外闻 来源:今日头条
导读:副标题#e# 在没有SpringBoot内嵌有Tomcat之前,我们都是将项目打为War包放在Tomcat的webapp目录下面,然后如果是Linux系统,运行命令start.sh、如果是Windows系统,运行命令start.bat以后就能启动起来并访问到页面。如果是想要停止运行只需要运行shutdown.s

执行脚本参数,执行bootstrap.jar中的Bootstrap类中main方法,并传入参数start

  1. hift 
  2.  
  3. eval exec ""$_RUNJAVA"" ""$LOGGING_CONFIG"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS  
  4.  
  5. -D$ENDORSED_PROP=""$JAVA_ENDORSED_DIRS""  
  6.  
  7. -classpath ""$CLASSPATH""  
  8.  
  9. -Djava.security.manager  
  10.  
  11. -Djava.security.policy==""$CATALINA_BASE/conf/catalina.policy""  
  12.  
  13. -Dcatalina.base=""$CATALINA_BASE""  
  14.  
  15. -Dcatalina.home=""$CATALINA_HOME""  
  16.  
  17. -Djava.io.tmpdir=""$CATALINA_TMPDIR""  
  18.  
  19. org.apache.catalina.startup.Bootstrap "$@" start 

在上面脚本中我们可以看出最后执行的都是从Bootstrap的main方法作为入口的,所以我们打开Tomcat源码进去Bootstrap类中看它到底做了什么。

启动类分析

作为Tomcat的入口类,我们先看看Bootstrap中做了什么。这里只贴出main方法中重要的代码。

  1. //初始化类加载器并且将Catalina文件加载进内存中 
  2. bootstrap.init(); 
  3. String command = "start"; 
  4. if (args.length > 0) { 
  5.  command = args[args.length - 1]; 
  6. if (command.equals("startd")) { 
  7.  args[args.length - 1] = "start"; 
  8.  //调用Catalina.java的load方法 
  9.  daemon.load(args); 
  10.  //调用Catalina.java的start 
  11.  daemon.start(); 
  12. } else if (command.equals("stopd")) { 
  13.  args[args.length - 1] = "stop"; 
  14.  //调用Catalina.java的stop 
  15.  daemon.stop(); 
  16. } else if (command.equals("start")) { 
  17.  daemon.setAwait(true); 
  18.  daemon.load(args); 
  19.  daemon.start(); 
  20.  if (null == daemon.getServer()) { 
  21.  System.exit(1); 
  22.  } 
  23. } else if (command.equals("stop")) { 
  24.  daemon.stopServer(args); 
  25. } else if (command.equals("configtest")) { 
  26.  daemon.load(args); 
  27.  if (null == daemon.getServer()) { 
  28.  System.exit(1); 
  29.  } 
  30.  System.exit(0); 
  31. } else { 
  32.  log.warn("Bootstrap: command "" + command + "" does not exist."); 

这里是根据脚本中传入的不同命令,调用Catalina不同的方法。由于我们主要分析的Tomcat如何做到一键式启停的,所以我们主要分析Catalina的start方法。

在Catalina的satrt方法中我们看到了这一句

  1. getServer().start(); 

随后经过Debug都是经过了Lifecycle的start方法,我们把Lifecycle的方法列出来

  1. public interface Lifecycle { 
  2.  public void addLifecycleListener(LifecycleListener listener); 
  3.  public LifecycleListener[] findLifecycleListeners(); 
  4.  public void removeLifecycleListener(LifecycleListener listener); 
  5.  public void init() throws LifecycleException; 
  6.  public void start() throws LifecycleException; 
  7.  public void stop() throws LifecycleException; 
  8.  public void destroy() throws LifecycleException; 
  9.  public LifecycleState getState(); 
  10.  public String getStateName(); 
  11.  public interface SingleUse { 
  12.  } 

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读