Configuración y uso de Druid del grupo de conexiones de la base de datos

Para obtener información sobre la configuración de druida, consulte el documento oficial Lista de propiedades de configuración de DruidDataSource

configuración valores predeterminados ilustrar
nombre La importancia de configurar esta propiedad es que si hay varias fuentes de datos, se pueden distinguir por nombre durante la supervisión. Si no se configura, se generará un nombre con el formato: "DataSource-" + System.identityHashCode(this)
jdbcUrl url para conectarse a la base de datos
nombre de usuario El nombre de usuario para conectarse a la base de datos.
contraseña Contraseña para conectarse a la base de datos. Si no desea que la contraseña se escriba directamente en el archivo de configuración, puede usar ConfigFilter, vea el ejemplo de uso de ConfigFilter en el sitio web oficial
driverClassName Identificación automática basada en url Opcional, si no configura druid, identificará automáticamente el dbType de acuerdo con la URL y luego seleccionará el driverClassName correspondiente (configuración recomendada)
tamaño inicial 0 El número de conexiones físicas establecidas durante la inicialización. La inicialización ocurre cuando el método init se llama explícitamente, o cuando getConnection es primero
maxActivo 8 Número máximo de grupos de conexiones
maxIdle 8 Ya no se usa, y la configuración no tiene efecto.
mininactivo Número mínimo de grupos de conexiones
espera máxima El tiempo máximo de espera al obtener una conexión, en milisegundos. Después de configurar maxWait, el bloqueo justo se habilita de manera predeterminada y la eficiencia de concurrencia disminuirá. Si es necesario, puede usar el bloqueo injusto configurando el atributo useUnfairLock en verdadero
poolPreparedStatements FALSO Ya sea para almacenar en caché la declaración preparada, es decir, PSCache. PSCache mejora en gran medida el rendimiento de las bases de datos que admiten cursores, como Oracle. Se recomienda cerrar bajo mysql
maxOpenPreparedStatements -1 Para habilitar PSCache, debe configurarse para que sea mayor que 0. Cuando es mayor que 0, poolPreparedStatements se activará automáticamente y cambiará a verdadero. En Druid, no habrá problema de que PSCache ocupe demasiada memoria bajo Oracle. Puede configurar este valor para que sea mayor, por ejemplo, 100
consulta de validación El sql utilizado para verificar si la conexión es válida requiere una declaración de consulta. Si la consulta de validación es nula, testOnBorrow, testOnReturn, testWhileIdle no funcionará
testOnBorrow verdadero Ejecute la consulta de validación para verificar si la conexión es válida al solicitar una conexión. Hacer esta configuración reducirá el rendimiento
testOnReturn FALSO Ejecute la consulta de validación para verificar si la conexión es válida al devolver la conexión. Hacer esta configuración reducirá el rendimiento
prueba mientras está inactivo FALSO Se recomienda configurarlo como verdadero, lo que no afectará el rendimiento y garantizará la seguridad. Verifique al solicitar una conexión, si el tiempo de inactividad es mayor que timeBetweenEvictionRunsMillis, ejecute la consulta de validación para verificar si la conexión es válida
timeBetweenEvictionRunsMillis Hay dos significados: 1) El subproceso Destroy detectará el intervalo de conexión 2) La base de juicio de testWhileIdle, vea la descripción del atributo testWhileIdle para más detalles
numTestsPerEvictionRun Ya no se usa, un DruidDataSource solo admite una EvictionRun
minEvictableIdleTimeMills
conexiónInitSqls El sql ejecutado cuando se inicializa la conexión física
clasificador de excepciones Identificación automática basada en dbType Abandone la conexión cuando la base de datos arroje alguna excepción irrecuperable
filtros El tipo de atributo es una cadena y el complemento de extensión se configura a través de un alias. Los complementos comúnmente utilizados incluyen: filtro para monitorear estadísticas: filtro para registros de estadísticas: log4j filtro para evitar la inyección SQL: muro
filtros proxy El tipo es List<com.alibaba.druid.filter.Filter>, si los filtros y proxyFilters se configuran al mismo tiempo, es una relación de combinación, no una relación de reemplazo

1. Integrar Druid en Spring

Introducir la dependencia del druida

		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>1.1.6</version>
		</dependency>

Configurar jdbc.properties

# 数据库驱动
jdbc.driverClassName=com.mysql.cj.jdbc.Driver
# 数据库连接
jdbc.url=jdbc:mysql:///ssm?useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai
# 数据库用户名
jdbc.username=hqh
# 数据库密码
jdbc.password=Mysql123
#别名方式,扩展插件,监控统计用的filter:stat,日志用的filter:log4j,防御sql注入的filter:wall
jdbc.filters=stat 
#最大连接数
jdbc.maxActive=300
#初始化连接数
jdbc.initialSize=2
#获取连接最大等待时间
jdbc.maxWait=60000
#最小连接数
jdbc.minIdle=1
#检测连接有效性的时间间隔
jdbc.timeBetweenEvictionRunsMillis=60000
#连接保持空闲而不被驱逐的最长时间
jdbc.minEvictableIdleTimeMillis=300000
#连接有效性,检测sql
jdbc.validationQuery=SELECT 'x'
#定时检测空闲连接有效性
jdbc.testWhileIdle=true
#检测获取的连接的有效性
jdbc.testOnBorrow=false
#检测要归还的连接的有效性
jdbc.testOnReturn=false
#是否缓存preparedStatement,即PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。
jdbc.poolPreparedStatements=false
jdbc.maxOpenPreparedStatements=50

Configurar origen de datos

	<!--配置数据库连接池(选用druid) -->
	<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
		init-method="init" destroy-method="close">
		<!--配置连接池属性 -->

		<!--配置驱动类名字 -->
		<property name="driverClassName" value="${jdbc.driverClassName}" />

		<!-- 基本属性 url、user、password -->
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />

		<!-- 配置初始化大小、最小、最大 -->
		<property name="initialSize" value="${jdbc.initialSize}" />
		<property name="minIdle" value="${jdbc.minIdle}" />
		<property name="maxActive" value="${jdbc.maxActive}" />

		<!-- 配置获取连接等待超时的时间 -->
		<property name="maxWait" value="${jdbc.maxWait}" />

		<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
		<property name="timeBetweenEvictionRunsMillis" value="${jdbc.timeBetweenEvictionRunsMillis}" />

		<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
		<property name="minEvictableIdleTimeMillis" value="${jdbc.minEvictableIdleTimeMillis}" />
		
		<!-- 验证连接有效与否的SQL,不同的数据配置不同 -->
		<property name="validationQuery" value="${jdbc.validationQuery}" />
		
		<!-- 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。 -->
		<property name="testWhileIdle" value="${jdbc.testWhileIdle}" />
		
		<!-- 这里建议配置为TRUE,防止取到的连接不可用,但会影响性能 -->
		<property name="testOnBorrow" value="${jdbc.testOnBorrow}" />
		
		<!-- 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能 -->
		<property name="testOnReturn" value="${jdbc.testOnReturn}" />

		<!-- 打开PSCache,并且指定每个连接上PSCache的大小 。 -->
		<!-- 是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql5.5以下的版本中没有PSCache功能,建议关闭掉。5.5及以上版本有PSCache,建议开启。 -->
		<!-- 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100 -->
		<property name="poolPreparedStatements" value="${jdbc.poolPreparedStatements}" />
		<property name="maxOpenPreparedStatements" value="${jdbc.maxOpenPreparedStatements}" />

		<!-- 配置监控统计拦截的filters,去掉后监控界面sql无法统计 开启web监控、开启sql防火墙 -->
		<property name="filters" value="${jdbc.filters}" />

		<property name="proxyFilters">
			<list>
				<ref bean="logFilter" />
				<ref bean="statFilter" />
			</list>
		</property>
	</bean>

	<!-- 慢SQL记录 -->
	<bean id="statFilter" class="com.alibaba.druid.filter.stat.StatFilter">
		<!-- 慢sql时间设置,即执行时间大于200毫秒的都是慢sql -->
		<property name="slowSqlMillis" value="5" />
		<property name="logSlowSql" value="true" />
	</bean>

	<bean id="logFilter" class="com.alibaba.druid.filter.logging.Slf4jLogFilter">
		<property name="statementExecutableSqlLogEnable" value="false" />
	</bean>

Configurar web.xml

	<!-- 配置druid监控 -->
	<servlet>
		<servlet-name>DruidStatView</servlet-name>
		<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
		<init-param>
			<!-- 允许清空统计数据 -->
			<param-name>resetEnable</param-name>
			<param-value>true</param-value>
		</init-param>
		<init-param>
			<!-- 用户名 -->
			<param-name>loginUsername</param-name>
			<param-value>druid</param-value>
		</init-param>
		<init-param>
			<!-- 密码 -->
			<param-name>loginPassword</param-name>
			<param-value>123456</param-value>
		</init-param>
		<!-- deny优先于allow,如果在deny列表中,就算在allow列表中,也会被拒绝。 如果allow没有配置或者为空,则允许所有访问 
			ip配置规则 <IP>或者<IP>/<SUB_NET_MASK_size>,如128.242.127.1/24,不支持IPV6 详情见:https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatViewServlet%E9%85%8D%E7%BD%AE -->
		<!-- <init-param> <param-name>allow</param-name> 访问IP白名单 <param-value>*</param-value> 
			</init-param> <init-param> <param-name>deny</param-name> 访问IP黑名单 <param-value></param-value> 
			</init-param> -->
	</servlet>
	<servlet-mapping>
		<servlet-name>DruidStatView</servlet-name>
		<url-pattern>/druid/*</url-pattern>
	</servlet-mapping>

	<!-- WebStatFilter用于采集web-jdbc关联监控的数据,排除一些不必要的url -->
	<filter>
		<filter-name>DruidWebStatFilter</filter-name>
		<filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
		<init-param>
			<param-name>exclusions</param-name>
			<param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>DruidWebStatFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

Para obtener el resultado de ejecución, ingrese http://localhost:8080/xxxx/druid/index.html, como se muestra en
inserte la descripción de la imagen aquí
la interfaz de monitoreo después de iniciar sesión
inserte la descripción de la imagen aquí

2. Integrar Druid en Spring Boot

Método 1: importar directamente druid-spring-boot-starter, consulte druid-spring-boot-starter

		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid-spring-boot-starter</artifactId>
			<version>1.1.16</version>
		</dependency>

Agregue la siguiente configuración a application.properties y funcionará

#####jdbc配置
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis?useSSL=false&characterEncoding=utf8&serverTimezone=GMT
spring.datasource.username=hqh
spring.datasource.password=Mysql123
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver

#####datasource druid pool
spring.datasource.druid.initial-size=1
spring.datasource.druid.max-active=20
spring.datasource.druid.min-idle=1
spring.datasource.druid.filters=stat
spring.datasource.druid.max-wait=60000
spring.datasource.druid.pool-prepared-statements=true
spring.datasource.druid.max-pool-prepared-statement-per-connection-size=50
spring.datasource.druid.max-open-prepared-statements=20
spring.datasource.druid.validation-query=select 1
spring.datasource.druid.validation-query-timeout=60000
spring.datasource.druid.test-on-borrow=false
spring.datasource.druid.test-on-return=false
spring.datasource.druid.test-while-idle=true

## 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.druid.time-between-eviction-runs-millis=2000

## 配置一个连接在池中最小和最大生存的时间,单位是毫秒
spring.datasource.druid.min-evictable-idle-time-millis=300000
spring.datasource.druid.max-evictable-idle-time-millis=600000

#####druid监控配置
## WebStatFilter配置,说明请参考Druid Wiki,配置_配置WebStatFilter
#是否启用StatFilter默认值true
spring.datasource.druid.web-stat-filter.enabled=true
spring.datasource.druid.web-stat-filter.url-pattern=/*
spring.datasource.druid.web-stat-filter.exclusions=*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*

#session统计功能
#spring.datasource.druid.web-stat-filter.session-stat-enable=true
#最大session数
#spring.datasource.druid.web-stat-filter.session-stat-max-count=100000
#你可以配置principalSessionName,使得druid能够知道当前的session的用户是谁
#spring.datasource.druid.web-stat-filter.principal-session-name=admin
#你可以配置principalSessionName,使得druid能够知道当前的cookie的用户是谁
#spring.datasource.druid.web-stat-filter.principal-cookie-name=admin

#置profileEnable能够监控单个url调用的sql列表。
spring.datasource.druid.web-stat-filter.profile-enable=true

## StatViewServlet配置,说明请参考Druid Wiki,配置_StatViewServlet配置
spring.datasource.druid.stat-view-servlet.enabled=true
spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
spring.datasource.druid.stat-view-servlet.reset-enable=true
spring.datasource.druid.stat-view-servlet.login-username=admin
spring.datasource.druid.stat-view-servlet.login-password=admin

## IP黑白名单配置,deny优先于allow,如果在deny列表中,就算在allow列表中,也会被拒绝。
## 如果allow没有配置或者为空,则允许所有访问
#spring.datasource.druid.stat-view-servlet.allow=127.0.0.1
#spring.datasource.druid.stat-view-servlet.deny=192.168.10.1

## Spring监控配置,说明请参考Druid Github Wiki,配置_Druid和Spring关联监控配置
# Spring监控AOP切入点,如x.y.z.service.*,配置多个英文逗号分隔
#spring.datasource.druid.aop-patterns= org.lsh.dubhe.service.*

#配置wall filter
spring.datasource.druid.filter.wall.enabled=true
spring.datasource.druid.filter.wall.db-type=mysql
spring.datasource.druid.filter.wall.config.alter-table-allow=false
spring.datasource.druid.filter.wall.config.truncate-allow=false
spring.datasource.druid.filter.wall.config.drop-table-allow=false

#是否允许非以上基本语句的其他语句,缺省关闭,通过这个选项就能够屏蔽DDL。
spring.datasource.druid.filter.wall.config.none-base-statement-allow=false
#检查UPDATE语句是否无where条件,这是有风险的,但不是SQL注入类型的风险
spring.datasource.druid.filter.wall.config.update-where-none-check=true
#SELECT ... INTO OUTFILE 是否允许,这个是mysql注入攻击的常见手段,缺省是禁止的
spring.datasource.druid.filter.wall.config.select-into-outfile-allow=false
#是否允许调用Connection.getMetadata方法,这个方法调用会暴露数据库的表信息
spring.datasource.druid.filter.wall.config.metadata-allow=true
#对被认为是攻击的SQL进行LOG.error输出
spring.datasource.druid.filter.wall.log-violation=true
#对被认为是攻击的SQL抛出SQLExcepton
spring.datasource.druid.filter.wall.throw-exception=true

Inicie Spring Boot y luego ingrese http://localhost:8080/druid/index.html para acceder al
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
Método 2: Introducir dependencias de druida

<dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>druid</artifactId>
     <version>1.1.12</version>
</dependency>

Agregue la siguiente configuración a application.properties

#数据库配置
# 驱动配置信息
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis?useSSL=false&characterEncoding=utf8&serverTimezone=GMT
spring.datasource.username=hqh
spring.datasource.password=Mysql123
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver

# 连接池的配置信息
# 初始化大小,最小,最大
spring.datasource.initialSize=3
spring.datasource.minIdle=5
spring.datasource.maxActive=20

# 配置获取连接等待超时的时间
spring.datasource.maxWait=30000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.timeBetweenEvictionRunsMillis=60000

# 配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=SELECT 1 FROM DUAL
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false

# 打开PSCache,并且指定每个连接上PSCache的大小
spring.datasource.poolPreparedStatements=true
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
spring.datasource.filters=stat,wall
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=10000

Crear una clase de configuración de druida

package com.flashsale.config;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

@Configuration
public class DruidConfiguration {
    
    

	private static final Logger logger = LoggerFactory.getLogger(DruidConfiguration.class);

	private static final String DB_PREFIX = "spring.datasource";

	@Bean
	public ServletRegistrationBean<StatViewServlet> druidServlet() {
    
    
		logger.info("init Druid Servlet Configuration ");
		ServletRegistrationBean<StatViewServlet> servletRegistrationBean = new ServletRegistrationBean<StatViewServlet>(
				new StatViewServlet(), "/druid/*");
		// IP白名单(deny优先于allow,如果在deny列表中,就算在allow列表中,也会被拒绝。如果allow没有配置或者为空,则允许所有访问)
//		servletRegistrationBean.addInitParameter("allow", "*");

		// IP黑名单(共同存在时,deny优先于allow)
//		servletRegistrationBean.addInitParameter("deny", "192.168.1.100");

		// 控制台管理用户
		servletRegistrationBean.addInitParameter("loginUsername", "admin");
		servletRegistrationBean.addInitParameter("loginPassword", "admin");

		// 是否能够重置数据 禁用HTML页面上的“Reset All”功能
		servletRegistrationBean.addInitParameter("resetEnable", "false");
		return servletRegistrationBean;
	}

	@Bean
	public FilterRegistrationBean<WebStatFilter> filterRegistrationBean() {
    
    
		FilterRegistrationBean<WebStatFilter> filterRegistrationBean = new FilterRegistrationBean<WebStatFilter>(new WebStatFilter());
		filterRegistrationBean.addUrlPatterns("/*");
		filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico, /druid/*");
		return filterRegistrationBean;
	}
	
	// 声明其为Bean实例(如果没配置initMethod和destroyMethod,在监控数据源处会报错(*) property for user to setup)
	@Bean(destroyMethod="close", initMethod="init")
	@ConfigurationProperties(prefix = DB_PREFIX)
	public DataSource dataSource() {
    
    
		return new DruidDataSource();
	}
}

Inicie Spring Boot, luego ingrese http://localhost:8080/druid/index.html para acceder
inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/q283614346/article/details/90727612
Recomendado
Clasificación