TOMCAT8.5-说一说读startup.bat的小结

标题

标题实在不知道写什么好。文不扣题,写一些关于读startup.bat之后总结的关于自动批处理有关的知识。

事情的背景

一台生产机上跑了两个Tomcat8.0,分别负责一个项目。这Tomcat8.0存在一个问题是,其bin目录下缺少service.bat、tomcat8.exe、tomcat8w.exe等文件,我就不知道怎么把它做成服务了。近期决定要解决一下这个问题。于是去官网下载了一个Tomcat8.5,在本机试了一下看项目能跑,便决定用它去替换掉生产环境的Tomcat8.0。

总结一下就是我处理一台电脑上的多个tomcat,把它们加入到服务里。在这个过程中走了一些弯路,接触了一些之前没接触过的知识,特此做一下总结。

事情的经过

去生产机上处理之前,我又回忆了在本机上一下都改了哪些文件和设置。

conf\server.xml:去处理端口,这个是必然的,不多说。

conf\logging.properties:将其中的“java.util.logging.ConsoleHandler.encoding = UTF-8”,改成了“java.util.logging.ConsoleHandler.encoding = GBK”,去解决控制台里显示中文乱码的问题。额,可能生产机里把启动tomcat之后再也见不到控制台了。

建立了一个环境变量:CATALINA_HOME_85 = “D:\apache-tomcat-8.5.83”,创建了一个环境变量,专门指向Tomcat8.5的根目录。

修改了bin\catalina.bat、bin\startup.bat和bin\shutdown.bat,把其中所有的“CATALINA_HOME”改成了“CATALINA_HOME_85”。

在想怎么处理JAVA_HOME,发现用户环境变量和系统环境变量里都定义了JAV_HOME,并且路径不同,赶紧去查了一下 当前是哪个JAVA_HOME在起作用。用的是如下命令输出当前系统中起作用的JAVA_HOME的值,经过比对发现,起作用的是用户环境量里的JAVA_HOME。

echo %JAVA_HOME%

到这里,决定去生产环境里看看。

由于生产环境里跑着两个tomcat,那么首先我要新建两个环境变量:CATALINA_HOME_85_A和CATALINA_HOME_85_B,这时候却发现当前只定义了相对应的CATALINA_HOME_A,而且,并有关TOMCAT路径的只有其中一个项目的一个环境变量,那么,另外一个TOMCAT是怎么工作的呢,第一想法是查一下TOMCAT8.0里的startup.bat是怎么写的。

走心的读者一定会发现,我不是第一次干这种事儿了,之前一定有类似的处理startup.bat实现相同效果的经历,无非这次需要在TOMCAT8.5里做类似的事情。上次经历了什么真的记不清了,一定是隔了太久了吧。只是这次是按捺不住心中的好奇,去读了一遍这个自动处理文件。

rem @echo off 我的理解,它是控制文字的开关

@echo off

rem rem是自动批处理的注释的关键字。以下是一大段的介绍。
rem Licensed to the Apache Software Foundation (ASF) under one or more
rem contributor license agreements.  See the NOTICE file distributed with
rem this work for additional information regarding copyright ownership.
rem The ASF licenses this file to You under the Apache License, Version 2.0
rem (the "License"); you may not use this file except in compliance with
rem the License.  You may obtain a copy of the License at
rem
rem     http://www.apache.org/licenses/LICENSE-2.0
rem
rem Unless required by applicable law or agreed to in writing, software
rem distributed under the License is distributed on an "AS IS" BASIS,
rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
rem See the License for the specific language governing permissions and
rem limitations under the License.

rem ---------------------------------------------------------------------------
rem Start script for the CATALINA Server
rem ---------------------------------------------------------------------------

setlocal

rem Guess CATALINA_HOME if not defined

rem 这里写义了一个叫CURRENT_DIR的变量,等于当前路径。

rem 这里的cd可以视为环境变量。
set "CURRENT_DIR=%cd%"

rem 自动批处理的判断语句比较简单,不支持代码块,依靠goto跳转语句实现某一段代码的跳过

rem 这个if的作用应该是判断了是否存在环境变量CATALINA_HOME,这部份是我所关心的。

rem 当CATALINA_HOME为空的时候,会取当前路径作为CATALINA_HOME。
if not "%CATALINA_HOME%" == "" goto gotHome

rem set是赋值语句,但这个CURRENT_DIR却不是个环境变量。

set "CATALINA_HOME=%CURRENT_DIR%"
if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome
cd ..

set "CATALINA_HOME=%cd%"
cd "%CURRENT_DIR%"

rem :是一个标签的开始符,有了这个标签,才可以去用goto语句做跳转。
:gotHome
if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome

rem echo是输出语句。
echo The CATALINA_HOME environment variable is not defined correctly
echo This environment variable is needed to run this program
goto end
:okHome

set "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat"

rem Check that target executable exists
if exist "%EXECUTABLE%" goto okExec
echo Cannot find "%EXECUTABLE%"
echo This file is needed to run this program
goto end
:okExec

rem Get remaining unshifted command line arguments and save them in the
set CMD_LINE_ARGS=
:setArgs
if ""%1""=="""" goto doneSetArgs
set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1
shift
goto setArgs
:doneSetArgs

call "%EXECUTABLE%" start %CMD_LINE_ARGS%

:end

好吧,先看这么多,码代码去了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rarenmen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值