1-1) Bootstrapを利用する
準備
* $CCATALINA_HOME/bin内のjarファイル「bootstrap.jar」「commons-daemon.jar」「tomcat-juli.jar」を 事前に追加しておくこと
サンプル
TomcatStartter.java
* Tomcat の開始import org.apache.catalina.startup.Bootstrap; public class TomcatStartter { public static void main(String[] args) { try { TomcatStartter.start(); } catch (Exception ex) { ex.printStackTrace(); } } private static void start() { try { Bootstrap bootstrap = new Bootstrap(); bootstrap.setCatalinaHome("C:/tomcat7"); //bootstrap.setCatalinaBase("C:/tomcat7Sub1"); bootstrap.init(); bootstrap.setAwait(true); bootstrap.start(); } catch (Exception ex) { ex.printStackTrace(); } } }
TomcatStopper.java
* Tomcat の停止import org.apache.catalina.startup.Bootstrap; public class TomcatStopper { public static void main(String[] args) { try { TomcatStopper.stop(); } catch (Exception ex) { ex.printStackTrace(); } } private static void stop() { try { Bootstrap bootstrap = new Bootstrap(); bootstrap.setCatalinaHome("C:/tomcat7"); //bootstrap.setCatalinaBase("C:/tomcat7Sub1"); bootstrap.init(); bootstrap.setAwait(true); bootstrap.stopServer(); bootstrap.destroy(); } catch (Exception ex) { ex.printStackTrace(); } } }
注意
http://blogs.yahoo.co.jp/dk521123/33610584.htmlで行ったように、複数のインスタンスを動かすような場合は、 setCatalinaBase()を指定する(コメントアウトしている個所に注目) * Tomcat8 できない!??(エラーでた)
参考文献
http://telecastravinsky.blog.fc2.com/blog-entry-9.htmlBootstrapのソース
http://www.docjar.com/html/api/org/apache/catalina/startup/Bootstrap.java.html
BootstrapのAPI仕様
https://tomcat.apache.org/tomcat-8.0-doc/api/org/apache/catalina/startup/Bootstrap.html
1-2) shutdownポートを利用する(停止のみ)
サンプル
TomcatStopper2.java
import java.io.PrintWriter; import java.net.Socket; public class TomcatStopper2 { public static void main(String[] args) { try { System.out.println("stopping"); TomcatStopper2.stop(); } catch (Exception ex) { ex.printStackTrace(); } } private static void stop() { try (Socket socket = new Socket("localhost", 8005)) { if (socket.isConnected()) { try (PrintWriter printWriter = new PrintWriter(socket.getOutputStream(), true)) { printWriter.println("SHUTDOWN"); } } } catch (Exception ex) { ex.printStackTrace(); } } }
注意
http://blogs.yahoo.co.jp/dk521123/33578498.htmlで述べたように、 shutdownポートにデフォルトの場合はtelnetで接続して「SHUTDOWN」と 文字列を打ち込むことでTomcatを停止できてしまうので変更しておいた方がいいので 修正例を以下に記載しておく。 $CATALINA_HOME/conf/server.xml で、以下の箇所を修正。 【修正前】 <Server port="8005" shutdown="SHUTDOWN"> 【修正後(あくまで修正例)】 <Server port="28005" shutdown="SampleShutDownCommand"> 【Javaの修正】 try (Socket socket = new Socket("localhost", 28005)) { ・・・ printWriter.println("SampleShutDownCommand");