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.