H2 base mémoire et client WEB intégré
Rédigé par gorki Aucun commentaireLe problème :
La base H2 intègre un mode SERVEUR comme Hsqldb ou Derby, mais aussi un mode mixe qui permet au premier client connecté à la base de démarrer un serveur.
Très pratique, en utilisant un client quelconque , on peut se connecter au serveur !
Deux problèmes :
- quel client ?
- le mode serveur, OK, mais il ne fonctionne pas avec la base mémoire embarquée !
Solution : quel client ?
Tombé un peu par hasard dessus : ici sur stackoverflow
Il y a une liste ici : http://h2database.com/html/links.html#tools
La console WEB n'est pas intégrée au driver H2, même si dans la librairie H2 il y a la console H2 ; au départ je pensais qu'on aurais pu y accéder en tapant l'URL de la base de données + /console par exemple :)
Pour la console H2 :
- soit vous avez le raccourci si vous avez installé H2, cf la doc
- soit via le jar : java org.h2.tools.Console -web -browser
- sinon, on peut la démarrer tout simplement :
import java.sql.SQLException; import org.h2.tools.Console; public class H2Client { public static void main(String[] args) { try { new Console().runTool(); } catch (SQLException e) { e.printStackTrace(); } } }
Entrer l'url indiquée dans la configuration ou affichée lors du lancement du serveur pour la base mémoire.
Solution : serveur et base mémoire ?
Idem, dans le même post : ici sur stackoverflow
Sur disque
Ajouter AUTOSERVER=TRUE à la fin de la déclaration de la base de données :
Exemple :
jdbc:h2:~/my-database/db2;AUTO_SERVER=TRUE
En base mémoire
Il faut démarrer le serveur dans la JVM qui utilise la base mémoire embarquée :
Pour la déclaration base mémoire classique :
- jdbc:h2:mem:test
Server server = Server.createTcpServer().start(); System.out.println("URL du serveur H2 : jdbc:h2:" + server.getURL() + "/mem:test");
Notez le "mem:test" à la fin de l'URL, à adapter si vous modifier la votre.
En fin de démarrage de Spring Boot, ça donne :
@Bean public Server initH2Server() { try { Server server = Server.createTcpServer().start(); System.out.println("URL: jdbc:h2:" + server.getURL() + "/mem:test"); return server; } catch (SQLException e) { e.printStackTrace(); } return null; }