java - ¿Cómo gestionar el conjunto de conexiones de base de datos en spring jpa?
hibernate spring-data-jpa (2)
Estoy usando spring-boot en mi aplicación web y uso spring-jpa para leer / escribir desde / a mi base de datos. Funciona muy bien, pero quiero entender cómo administrar las conexiones de la base de datos. A continuación se muestra la configuración de mis propiedades para la base de datos:
spring.datasource.url=jdbc:mysql://localhost:3306/test?characterEncoding=utf8
spring.datasource.username=user
spring.datasource.password=pwd
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.max-active=500
He establecido el máximo de conexiones en 500. Cuando un usuario realiza una solicitud en mi aplicación Spring, se le abrirá una conexión de base de datos. Después de terminar la solicitud, Spring Jpa cerrará esta conexión? Si no, ¿cuándo cerrará las conexiones no utilizadas?
He leído el documento de referencia de spring jpa de http://docs.spring.io/spring-data/jpa/docs/current/reference/html/ . Pero no menciona nada sobre las conexiones.
Cuando se usa la agrupación de conexiones de base de datos, una llamada a sqlconnection.close()
no necesariamente cerrará la conexión pesada a la base de datos, en su lugar, la mayoría de las veces solo liberará la conexión como reutilizable en la agrupación. Es por eso que es recomendable invocar el close()
en la conexión tan pronto como sea posible al aprovechar un grupo de conexiones del lado del cliente.
En su configuración, el grupo contendrá un número máximo de 500 conexiones (también sería bueno configurar maxIdle
, minIdle
y minEvictableIdleTimeMillis
para ajustar el número de conexiones listas para usar y la frecuencia con la que se liberan cuando no se usan).
Un poco más de doc here
Ya ha encontrado que puede configurar esto desde application.properties
. Puede encontrar todas las propiedades posibles here .
Tenga en cuenta que a partir de Spring Boot 1.4 hay propiedades de origen de datos para cada proveedor de origen de datos con el que Spring se integra, fuera de la caja. Hay spring.datasource.dbcp.*
, spring.datasource.tomcat.*
Y así sucesivamente. Ver 1.4 documentos
Si eso no es suficiente, y necesita algo muy específico, puede declarar el bean de fuente de datos usted mismo. Aquí está el ejemplo con el origen de datos Tomcat:
@Bean
public DataSource dataSource(){
PoolProperties p = new PoolProperties();
p.setUrl("jdbc:mysql://localhost:3306/mysql");
p.setDriverClassName("com.mysql.jdbc.Driver");
p.setUsername("root");
p.setPassword("password");
p.setJmxEnabled(true);
p.setTestWhileIdle(false);
p.setTestOnBorrow(true);
p.setValidationQuery("SELECT 1");
p.setTestOnReturn(false);
p.setValidationInterval(30000);
p.setTimeBetweenEvictionRunsMillis(30000);
p.setMaxActive(100);
p.setInitialSize(10);
p.setMaxWait(10000);
p.setRemoveAbandonedTimeout(60);
p.setMinEvictableIdleTimeMillis(30000);
p.setMinIdle(10);
p.setLogAbandoned(true);
p.setRemoveAbandoned(true);
p.setJdbcInterceptors(
"org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;"+
"org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer");
DataSource datasource = new DataSource();
datasource.setPoolProperties(p);
return datasource ;
}