SpringBoot
Tutorial SpringBoot: Configuración base de datos H2
Aprende a configurar la base de datos H2 en Spring Boot para entornos de desarrollo y testing con datos en memoria y consola web.
Aprende SpringBoot y certifícateConfiguración base de datos H2
H2 es una base de datos en memoria especialmente útil para el desarrollo y testing de aplicaciones Spring Boot. Su principal ventaja radica en que no requiere instalación ni configuración compleja, ya que se ejecuta directamente en la JVM de nuestra aplicación.
Esta base de datos resulta ideal para entornos de desarrollo donde necesitamos datos temporales que se recrean cada vez que iniciamos la aplicación, permitiendo un ciclo de desarrollo más ágido y sin dependencias externas.
Dependencias necesarias
Para utilizar H2 en nuestro proyecto Spring Boot, necesitamos agregar las dependencias correspondientes en el archivo pom.xml
:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
La dependencia spring-boot-starter-data-jpa
incluye todo lo necesario para trabajar con JPA, mientras que h2
proporciona el driver de la base de datos. El scope runtime
indica que H2 solo se necesita durante la ejecución, no durante la compilación.
Configuración básica en application.properties
Spring Boot detecta automáticamente H2 en el classpath y la configura por defecto. Sin embargo, podemos personalizar su comportamiento mediante el archivo application.properties
:
# Configuración de la base de datos H2
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
# Configuración JPA/Hibernate
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.show-sql=true
La URL jdbc:h2:mem:testdb
especifica que utilizaremos una base de datos en memoria llamada testdb
. El usuario por defecto es sa
(system administrator) sin contraseña.
Habilitación de la consola H2
Una característica muy útil de H2 es su consola web integrada, que nos permite visualizar y manipular los datos directamente desde el navegador:
# Habilitar consola H2
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
Con esta configuración, podemos acceder a la consola visitando http://localhost:8080/h2-console
cuando nuestra aplicación esté ejecutándose. La consola nos proporciona una interfaz gráfica para ejecutar consultas SQL y examinar la estructura de las tablas.
Configuración de persistencia de datos
Por defecto, H2 funciona como una base de datos en memoria, lo que significa que todos los datos se pierden al reiniciar la aplicación. Si necesitamos que los datos persistan entre reinicios durante el desarrollo, podemos configurar H2 para usar un archivo:
# Base de datos persistente en archivo
spring.datasource.url=jdbc:h2:file:./data/testdb
Esta configuración crea un archivo de base de datos en la carpeta data
del proyecto. Los datos se mantendrán entre reinicios, pero seguiremos teniendo la simplicidad de configuración característica de H2.
Inicialización de datos
Spring Boot permite cargar datos iniciales automáticamente mediante archivos SQL. Podemos crear archivos en el directorio src/main/resources
:
Archivo schema.sql
para definir la estructura:
CREATE TABLE IF NOT EXISTS usuarios (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
email VARCHAR(150) UNIQUE NOT NULL,
activo BOOLEAN DEFAULT TRUE
);
Archivo data.sql
para insertar datos iniciales:
INSERT INTO usuarios (nombre, email) VALUES
('Juan Pérez', 'juan@ejemplo.com'),
('María García', 'maria@ejemplo.com'),
('Carlos López', 'carlos@ejemplo.com');
Spring Boot ejecutará automáticamente estos archivos al iniciar la aplicación, creando las tablas y poblándolas con datos de prueba.
Configuración avanzada para desarrollo
Para optimizar el uso de H2 durante el desarrollo, podemos aplicar configuraciones adicionales:
# Configuración optimizada para desarrollo
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.defer-datasource-initialization=true
spring.sql.init.mode=always
# Logging de SQL para debugging
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
logging.level.org.hibernate.SQL=DEBUG
La propiedad defer-datasource-initialization=true
asegura que los archivos data.sql
se ejecuten después de que Hibernate haya creado las tablas. El modo always
para spring.sql.init.mode
garantiza que los scripts de inicialización se ejecuten en cada arranque.
Verificación de la configuración
Para verificar que H2 está funcionando correctamente, podemos crear un controlador de prueba simple:
@RestController
public class TestController {
@Autowired
private DataSource dataSource;
@GetMapping("/db-info")
public String getDatabaseInfo() throws SQLException {
try (Connection connection = dataSource.getConnection()) {
DatabaseMetaData metaData = connection.getMetaData();
return String.format("Base de datos: %s %s",
metaData.getDatabaseProductName(),
metaData.getDatabaseProductVersion());
}
}
}
Este controlador nos permite confirmar que la conexión a H2 está establecida correctamente y obtener información sobre la versión de la base de datos en uso.
Otras lecciones de SpringBoot
Accede a todas las lecciones de SpringBoot y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.
Introducción A Spring Boot
Introducción Y Entorno
Spring Boot Starters
Introducción Y Entorno
Inyección De Dependencias
Introducción Y Entorno
Crear Proyecto Con Spring Initializr
Introducción Y Entorno
Crear Proyecto Desde Visual Studio Code
Introducción Y Entorno
Controladores Spring Mvc
Spring Mvc Con Thymeleaf
Vista En Spring Mvc Con Thymeleaf
Spring Mvc Con Thymeleaf
Controladores Spring Rest
Spring Mvc Con Thymeleaf
Open Api Y Cómo Agregarlo En Spring Boot
Spring Mvc Con Thymeleaf
Servicios En Spring
Spring Mvc Con Thymeleaf
Clientes Resttemplate Y Restclient
Spring Mvc Con Thymeleaf
Rxjava En Spring Web
Spring Mvc Con Thymeleaf
Métodos Post En Controladores Mvc
Spring Mvc Con Thymeleaf
Métodos Get En Controladores Mvc
Spring Mvc Con Thymeleaf
Formularios En Spring Mvc
Spring Mvc Con Thymeleaf
Crear Proyecto Con Intellij Idea
Spring Mvc Con Thymeleaf
Introducción A Los Modelos Mvc
Spring Mvc Con Thymeleaf
Layouts Y Fragmentos En Thymeleaf
Spring Mvc Con Thymeleaf
Estilización Con Bootstrap Css
Spring Mvc Con Thymeleaf
Gestión De Errores Controlleradvice
Spring Mvc Con Thymeleaf
Estilización Con Tailwind Css
Spring Mvc Con Thymeleaf
Introducción A Controladores Rest
Spring Rest
Métodos Get En Controladores Rest
Spring Rest
Métodos Post En Controladores Rest
Spring Rest
Métodos Delete En Controladores Rest
Spring Rest
Métodos Put Y Patch En Controladores Rest
Spring Rest
Gestión De Errores Restcontrolleradvice
Spring Rest
Creación De Entidades Jpa
Spring Data Jpa
Asociaciones De Entidades Jpa
Spring Data Jpa
Repositorios Spring Data
Spring Data Jpa
Métodos Find En Repositorios
Spring Data Jpa
Inserción De Datos
Spring Data Jpa
Actualizar Datos De Base De Datos
Spring Data Jpa
Borrar Datos De Base De Datos
Spring Data Jpa
Consultas Jpql Con @Query En Spring Data Jpa
Spring Data Jpa
Api Query By Example (Qbe)
Spring Data Jpa
Api Specification
Spring Data Jpa
Repositorios Reactivos
Spring Data Jpa
Configuración Base De Datos Postgresql
Spring Data Jpa
Configuración Base De Datos Mysql
Spring Data Jpa
Introducción A Jpa Y Spring Data Jpa
Spring Data Jpa
Configuración Base De Datos H2
Spring Data Jpa
Testing Unitario De Componentes Y Servicios
Testing Con Spring Test
Testing De Repositorios Spring Data Jpa
Testing Con Spring Test
Testing Controladores Spring Mvc Con Thymeleaf
Testing Con Spring Test
Testing Controladores Rest Con Json
Testing Con Spring Test
Testing De Aplicaciones Reactivas Webflux
Testing Con Spring Test
Testing De Seguridad Spring Security
Testing Con Spring Test
Testing Con Apache Kafka
Testing Con Spring Test
Introducción Al Testing
Testing Con Spring Test
Introducción A Spring Security
Seguridad Con Spring Security
Seguridad Basada En Formulario
Seguridad Con Spring Security
Registro De Usuarios En Api Rest
Seguridad Con Spring Security
Login De Usuarios En Api Rest
Seguridad Con Spring Security
Validación Jwt En Api Rest
Seguridad Con Spring Security
Autenticación Jwt Completa En Api Rest
Seguridad Con Spring Security
Seguridad Jwt En Api Rest Reactiva Spring Webflux
Seguridad Con Spring Security
Autenticación Y Autorización Con Anotaciones
Seguridad Con Spring Security
Fundamentos De Autenticación Oauth
Seguridad Con Spring Security
Autenticación Oauth Con Github
Seguridad Con Spring Security
Testing Con Spring Security Test
Seguridad Con Spring Security
Autenticación Oauth En Api Rest
Seguridad Con Spring Security
Introducción A Spring Webflux
Reactividad Webflux
Spring Data R2dbc
Reactividad Webflux
Controlador Reactivo Basado En Anotaciones
Reactividad Webflux
Controlador Reactivo Basado En Funciones
Reactividad Webflux
Operadores Reactivos Básicos
Reactividad Webflux
Operadores Reactivos Avanzados
Reactividad Webflux
Cliente Reactivo Webclient
Reactividad Webflux
Introducción E Instalación De Apache Kafka
Mensajería Asíncrona
Crear Proyecto Con Apache Kafka
Mensajería Asíncrona
Creación De Producers
Mensajería Asíncrona
Creación De Consumers
Mensajería Asíncrona
Kafka Streams En Spring Boot
Mensajería Asíncrona
Integración Con Angular
Integración Frontend
Integración Con React
Integración Frontend
Integración Con Vue
Integración Frontend
Ejercicios de programación de SpringBoot
Evalúa tus conocimientos de esta lección Configuración base de datos H2 con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.
Crear entidades JPA
Controladores Spring MVC
Asociaciones de entidades JPA
Creación de entidades
Reto servicio PedidoService
Reto controlador REST
Consultas JPQL
Reto test controlador REST
Anotaciones JPA
Relación ManyToOne con Tarea y Proyecto
CRUD Customers Spring MVC + Spring Data JPA
Backend API REST con Spring Boot
Filtrar categorías por nombre
Reto controlador MVC Categoría
Entidad y repositorio
Métodos derivados y consultas JPQL en repositorios
En esta lección
Objetivos de aprendizaje de esta lección
- Comprender qué es y para qué se utiliza la base de datos H2 en memoria.
- Añadir las dependencias necesarias para integrar H2 en un proyecto Spring Boot.
- Configurar la conexión a H2 mediante el archivo application.properties.
- Habilitar y utilizar la consola web integrada de H2 para gestionar datos.
- Inicializar datos y persistirlos entre reinicios mediante archivos SQL y configuración de base de datos en archivo.