标题
标题实在不知道写什么好。文不扣题,写一些关于读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 --------------------------------------------------------------------------- setlocal rem Guess CATALINA_HOME if not defined rem 这里写义了一个叫CURRENT_DIR的变量,等于当前路径。 rem 这里的cd可以视为环境变量。 rem 自动批处理的判断语句比较简单,不支持代码块,依靠goto跳转语句实现某一段代码的跳过 rem 这个if的作用应该是判断了是否存在环境变量CATALINA_HOME,这部份是我所关心的。 rem 当CATALINA_HOME为空的时候,会取当前路径作为CATALINA_HOME。 rem set是赋值语句,但这个CURRENT_DIR却不是个环境变量。 set "CATALINA_HOME=%CURRENT_DIR%" set "CATALINA_HOME=%cd%" rem :是一个标签的开始符,有了这个标签,才可以去用goto语句做跳转。 rem echo是输出语句。 set "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat" rem Check that target executable exists rem Get remaining unshifted command line arguments and save them in the call "%EXECUTABLE%" start %CMD_LINE_ARGS% :end |
好吧,先看这么多,码代码去了。