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.