加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

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

发布时间:2019-11-05 02:17:54 所属栏目:业界 来源:今日头条
导读:在没有SpringBoot内嵌有Tomcat之前,我们都是将项目打为War包放在Tomcat的webapp目次下面,然后假如是Linux体系,运行呼吁start.sh、假如是Windows体系,运行呼吁start.bat往后就能启动起来并会见到页面。假如是想要遏制运行只必要运行shutdown.sh可能shut

执行剧本参数,执行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.  } 

(编辑:湖南网)

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

热点阅读