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 URL
junto 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>
spring-jdbc
. En este ejemplo, se activa transitivamente a través de spring-boot-starter-data-jpa
.
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
:
spring.datasource.url=jdbc:mysql://localhost/test
spring.datasource.nombredeusuario=dbuser
spring.datasource.password=dbpass
primavera:
fuente de datos:
URL: "jdbc:mysql://localhost/prueba"
nombre de usuario: "dbuser"
contraseña: "dbpass"
spring.datasource.url
.
De lo contrario, Spring Boot intentará configurar automáticamente la base de datos integrada.
spring.datasource.driver-class-name
.
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:
spring.datasource.tomcat.max-wait=10000
primavera.datasource.tomcat.max-active=50
spring.datasource.tomcat.test-on-borrow=true
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:
-
Preferimos HikariCP por su rendimiento y paralelismo. Si es posible utilizar HikariCP, siempre lo elegimos.
-
De lo contrario, si el grupo
DataSource
de Tomcat está disponible, se utiliza -
Si esto no está disponible, pero Commons DBCP2 está disponible, úselo.
-
Si no se pueden usar HikariCP, Tomcat y DBCP2, pero Oracle UCP está disponible, entonces lo usamos.
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:
spring.datasource.jndi-name=java:jboss/datasources/customers
spring:
datasource:
jndi-name: "java:jboss/datasources/customers