​官方说: h2控制台配置文件.h2.server.properties 在用户的主目录​​​.例如window安装用户主目录如下 ​​C:\Documents and Settings\[username]​​. 配置包含应用的各种设置和h2启动自动调用参数信息。

参数信息如下:


  • ​webAllowOthers​​: 允许其它电脑连接.
  • ​webPort​​: h2控制台的端口。
  • ​webSSL​​: use encrypted (HTTPS) connections.

额外的信息如:

上次登录的连接信息格式:

​<number>=<name>|<driver>|<url>|<user>​

例如: ​​1=Generic H2 (Embedded)|org.h2.Driver|jdbc\:h2\:~/test|sa​


一  h2服务端开启


第一种方式,通过spring的工厂方法创建


    <!-- Spring中h2 TCP Server 配置 -->  

    <bean id="h2Server" class="org.h2.tools.Server"  

           factory-method="createTcpServer" init-method="start" destroy-method="stop">  

           <constructor-arg value="-tcp,-tcpAllowOthers,-tcpPort,9092" />  

    </bean>  


第二种方式,直接使用Server创建。



windows服务器端的数据连接配置如下


url=jdbc:h2:tcp://192.168.108.221:6678/{文件的绝对路径}


linux或者windows的操作系统的默认根目录+db文件路径


url=jdbc:h2:tcp://192.168.108.221:6678/~/{文件的相对路径}


比如linux系统默认目录为usr/vasuser/  tomcat目录为/usr/vasuser/tomcat/webapps/data/cashDb


则访问端url 为~/tomcat/webapps/data/cashDb


如果使用绝对路径,报错如下:



二 调用远程h2服务


    package com.cyb.h2;


    import java.sql.Connection;

    import java.sql.DriverManager;

    import java.sql.ResultSet;

    import java.sql.SQLException;

    import java.sql.Statement;


    import org.h2.tools.Server;


    /**

     * 作者 : iechenyb<br>

     * 类描述: 说点啥<br>

     * 创建时间: 2018年5月31日

     */

    public class H2Demo {

        private Server server;

        private String port = "9080";

        //linux   ~/tomcat/webapps/data/cashDb

        private String dbDir = "d://data/sample;CACHE_SIZE=32384;MAX_LOG_SIZE=32384;mv_store=false";// ./h2db/

        private String user = "sa";

        private String password = "";


        public void startServer() {

            try {

                System.out.println("正在启动h2...");

                server = Server.createTcpServer(new String[] { "-tcp", "-tcpAllowOthers", "-tcpPort", port }).start();

            } catch (SQLException e) {

                System.out.println("启动h2出错:" + e.toString());

                e.printStackTrace();

                throw new RuntimeException(e);

            }

        }


        public void stopServer() {

            if (server != null) {

                System.out.println("正在关闭h2...");

                server.stop();

                System.out.println("关闭成功.");

            }

        }


        public void useH2() {

            try {

                Class.forName("org.h2.Driver");

                Connection conn = DriverManager.getConnection("jdbc:h2:tcp://192.168.16.211:" + port + "/" + dbDir, user,

                        password);

                Statement stat = conn.createStatement();

                // insert data

                stat.execute("DROP TABLE IF EXISTS TEST");

                stat.execute("CREATE TABLE TEST(NAME VARCHAR)");

                stat.execute("INSERT INTO TEST VALUES('Hello World')");

                // use data

                ResultSet result = stat.executeQuery("select name from test ");

                int i = 1;

                while (result.next()) {

                    System.out.println(i++ + ":" + result.getString("name"));

                }

                result.close();

                stat.close();

                conn.close();

            } catch (Exception e) {

                e.printStackTrace();

            }

        }


        public static void main(String[] args) {

            System.out.println("*********start***********");

            H2Demo h2 = new H2Demo();

            h2.startServer();//调用远端服务时,不需要开启server

            h2.useH2();

            // h2.stopServer();

            System.out.println("*********end***********");

        }

    }



三 开放h2访问界面


    <!-- 使用监听器启动和停止数据库 -->

          <listener>

            <listener-class>me.gacl.web.listener.H2DBServerStartListener</listener-class>

        </listener>


        <!-- 使用H2控制台的Servlet H2控制台是一个独立的应用程序,包括它自己的Web服务器,但它可以作为一个servlet作为-->

        <servlet>

            <servlet-name>H2Console</servlet-name>

            <servlet-class>org.h2.server.web.WebServlet</servlet-class>

             <init-param>

                <param-name>webAllowOthers</param-name>

                <param-value></param-value>

            </init-param>

            <init-param>

                <param-name>trace</param-name>

                <param-value></param-value>

            </init-param>

            <load-on-startup>1</load-on-startup>

        </servlet>

        <!-- 映射H2控制台的访问路径 -->

        <servlet-mapping>

            <servlet-name>H2Console</servlet-name>

            <url-pattern>/console/*</url-pattern>

        </servlet-mapping>