H2 Datenbank im Standalone Betrieb

Für ein kleines privates Projekt benötige ich eine H2 Standalone Datenbank. Diese soll über TCP erreichbar sein und auch über eine Web-Console verfügen. Der TCP Server und die Web-Console werden mit zwei unterschiedlichen Ports gestartet.

// ... nur ein Snippet ...
         dataSource = new DriverManagerDataSource();
         dataSource.setDriverClassName("org.h2.Driver");
         String connectionURL = "jdbc:h2:tcp://localhost:#PORT#/~/#DATABASENAME#;ACCESS_MODE_DATA=rw".replaceAll(
               "#PORT#", String.valueOf(port)).replaceAll("#DATABASENAME#", databaseName);
         logger.info(connectionURL);

         dataSource.setUrl(connectionURL);
         dataSource.setUsername(username);
         dataSource.setPassword(password);
         String [] tcpConnection = new String[] { "-tcp", "-tcpPort", String.valueOf(port) };
         String [] webConnection = new String[] { "-web", "-webPort", String.valueOf(webPort) };
         tcpServer = Server.createTcpServer(tcpConnection).start();
         webServer = Server.createWebServer(webConnection).start();
         logger.info(tcpServer.getURL());
         connection = dataSource.getConnection();

         Server.startWebServer(connection);
         logger.info("WebServer for H2 startet!");

Wird diese Datenbank gestartet ist es z.B. über eine Hibernate Applikation erreichbar. Beispiel Snippet aus der persistence.xml:

<property name="hibernate.connection.url" value="jdbc:h2:tcp://localhost:9092/~/MyRemoteStandalone;ACCESS_MODE_DATA=rw" />
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"></property>
<property name="hibernate.connection.driver_class" value="org.h2.Driver" />
<property name="hibernate.connection.password" value="sa" />
<property name="hibernate.connection.username" value="sa" />
<property name="hibernate.hbm2ddl.auto" value="update" />

Die JUnit Test laufen auch auf dieser Umgebung.

Siehe Github für ein Beispiel-Projekt.