Integración de la base de datos H2 con Spring Boot

    ¿Qué es Spring Boot?

    Si eres un Spring desarrollador, seguramente está familiarizado con la sobrecarga de configuraciones repetitivas que necesitamos hacer para configurar un proyecto. Honestamente, es una actividad dolorosa y tediosa. Como desarrollador, nuestro enfoque debe estar en la lógica empresarial y no en la instalación y configuración del proyecto.

    La solución a este problema es Bota de Spring que según la documentación oficial sobre spring.io:

    “Spring Boot facilita la creación de aplicaciones independientes basadas en Spring de grado de producción que puede ejecutar”

    Analicemos un poco y expliquemos el significado de la definición:

    • ser único – Spring Boot, de forma predeterminada, admite una variedad de servidores web integrados que se ejecutan dentro de la aplicación. Esto elimina la necesidad de implementar cualquier war archivos. Es importante comprender que aquí la palabra “independiente” no no significa aplicación estándar de Java.
    • grado de producción – Las aplicaciones Spring Boot son de alta calidad y se pueden implementar en producción tal cual.
    • solo corre – Las aplicaciones Spring Boot se pueden ejecutar simplemente usando el main función O usando la java –jar mando. No es necesario implementarlo en servidores web externos, aunque podemos hacerlo si es necesario.

    Otra característica poderosa de Spring Boot es que es un marco llamado “testarudo”. Como se mencionó anteriormente, desarrollar una aplicación Spring tradicional requiere mucha configuración. Estas configuraciones no cambian mucho con el tiempo, por lo que terminan siendo un código estándar.

    Spring Boot autoconfigura todas las configuraciones de forma predeterminada en función de las dependencias presentes / disponibles en la ruta de clases. Por supuesto, puede volver a configurar o cambiar estas configuraciones si es necesario.

    ¿Qué es la base de datos H2?

    H2 es una base de datos de código abierto y está escrita en Java. Es muy rápido y de muy reducido tamaño. Se utiliza principalmente como una base de datos en memoria, lo que significa que almacena los datos en la memoria y no conservará los datos en el disco. Aunque si necesitamos conservar los datos, también lo admite.

    La base de datos H2 no se recomienda para entornos de producción y es ideal para un tipo de proyecto de PoC rápido en el que se necesita una base de datos simple.

    Puede integrarse fácilmente con Spring, que veremos en este tutorial.

    Diferencia entre bases de datos persistentes y en memoria

    Vale la pena comprender la diferencia entre las bases de datos persistentes y en memoria. Las bases de datos persistentes conservan los datos en la memoria física para que estén disponibles incluso si el servidor de la base de datos rebota. En el caso de las bases de datos en memoria, los datos se almacenan en la memoria del sistema y los datos se perderán cuando se cierre el programa.

    Las bases de datos en memoria son bastante útiles para las PoC y no se recomiendan para su uso en aplicaciones de producción.

    Las bases de datos persistentes populares incluyen Oracle, MySQL, Postgres, etc., mientras que H2 se usa comúnmente como base de datos en memoria.

    Configuración del proyecto Spring Boot

    Hay dos formas en las que podemos crear un proyecto Spring Boot, y en esta sección, vamos a discutir ambas formas para que podamos familiarizarnos con ambos enfoques:

    1. Spring Initializr

    Spring Initializr es una forma conveniente de generar proyectos Spring Boot y es administrada por spring.io. Esto ayuda a generar un proyecto Spring Boot en línea, sin necesidad de descargar ninguna herramienta.

    Abre el start.spring.io URL en su navegador e ingrese los detalles requeridos. Asegúrese de agregar dependencias Web, H2 y JPA, ya que estas bibliotecas serán necesarias para nuestro proyecto.

    Al hacer clic en el botón “Generar proyecto” se descargará el SpringBootH2Integration.zip archivo.

    El archivo zip extraído se puede importar fácilmente como “Proyecto Maven existente” en Eclipse

    2. Conjunto de herramientas Spring

    Conjunto de herramientas Spring (también conocido como STS) es un IDE construido sobre Eclipse y es la forma más común de generar un proyecto.

    Se puede descargar desde https://spring.io/tools/sts/all.

    Los proyectos Spring Boot se pueden crear usando la opción “Nuevo proyecto Spring Starter”. Esto abrirá una nueva ventana donde debemos ingresar información obligatoria. Asegúrese de agregar Web, H2 y JPA como dependencias, ya que estas bibliotecas serán necesarias para nuestro proyecto.

    Comprensión de las configuraciones predeterminadas de H2

    Como mencioné anteriormente, Spring Boot es un marco obstinado y realiza todas las configuraciones predeterminadas en función de las dependencias disponibles en la ruta de clases.

    Dado que agregamos H2 como una dependencia, Spring Boot sabe que en este proyecto nos conectaremos a la base de datos H2, por lo que autoconfigura propiedades relacionadas con H2 como la base de datos URL, username, passwordetc.

    Las siguientes son las configuraciones predeterminadas establecidas por Spring Boot:

    spring.datasource.url=jdbc:h2:mem:testdb
    spring.datasource.driverClassName=org.h2.Driver
    spring.datasource.username=sa
    spring.datasource.password=
    spring.h2.console.enabled=false
    

    Si miramos el datasource.url propiedad, el nombre del esquema es testdb y es una base de datos en memoria (denominada “mem”). Veremos cómo podemos anular los valores predeterminados en las próximas secciones.

    Anulación de las configuraciones predeterminadas de H2

    En la sección anterior vimos las configuraciones predeterminadas de H2 que se pueden cambiar o anular fácilmente según sea necesario, y esta es la belleza de Spring Boot.

    Para anular cualquier propiedad, simplemente redefina la propiedad con el valor actualizado en el application.properties archivo disponible bajo el src/main/resources carpeta.

    Por ejemplo, por defecto, la consola H2 está deshabilitada, así que habilitémosla agregando la siguiente propiedad en el application.properties archivo:

    spring.h2.console.enabled=true
    

    Descripción general del ejemplo (API de persona)

    En las siguientes secciones, crearemos una API de persona, que es un servicio REST simple en el que interactuaremos con H2 usando Spring Boot.

    La API de Person realizará operaciones CRUD utilizando diferentes puntos finales. A continuación se muestran los detalles de los puntos finales:

    • GET llamar a /persons mostrará todos los objetos de persona disponibles en la base de datos H2.
    • GET llamar a /persons/{id} mostrará el objeto de persona con la identificación dada.
    • POST llamar a /persons insertará un nuevo objeto persona en la base de datos.
    • DELETE llamar a /persons/{id} eliminará el objeto persona con la identificación dada de la base de datos.

    Antes de continuar, tiene sentido verificar que el proyecto que hemos creado en la sección anterior está funcionando bien y no hay errores en él.

    Para verificar, ejecute el SpringBootH2IntegrationApplication.java file de la forma en que ejecutamos cualquier programa Java. Al hacerlo, la aplicación se iniciará y podremos ver el mensaje de inicio del servidor en la consola.

    Desde la consola, podemos encontrar la URL donde podemos abrir la consola H2:

    2018-08-18 22:43:30.578  INFO 3792 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean  : Servlet webServlet mapped to [/h2-console/*]
    

    Recuerde que habilitamos la consola H2 en el application.properties archivo.

    Abramos la consola H2 escribiendo http: // localhost: 8080 / h2-console en la barra de direcciones del navegador:

    Haga clic en conectar para iniciar sesión y ver las distintas opciones:

    Puede ver un valor diferente en la URL de JDBC, así que cambie la URL de la base de datos a jdbc:h2:mem:testdb en la pantalla de inicio de sesión, ya que esta es la URL predeterminada configurada por Spring Boot.

    Implementación de ejemplo de API de persona

    Es el momento de escribir el código usando lo que hemos discutido.

    Definición de una entidad

    Realizaremos operaciones CRUD en un Person objeto. Vamos a definirlo con solo cuatro atributos para que sea sencillo:

    @Entity
    public class Person {
    
        @Id
        @GeneratedValue
        private int id;
        private String name;
        private int age;
        private String emailId;
    
        //getters and setters
    }
    

    Definición de PersonRepository

    Como estamos usando JPA en este ejemplo para interactuar con la base de datos, así que definamos PersonRepository:

    public interface PersonRepository extends CrudRepository<Person, Integer> {}
    

    Definición de PersonService

    PersonService estará exponiendo métodos que serán llamados desde el controlador que interactúan con el repositorio:

    @Service
    public class PersonService {
    
        @Autowired
        PersonRepository personRepository;
    
        public List<Person> getAllPersons() {
            List<Person> persons = new ArrayList<Person>();
            personRepository.findAll().forEach(person -> persons.add(person));
            return persons;
        }
    
        public Person getPersonById(int id) {
            return personRepository.findById(id).get();
        }
    
        public void saveOrUpdate(Person person) {
            personRepository.save(person);
        }
    
        public void delete(int id) {
            personRepository.deleteById(id);
        }
    }
    

    Definición de PersonController

    PersonController escribirá métodos de controlador que serán llamados por diferentes llamadas de puntos finales:

    @RestController
    public class PersonController {
    
        @Autowired
        PersonService personService;
    
        @GetMapping("/persons")
        private List<Person> getAllPersons() {
            return personService.getAllPersons();
        }
    
        @GetMapping("/persons/{id}")
        private Person getPerson(@PathVariable("id") int id) {
            return personService.getPersonById(id);
        }
    
        @DeleteMapping("/persons/{id}")
        private void deletePerson(@PathVariable("id") int id) {
            personService.delete(id);
        }
    
        @PostMapping("/persons")
        private int savePerson(@RequestBody Person person) {
            personService.saveOrUpdate(person);
            return person.getId();
        }
    }
    

    Así que hemos completado la implementación de nuestro ejemplo de API Person y ahora es el momento de probarlo y validar los datos en la base de datos H2.

    Prueba de la API de persona

    Para probar el servicio REST, voy a usar el CARTERO herramienta, que se puede integrar en el navegador Chrome fácilmente utilizando su extensión del navegador.

    Comencemos la aplicación ejecutando SpringBootH2IntegrationApplication.java. La salida en la consola debería verse así. Esto confirma que se ha iniciado correctamente:

    2018-08-19 17:00:32.571  INFO 472 --- [   main] c.t.h.SpringBootH2IntegrationApplication : Started SpringBootH2IntegrationApplication in 14.885 seconds (JVM running for 16.437)
    

    Caso de prueba 1: creación de un nuevo objeto de persona

    Abrir usando Postman

    • Establecer tipo de solicitud: POST
    • Establecer URL: http: // localhost: 8080 / personas
    • Establecer encabezado de solicitud: Tipo de contenido: aplicación / json
    • Establecer Cuerpo como: {“nombre”: “persona A”, “edad”: 23, “emailId”: “[email protected]”}
    • Haga clic en “Enviar”
    • En la respuesta obtendremos un personId.

    Para validar los datos insertados en la base de datos H2:

    • Abre el Consola H2
    • Validar el PERSON mesa. Nos mostrará los datos que hemos insertado en la solicitud POST.

    Repita el Caso de prueba 1 con una persona diferente para que ahora tengamos dos objetos de persona insertados en la base de datos.

    Caso de prueba 2: recuperación del nuevo objeto de persona

    Cartero abierto

    • Tipo de solicitud: OBTENER
    • URL: http: // localhost: 8080 / persons / 1
    • Encabezado de solicitud: Content-Type: application / json
    • Haga clic en “Enviar”
    • En respuesta, obtendremos datos de la persona con id 1.

    Caso de prueba 3: eliminar un objeto de persona

    Cartero abierto

    Después de ejecutar esto, valide que los datos se hayan eliminado de la base de datos H2:

    Conclusión

    Con las pruebas realizadas, podemos concluir este tutorial. Cubrimos el uso de la base de datos H2 con Spring Boot e hicimos una aplicación de demostración. ¡Siéntete libre de jugar con el código y experimentar!

     

    Etiquetas:

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *