在使用 tomcat 作为 java 开发的 web 容器时,如果 tomcat 的配置存在问题,启动 tomcat 时,黑色 DOS 弹框闪一下就没有了。对于我们定位问题非常不友好,怎么解决这个痛点呢?
通过修改 catalina.bat 文件,不使用 start 命令去执行 java.exe 就可以了。修改方式如下:
(1)打开 catalina.bat 文件,找到如下脚本片段:
:doStart shift if "%TITLE%" == "" set TITLE=Tomcat set _EXECJAVA=start "%TITLE%" %_RUNJAVA% if not ""%1"" == ""-security"" goto execCmd shift echo Using Security Manager set "SECURITY_POLICY_FILE=%CATALINA_BASE%confcatalina.policy" goto execCmd
(2)将上面脚本片段中的 set _EXECJAVA=start "%TITLE%" %_RUNJAVA% 修改为 set _EXECJAVA=%_RUNJAVA% 即可。修改后完整脚本片段如下:
:doStart shift if "%TITLE%" == "" set TITLE=Tomcat set _EXECJAVA=%_RUNJAVA% if not ""%1"" == ""-security"" goto execCmd shift echo Using Security Manager set "SECURITY_POLICY_FILE=%CATALINA_BASE%confcatalina.policy" goto execCmd
此时,再去执行 startup.bat 脚本启动 tomcat,即使 tomcat 配置存在问题也不会一闪而过。
注意:修改后需要使用 DOS 命令行去运行 startup.bat 脚本,否则起不到作用。
我们故意配置两次 jdwp,如下:
rem ----- Execute The Requested Command --------------------------------------- set JAVA_OPTS=%JAVA_OPTS% -server -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=58080 set JAVA_OPTS=%JAVA_OPTS% -server -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=58080
运行效果如下图:
D:apache-tomcat-7.0.109in>startup.bat Using CATALINA_BASE: "D:apache-tomcat-7.0.109" Using CATALINA_HOME: "D:apache-tomcat-7.0.109" Using CATALINA_TMPDIR: "D:apache-tomcat-7.0.109 emp" Using JRE_HOME: "D:Javajdk1.8.0_171" Using CLASSPATH: "D:apache-tomcat-7.0.109inootstrap.jar;D:apache-tomcat-7.0.109in omcat-juli.jar" Using CATALINA_OPTS: "" ERROR: Cannot load this JVM TI agent twice, check your java command line for duplicate jdwp options. Error occurred during initialization of VM agent library failed to init: jdwp D:apache-tomcat-7.0.109in>
上面结果中已经明确给出了错误信息,重复 jdwp 选项。
到这里就结束了,本文只教你怎样去获取错误信息,并不教你如何去解决遇到的实际问题,每个启动 tomcat 一闪而过可能都有不同的错误,这需要读者自行研究……