Skip to content
Advertisement

Java H2 Mixed mode (embedded and server) external connection

I am trying to convert my existing embedded H2 database and enable external connections to it. Currently my properties are

spring.datasource.url=jdbc:h2:file:./db;AUTO_SERVER=TRUE;AUTO_SERVER_PORT=9090
spring.datasource.driverClassName=org.h2.Driver
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

spring.h2.console.enabled=true
spring.h2.console.path=/h2
spring.h2.console.settings.web-allow-others=true
server.ssl.enabled=true
server.ssl.key-store-password=####
server.ssl.key-password=###
server.ssl.key-store-type=JKS
etc

For a local connection to my db in this mode I seem to be able to connect to “jdbc:h2:file:./db;AUTO_SERVER=TRUE;AUTO_SERVER_PORT=9090” through my intellej IDE.

If this database is hosted on a external server how do i connect to it? I have tried putting the hostname into this URL such as at jdbc:h2:file:123.456.789.10/db;AUTO_SERVER=TRUE;AUTO_SERVER_PORT=9090 But it is unable to connect.

Advertisement

Answer

You need to launch a separate H2 Server process on the host where you want to store your database files. https://h2database.com/html/tutorial.html#using_server

After that you will be able to use remote connections to it with remote URLs: https://h2database.com/html/features.html#database_url You need also to remove H2 console from your application, you will be able to use web interface of the server instead.

Don’t forget to enable remote access via TCP and web port on the server. You should also guard your server with firewall to prevent access from untrusted hosts. H2 is not a secure container, database users with ADMIN privileges have full access to the system by design as server’s account and possibly the security manager allows.

AUTO_SERVER cannot work over network.

Advertisement