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 鈥搄ar 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 *