わざわざランチャで起動するのも面倒かなと思ったのでw
Webアプリが起動する時に、DBも起動する。
Webアプリが停止する時に、DBも停止する。
そんなクラス。
web.xmlにcontext-paramタグとlistenerタグを書くと動きます。
import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import org.h2.tools.Server; public class H2StartListener implements ServletContextListener { private volatile Server h2server = null; @Override public void contextDestroyed(ServletContextEvent arg0) { System.out.println("H2を停止します..."); this.h2server.stop(); this.h2server.shutdown(); System.out.println("H2を停止しました。"); } @Override public void contextInitialized(ServletContextEvent arg0) { String baseDir = arg0.getServletContext().getInitParameter("h2.BASE_DIR"); String tcpPort = arg0.getServletContext().getInitParameter("h2.PORT"); if ((baseDir == null) || (baseDir.length() == 0)) { baseDir = "tcp/localhost"; } if ((tcpPort == null) || (tcpPort.length() == 0)) { tcpPort = "9092"; } System.out.println("H2を起動します..."); System.out.println("h2.BASE_DIR: " + baseDir); System.out.println("h2.PORT : " + tcpPort); try { String [] params = {"-baseDir", baseDir, "-tcpPort", tcpPort }; this.h2server = Server.createTcpServer(params); this.h2server.start(); } catch (Throwable t) { System.out.println("H2の起動に失敗しました。"); throw new RuntimeException("H2StartListenerで例外が発生しました", t); } System.out.println("H2を起動しました。"); } }