Spring Boot se integra con una serie de tecnologías para recopilar, transmitir y procesar datos, tanto SQL como NoSQL.

Bases de datos SQL

Spring Framework proporciona soporte integral para trabajar con bases de datos SQL, que van desde el acceso directo a JDBC usando JdbcTemplate hasta tecnologías completas de "mapeo relacional de objetos" como Hibernate. Spring Data proporciona un nivel adicional de funcionalidad: crear implementaciones de Repository directamente desde interfaces y usar convenciones para generar consultas a partir de nombres de métodos.

Configurando fuente de datos

La interfaz Java javax.sql.DataSource proporciona un método estándar para trabajar con conexiones de bases de datos. Tradicionalmente, una "Fuente de datos" utiliza una dirección URLjunto con algunas credenciales para establecer una conexión a la base de datos.

Soporte para bases de datos integradas

A menudo es más conveniente desarrollar aplicaciones utilizando la base de datos residente incorporada. Obviamente, las bases de datos residentes no proporcionan almacenamiento persistente. Debe completar la base de datos cuando se inicia la aplicación y estar preparado para eliminar datos cuando se cierra la aplicación.

Spring Boot puede configurar automáticamente bases de datos integradas H2, HSQL y Derby. No es necesario que proporcione ninguna URL de conexión. Solo necesita agregar una dependencia de compilación en la base de datos integrada que desea utilizar. Si hay varias bases de datos integradas en la ruta de clase, establezca la propiedad de configuración spring.datasource.embedded-database-connection para controlar cuál se usa. Establecer la propiedad en none deshabilita la configuración automática de la base de datos integrada.

Si utiliza esta función en sus pruebas, puede observar que todo el conjunto de pruebas reutiliza la misma base de datos, independientemente del número de contextos de aplicación que utilice. Si desea asegurarse de que cada contexto tenga una base de datos integrada independiente, debe establecer spring.datasource.generate-unique-name en true.

Por ejemplo, las dependencias POM típicas tendrían este aspecto:

<dependencia>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependencia>
<dependencia>
    <groupId>org.hsqldb</groupId>
    <artifactId>hsqldb</artifactId>
    <alcance>tiempo de ejecución</scope>
</dependencia>
Para configurar automáticamente la base de datos integrada, debe proporcionar una dependencia en spring-jdbc. En este ejemplo, se activa transitivamente a través de spring-boot-starter-data-jpa.
Si por alguna razón la URL de conexión para la base de datos integrada está configurada, debe asegurarse de que la función de cierre automático de la base de datos esté deshabilitada. Si está utilizando H2, entonces debería utilizar DB_CLOSE_ON_EXIT=FALSE para esto. Si está utilizando HSQLDB, debe asegurarse de que no se utilice shutdown=true. Deshabilitar la función de cierre automático de la base de datos permite a Spring Boot controlar cuándo se cierra la base de datos, garantizando así que ocurra cuando ya no sea necesario acceder a la base de datos.

Conectarse a la base de datos de producción

Las conexiones de bases de datos de producción también se pueden configurar automáticamente utilizando la agrupación DataSource.

Configuración de fuente de datos

La configuración de DataSource está controlada por propiedades de configuración externas en spring.datasource.*. Por ejemplo, podría declarar la siguiente sección en application.properties:

Propiedades
spring.datasource.url=jdbc:mysql://localhost/test
spring.datasource.nombredeusuario=dbuser
spring.datasource.password=dbpass
Yaml
primavera:
  fuente de datos:
    URL: "jdbc:mysql://localhost/prueba"
    nombre de usuario: "dbuser"
    contraseña: "dbpass"
Debe al menos especificar una URL configurando la propiedad spring.datasource.url. De lo contrario, Spring Boot intentará configurar automáticamente la base de datos integrada.
Spring Boot puede determinar la clase de controlador JDBC para la mayoría de las bases de datos a partir de una URL. Si necesita especificar una clase específica, puede utilizar la propiedad spring.datasource.driver-class-name.
Para crear un grupo DataSource debemos asegurarnos de que haya una clase Driver válida, por lo que verificamos Para ello antes de hacer algo. En otras palabras, si configura spring.datasource.driver-class-name=com.mysql.jdbc.Driver, entonces esta clase debería poder cargarse.

Para obtener más información sobre las opciones admitidas, consulte DataSourceProperties. Estas son opciones estándar que funcionan independientemente de la implementación real. También puede ajustar los parámetros específicos de la implementación utilizando el prefijo apropiado (spring.datasource.hikari.*, spring.datasource.tomcat.*, spring. fuente de datos .dbcp2.* y spring.datasource.oracleucp.*). Para obtener más información, consulte la documentación de la implementación del grupo de conexiones que está utilizando.

Por ejemplo, si utiliza grupo de conexiones Tomcat, Puedes configurar muchos ajustes adicionales, como se muestra en el siguiente ejemplo:

Propiedades
spring.datasource.tomcat.max-wait=10000
primavera.datasource.tomcat.max-active=50
spring.datasource.tomcat.test-on-borrow=true
Yaml
spring:
  datasource:
    tomcat:
      max-wait: 10000
      max-active: 50
      test-on-borrow: true

Este código configurará el grupo para que espere 10 000 ms antes de generar una excepción si la conexión no está disponible, limitará el número máximo de conexiones a 50 y verificará si hay una conexión antes de tomarla prestada del grupo.

Grupos de conexiones admitidos

Spring Boot utiliza el siguiente algoritmo para seleccionar una implementación específica:

  1. Preferimos HikariCP por su rendimiento y paralelismo. Si es posible utilizar HikariCP, siempre lo elegimos.

  2. De lo contrario, si el grupo DataSource de Tomcat está disponible, se utiliza

  3. Si esto no está disponible, pero Commons DBCP2 está disponible, úselo.

  4. Si no se pueden usar HikariCP, Tomcat y DBCP2, pero Oracle UCP está disponible, entonces lo usamos.

Si está utilizando "paquetes de inicio" spring-boot-starter-jdbc o spring-boot-starter-data-jpa, automáticamente obtendrás una dependencia de HikariCP.

Puede omitir este algoritmo por completo y especificar el grupo de conexiones que se utilizará configurando la propiedad spring.datasource.type. Esto es especialmente importante si la aplicación se ejecuta en un contenedor Tomcat, ya que tomcat-jdbc se proporciona de forma predeterminada.

Siempre se pueden configurar grupos de conexiones adicionales manualmente usando DataSourceBuilder. Si define su propio bean DataSource, no habrá configuración automática. DataSourceBuilder admite los siguientes grupos de conexiones:

  • HikariCP

  • Grupo fuente Datasource a través de Tomcat

  • Comunes DBCP2

  • Oracle UCP y OracleDataSource

  • SimpleDriverDataSource de Spring Framework

  • JdbcDataSource de H2

  • PGSimpleDataSource de PostgreSQL

  • C3P0

Conexión a DataSource mediante JNDI

Si está implementando su aplicación Spring Boot en un servidor de aplicaciones, es posible que necesite configurar y administrar el origen de datos utilizando la funcionalidad integrada del servidor de aplicaciones y acceder a él a través de JNDI.

La propiedad spring.datasource.jndi-name se puede utilizar como alternativa a spring.datasource.url, spring.datasource.username y properties spring.datasource.password para proporcionar acceso a DataSource desde una ubicación específica a través de JNDI. Por ejemplo, la siguiente sección en application.properties muestra cómo puede acceder al DataSource definido en el servidor JBoss AS:

Propiedades
spring.datasource.jndi-name=java:jboss/datasources/customers
Yaml
spring:
  datasource:
    jndi-name: "java:jboss/datasources/customers