S_a_k_Uの日記みたいなDB

~サクゥーと呼ばないで~

ぐうたらな人向け???

わざわざランチャで起動するのも面倒かなと思ったので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を起動しました。");
        
    }

}