tutorial start mvc español java spring jdbc spring-boot tomcat-jdbc

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.



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