java - start - spring boot tutorial español
Spring-Boot: ¿Cómo configuro las propiedades del grupo JDBC como el número máximo de conexiones? (5)
Spring-Boot es una herramienta bastante impresionante, pero la documentación es un poco escasa cuando se trata de una configuración más avanzada. ¿Cómo puedo establecer propiedades como el tamaño máximo para mi grupo de conexiones de base de datos?
Spring-Boot admite
tomcat-jdbc
,
HikariCP
y
Commons DBCP
forma nativa, ¿están todos configurados de la misma manera?
Las diferentes agrupaciones de conexiones tienen diferentes configuraciones.
Por ejemplo, Tomcat (predeterminado) espera:
spring.datasource.ourdb.url=...
y HikariCP estará feliz con:
spring.datasource.ourdb.jdbc-url=...
Podemos satisfacer ambos sin configuración estándar:
spring.datasource.ourdb.jdbc-url=${spring.datasource.ourdb.url}
No hay ninguna propiedad para definir el proveedor del grupo de conexiones.
Echa un vistazo a la fuente DataSourceBuilder.java
Si Tomcat, HikariCP o Commons DBCP están en el classpath, se seleccionará uno de ellos (en ese orden con Tomcat primero).
... por lo tanto, podemos reemplazar fácilmente el proveedor del grupo de conexiones utilizando esta configuración de Maven (pom.xml):
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<exclusions>
<exclusion>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jdbc</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</dependency>
En la versión actual de Spring-Boot (1.4.1.RELEASE), cada implementación de fuente de datos de agrupación tiene su propio prefijo para las propiedades.
Por ejemplo, si está utilizando tomcat-jdbc:
spring.datasource.tomcat.max-wait=10000
Puedes encontrar la explicación here
spring.datasource.max-wait=10000
esto ya no tiene efecto.
En spring boot 2.x necesita hacer referencia a propiedades específicas del proveedor.
El valor predeterminado, hikari, se puede configurar con
spring.datasource.hikari.maximum-pool-size
.
Resulta que establecer estas propiedades de configuración es bastante sencillo, pero la documentación oficial es más general, por lo que puede ser difícil de encontrar cuando se busca específicamente información de configuración del grupo de conexiones.
Para establecer el tamaño máximo de grupo para tomcat-jdbc, establezca esta propiedad en su archivo .properties o .yml:
spring.datasource.maxActive=5
También puede usar lo siguiente si lo prefiere:
spring.datasource.max-active=5
Puede establecer cualquier propiedad de grupo de conexiones que desee de esta manera.
Aquí hay una lista completa de propiedades compatibles con
tomcat-jdbc
.
Para comprender cómo funciona esto de manera más general, necesita profundizar un poco en el código Spring-Boot.
Spring-Boot construye el DataSource de esta manera ( ver aquí , línea 102):
@ConfigurationProperties(prefix = DataSourceAutoConfiguration.CONFIGURATION_PREFIX)
@Bean
public DataSource dataSource() {
DataSourceBuilder factory = DataSourceBuilder
.create(this.properties.getClassLoader())
.driverClassName(this.properties.getDriverClassName())
.url(this.properties.getUrl())
.username(this.properties.getUsername())
.password(this.properties.getPassword());
return factory.build();
}
DataSourceBuilder es responsable de determinar qué biblioteca de agrupación usar, verificando cada una de una serie de clases conocidas en el classpath.
Luego construye el DataSource y lo devuelve a la función
dataSource()
.
En este punto, la magia comienza a usar
@ConfigurationProperties
.
Esta anotación le dice a Spring que busque propiedades con el prefijo
CONFIGURATION_PREFIX
(que es
spring.datasource
).
Para cada propiedad que comienza con ese prefijo, Spring intentará llamar al establecedor en DataSource con esa propiedad.
Tomcat DataSource es una extensión de
DataSourceProxy
, que tiene el método
setMaxActive()
.
¡Y así es como se aplica correctamente su
spring.datasource.maxActive=5
!
¿Qué pasa con otros grupos de conexiones?
No lo he intentado, pero si está utilizando uno de los otros grupos de conexiones compatibles con Spring-Boot (actualmente HikariCP o Commons DBCP), debería poder establecer las propiedades de la misma manera, pero deberá mirar el proyecto documentación para saber qué hay disponible.
Según su tipo de aplicación / tamaño / carga / no. de usuarios ..etc - puedes seguir siguiendo tus propiedades de producción
spring.datasource.tomcat.initial-size=50
spring.datasource.tomcat.max-wait=20000
spring.datasource.tomcat.max-active=300
spring.datasource.tomcat.max-idle=150
spring.datasource.tomcat.min-idle=8
spring.datasource.tomcat.default-auto-commit=true