Base de Datos en memoria H2 con Spring Boot
![Base de Datos en memoria H2 con Spring Boot](https://refactorizando.com/wp-content/uploads/2021/07/H2-Database-1.jpg)
Base de Datos en memoria H2 con Spring Boot
Uno de las necesidades que solemos tener cuando trabajamos con bases de datos sql es hacer uso de una base de datos independiente para poder tener una batería de test. Ese es el objetivo de esta entrada de Base de Datos en memoria H2 con Spring Boot, ver como podemos hacer uso de una Base de Datos en memoria para nuestros servicios.
¿Qué es H2?
H2 es una base de datos relacional que se encuentra escrita en Java y funciona como una base de datos en memoria, cuyo uno de sus puntos fuertes es que puede trabajar como una base de datos embebida en aplicaciones Java o ejecutarse en modo cliente servidor. Es decir, que añadida en nuestras aplicaciones como una dependencia más y una vez configurada la conexión, nos va a permitir realizar pruebas y trabajar como si fuera una base de datos relacional. Pero hay que tener en cuenta que es en memoria, por lo que nunca debería ser usada para entornos productivos.
En este enlace podemos ver los diferentes modos de funcionamiento de H2.
Configurar una base de datos H2 con Spring Boot
Para poder hacer uso de una base de datos H2 en Spring Boot, va a ser necesario añadir las dependencias de H2 a nuestro proyecto.
Dependencia Maven H2 con Spring Boot
Vamos a añadir la única dependencia maven que hace falta para incorporar H2 como base de datos embebida:
<dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> </dependency>
Por lo general esta base de datos se usará con test por lo que es mejor añadir ese scope:
<dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>test</scope> </dependency>
Y no te olvides de añadir en tu pom.xml la dependencia de spring data para realizar la autoconfiguración y conexión con la base de datos, lo cual nos facilitará las conexiones con las bases de datos gracias a Hibernate.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>
Una vez hemos añadido la dependencia maven necesaria habrá que realizar la configuración en el fichero application.properties o application.yaml para poder conectarnos con nuestra base de datos.
Configurar conexión de Spring Boot con H2
Para establecer la conexión con nuestra base de datos H2, es necesario indicarle a Spring Boot como conectarse, para ello lo hacemos a través del fichero application.yaml o application.properties.
Por defecto, Spring Boot nos va a configurar nuestra aplicación para conectarnos a nuestra base de datos en memoria H2 con username sa y la password vacía.
Aunque podemos parametrizar nuestra aplicación con los siguientes parámetros:
spring.datasource.url: jdbc:h2:mem:testdb spring.datasource.driverClassName: org.h2.Driver spring.datasource.username: sa spring.datasource.password: password spring.jpa.database-platform: org.hibernate.dialect.H2Dialect spring.h2.console.enabled: true
Hay que tener en cuenta que estamos usando una base de datos en memoria, por lo que cuando la aplicación finalice, la base de datos se borrara. Por lo que para poder persistir los datos de manera física vamos a añadir el siguiente parámetro:
spring.datasource.url=jdbc:h2:file:/data/refactorizando/h2
Acceder a la interfaz gráfica de H2
La Base de Datos H2 tiene una interfaz gráfica a la que se accede a través del navegador, que funcionará como un gestor de base de datos, lo que nos permitirá ver tablas, roles y realizar queries. La consola de H2 no se encuentra activada por defecto en Spring, por lo que vamos a añadir el siguiente comando por configuración:
spring.h2.console.enabled=true
Una vez arranca la aplicación podemos acceder a la consola a través de este endpoint http://localhost:8080/h2-console.
![Login de base de datos H2 | Base de Datos en memoria H2 con Spring Boot](https://refactorizando.com/wp-content/uploads/2021/07/image-1.png)
No nos olvidemos que la url que hemos puesto en nuestro fichero de propiedades sea la misma que ponemos en JDBC URL
![Interfaz gráfica en H2](https://refactorizando.com/wp-content/uploads/2021/07/image-3-1024x603.png)
Una vez nos hemos conectado podemos comenzar a realizar queries.
En el caso en el que queramos que la dirección de acceso de H2 sea diferente a /h2-console podemos sobreescribir la propiedad en el application.properties o yaml.
spring.h2.console.path=/h2-console
Problemas y solución con H2
Uno de los problemas más típicos que nos puede ocurrir cuando hacemos uso de H2 es no haber definido el dialecto y tendríamos un error como el siguiente:
Table "ALL_SEQUENCES" not found; SQL statement:
Para solucionar este error hay que asegurarse de haber metido la siguiente línea:
properties.hibernate.dialect: org.hibernate.dialect.H2Dialect
Conclusión
H2 funciona como una base de datos en memoria que es perfecta para nuestras aplicaciones de Spring Boot para poder realizar la parte de test. En este artículo sobre Base de Datos en memoria H2 con Spring Boot, hemos visto su configuración. Si quieres ver un ejemplo completo puedes echar un ojo en nuestro github, en el este ejemplo que hacemos uso de H2.
Si necesitas más información puedes escribirnos un comentario o un correo electrónico a refactorizando.web@gmail.com o también nos puedes contactar por nuestras redes sociales Facebook o twitter y te ayudaremos encantados!
Gracias, perfecto para mis test