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 es compatible y tomcat-jdbc
, de forma nativa, ¿están todos configurados de la misma manera?HikariCP
Commons DBCP
-Dspring.datasource.tomcat.initial-size=10
(el valor predeterminado es 10)Respuestas:
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 utilizar 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 admitidas por
tomcat-jdbc
.Para comprender cómo funciona esto de manera más general, debe 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(); }
El DataSourceBuilder es responsable de averiguar qué biblioteca de agrupación usar, verificando cada una de una serie de clases conocidas en la ruta de clases. Luego construye el DataSource y lo devuelve a la
dataSource()
función.En este punto, la magia comienza a usarse
@ConfigurationProperties
. Esta anotación le dice a Spring que busque propiedades con prefijoCONFIGURATION_PREFIX
(que esspring.datasource
). Para cada propiedad que comience con ese prefijo, Spring intentará llamar al establecedor en el DataSource con esa propiedad.Tomcat DataSource es una extensión de DataSourceProxy , que tiene el método
setMaxActive()
.¡Y así es como
spring.datasource.maxActive=5
se aplica correctamente!¿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 configurar las propiedades de la misma manera, pero deberá mirar el proyecto documentación para saber qué hay disponible.
fuente
spring.datasource.tomcat.max-active
ospring.datasource.hikari.maximum-pool-size
.spring.datasource.maxActive=1
funcionó. Esta líneaspring.datasource.max-active=1
no funcionó para mí. Versión Spring Boot2.2.2.RELEASE
En la versión actual de Spring-Boot (1.4.1.RELEASE), cada implementación de fuente de datos agrupada 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 aquí
spring.datasource.max-wait=10000
esto ya no tiene ningún efecto.
fuente
En Spring Boot 2.x, debe hacer referencia a las propiedades específicas del proveedor.
https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-sql.html#boot-features-connect-to-production-database
El valor predeterminado, hikari se puede configurar con
spring.datasource.hikari.maximum-pool-size
.fuente
Los diferentes grupos de conexiones tienen diferentes configuraciones.
Por ejemplo, Tomcat (predeterminado) espera:
y HikariCP estará contento con:
Podemos satisfacer ambos sin una configuración estándar:
No hay ninguna propiedad para definir el proveedor del grupo de conexiones.
Eche un vistazo a la fuente DataSourceBuilder.java
... entonces, podemos reemplazar fácilmente el proveedor del grupo de conexiones usando esta configuración de maven (pom.xml):
fuente
Según su tipo de aplicación / tamaño / carga / no. de usuarios ..etc - u puede seguir siguiendo sus 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
fuente
spring.datasource.tomcat.max-active=5
spring.datasource.tomcat.max-idle=5
fue suficiente para mí, ¡gracias!