Spring Boot

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ícate

Configuració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.

Aprende SpringBoot online

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

Spring Boot

Introducción Y Entorno

Spring Boot Starters

Spring Boot

Introducción Y Entorno

Inyección De Dependencias

Spring Boot

Introducción Y Entorno

Crear Proyecto Con Spring Initializr

Spring Boot

Introducción Y Entorno

Crear Proyecto Desde Visual Studio Code

Spring Boot

Introducción Y Entorno

Controladores Spring Mvc

Spring Boot

Spring Mvc Con Thymeleaf

Vista En Spring Mvc Con Thymeleaf

Spring Boot

Spring Mvc Con Thymeleaf

Controladores Spring Rest

Spring Boot

Spring Mvc Con Thymeleaf

Open Api Y Cómo Agregarlo En Spring Boot

Spring Boot

Spring Mvc Con Thymeleaf

Servicios En Spring

Spring Boot

Spring Mvc Con Thymeleaf

Clientes Resttemplate Y Restclient

Spring Boot

Spring Mvc Con Thymeleaf

Rxjava En Spring Web

Spring Boot

Spring Mvc Con Thymeleaf

Métodos Post En Controladores Mvc

Spring Boot

Spring Mvc Con Thymeleaf

Métodos Get En Controladores Mvc

Spring Boot

Spring Mvc Con Thymeleaf

Formularios En Spring Mvc

Spring Boot

Spring Mvc Con Thymeleaf

Crear Proyecto Con Intellij Idea

Spring Boot

Spring Mvc Con Thymeleaf

Introducción A Los Modelos Mvc

Spring Boot

Spring Mvc Con Thymeleaf

Layouts Y Fragmentos En Thymeleaf

Spring Boot

Spring Mvc Con Thymeleaf

Estilización Con Bootstrap Css

Spring Boot

Spring Mvc Con Thymeleaf

Gestión De Errores Controlleradvice

Spring Boot

Spring Mvc Con Thymeleaf

Estilización Con Tailwind Css

Spring Boot

Spring Mvc Con Thymeleaf

Introducción A Controladores Rest

Spring Boot

Spring Rest

Métodos Get En Controladores Rest

Spring Boot

Spring Rest

Métodos Post En Controladores Rest

Spring Boot

Spring Rest

Métodos Delete En Controladores Rest

Spring Boot

Spring Rest

Métodos Put Y Patch En Controladores Rest

Spring Boot

Spring Rest

Gestión De Errores Restcontrolleradvice

Spring Boot

Spring Rest

Creación De Entidades Jpa

Spring Boot

Spring Data Jpa

Asociaciones De Entidades Jpa

Spring Boot

Spring Data Jpa

Repositorios Spring Data

Spring Boot

Spring Data Jpa

Métodos Find En Repositorios

Spring Boot

Spring Data Jpa

Inserción De Datos

Spring Boot

Spring Data Jpa

Actualizar Datos De Base De Datos

Spring Boot

Spring Data Jpa

Borrar Datos De Base De Datos

Spring Boot

Spring Data Jpa

Consultas Jpql Con @Query En Spring Data Jpa

Spring Boot

Spring Data Jpa

Api Query By Example (Qbe)

Spring Boot

Spring Data Jpa

Api Specification

Spring Boot

Spring Data Jpa

Repositorios Reactivos

Spring Boot

Spring Data Jpa

Configuración Base De Datos Postgresql

Spring Boot

Spring Data Jpa

Configuración Base De Datos Mysql

Spring Boot

Spring Data Jpa

Introducción A Jpa Y Spring Data Jpa

Spring Boot

Spring Data Jpa

Configuración Base De Datos H2

Spring Boot

Spring Data Jpa

Testing Unitario De Componentes Y Servicios

Spring Boot

Testing Con Spring Test

Testing De Repositorios Spring Data Jpa

Spring Boot

Testing Con Spring Test

Testing Controladores Spring Mvc Con Thymeleaf

Spring Boot

Testing Con Spring Test

Testing Controladores Rest Con Json

Spring Boot

Testing Con Spring Test

Testing De Aplicaciones Reactivas Webflux

Spring Boot

Testing Con Spring Test

Testing De Seguridad Spring Security

Spring Boot

Testing Con Spring Test

Testing Con Apache Kafka

Spring Boot

Testing Con Spring Test

Introducción Al Testing

Spring Boot

Testing Con Spring Test

Introducción A Spring Security

Spring Boot

Seguridad Con Spring Security

Seguridad Basada En Formulario

Spring Boot

Seguridad Con Spring Security

Registro De Usuarios En Api Rest

Spring Boot

Seguridad Con Spring Security

Login De Usuarios En Api Rest

Spring Boot

Seguridad Con Spring Security

Validación Jwt En Api Rest

Spring Boot

Seguridad Con Spring Security

Autenticación Jwt Completa En Api Rest

Spring Boot

Seguridad Con Spring Security

Seguridad Jwt En Api Rest Reactiva Spring Webflux

Spring Boot

Seguridad Con Spring Security

Autenticación Y Autorización Con Anotaciones

Spring Boot

Seguridad Con Spring Security

Fundamentos De Autenticación Oauth

Spring Boot

Seguridad Con Spring Security

Autenticación Oauth Con Github

Spring Boot

Seguridad Con Spring Security

Testing Con Spring Security Test

Spring Boot

Seguridad Con Spring Security

Autenticación Oauth En Api Rest

Spring Boot

Seguridad Con Spring Security

Introducción A Spring Webflux

Spring Boot

Reactividad Webflux

Spring Data R2dbc

Spring Boot

Reactividad Webflux

Controlador Reactivo Basado En Anotaciones

Spring Boot

Reactividad Webflux

Controlador Reactivo Basado En Funciones

Spring Boot

Reactividad Webflux

Operadores Reactivos Básicos

Spring Boot

Reactividad Webflux

Operadores Reactivos Avanzados

Spring Boot

Reactividad Webflux

Cliente Reactivo Webclient

Spring Boot

Reactividad Webflux

Introducción E Instalación De Apache Kafka

Spring Boot

Mensajería Asíncrona

Crear Proyecto Con Apache Kafka

Spring Boot

Mensajería Asíncrona

Creación De Producers

Spring Boot

Mensajería Asíncrona

Creación De Consumers

Spring Boot

Mensajería Asíncrona

Kafka Streams En Spring Boot

Spring Boot

Mensajería Asíncrona

Integración Con Angular

Spring Boot

Integración Frontend

Integración Con React

Spring Boot

Integración Frontend

Integración Con Vue

Spring Boot

Integración Frontend

Accede GRATIS a SpringBoot y certifícate

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.

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.