principio de base de datos de parte de la piscina
Papel: La idea básica es la agrupación de conexiones cuando se inicializa el sistema, la conexión a la base de datos se almacena como objetos en la memoria cuando las necesidades de los usuarios para acceder a la base de datos, no el establecimiento de una nueva conexión, pero inactiva quitar estableció una conexión de la agrupación objeto de conexión . Después de su uso, el usuario no es la conexión está cerrada, pero la parte posterior conexión a la agrupación de conexión a utilizar para la solicitud de acceso siguiente. El establecimiento de la conexión, desconexión por la agrupación de conexiones para gestionar misma . Mientras tanto, el número inicial también puede ser controlado mediante el establecimiento de los parámetros del grupo de conexión del grupo de conexión, el número mínimo de conexiones y el número máximo de uso de cada conexión, por lo que el tiempo máximo de inactividad. Pueden ser controlados por un número de su propia base de datos de gestión de la conexión mecanismo, el uso y similares.
Los principales factores de influencia:
- El número mínimo de conexiones a
la agrupación de conexiones de base de datos se ha mantenido, por lo que si la cantidad de la aplicación a la base de datos no está conectado, habrá un gran número de recursos de conexión de base de datos se pierden. - El número máximo de conexiones
es puede aplicar el número máximo de grupos de conexión, si las solicitudes de conexión de base de datos superior a este número, la solicitud de conexión de base de datos que se añaden más tarde para la cola de espera, lo que afectará a las operaciones de base de datos subsiguientes. - El número mínimo de conexiones y el número máximo de conexiones brecha
número mínimo de conexiones y el número máximo de conexiones que hay mucha diferencia, entonces la solicitud de conexión será el primero en ganancias, después de más de un número mínimo de conexiones equivalentes a una solicitud de conexión para establecer una conexión con la base de datos nueva. Sin embargo, éstos mayor que el número mínimo de conexiones no se termine de utilizar la conexión a la base se libera inmediatamente, se coloca en el grupo de conexión después de esperar el tiempo de espera de inactividad reutilizado o liberado.
Configuración de la base de datos springboot la piscina druida
Artículo de referencia:
(más detallados)
- https://blog.csdn.net/u010513756/article/details/80235876
- https://blog.csdn.net/u012946310/article/details/82318439
Utilizando la base de datos Oracle: https://blog.csdn.net/shmily_lsl/article/details/88035791
En primer lugar, dependiente de las importaciones:
<!-- 阿里系的Druid依赖包 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.9</version>
</dependency>
<!-- Druid 依赖 log4j包 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
application.yml perfil
spring:
datasource:
druid:
url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
username: root
password: root
driver: com.mysql.cj.jdbc.Driver
initial-size: 10
max-active: 10000
min-idle: 2
max-wait: 6000
time-between-eviction-runs-millis: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
# 是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。
pool-prepared-statements: false
validation-query: select 1 from dual
validation-query-timeout: 100000
# 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。 建议false
test-on-borrow: false
# 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能 ,建议false
test-on-return: false
test-while-idle: true
max-pool-prepared-statement-per-connection-size: 20
filters: stat
DBDruidConfig
@Configuration
public class DBDruidConfig {
private static Logger logger = LogManager.getLogger(DBDruidConfig.class);
@Value("${spring.datasource.druid.url}")
private String dbUrl;
@Value("${spring.datasource.druid.username}")
private String username;
@Value("${spring.datasource.druid.password}")
private String password;
@Value("${spring.datasource.druid.driver}")
private String driverClassName;
@Value("${spring.datasource.druid.initial-size}")
private int initialSize;
@Value("${spring.datasource.druid.min-idle}")
private int minIdle;
@Value("${spring.datasource.druid.max-active}")
private int maxActive;
@Value("${spring.datasource.druid.max-wait}")
private long maxWait;
@Value("${spring.datasource.druid.timeBetweenEvictionRunsMillis}")
private long timeBetweenEvictionRunsMillis;
@Value("${spring.datasource.druid.minEvictableIdleTimeMillis}")
private long minEvictableIdleTimeMillis;
@Value("${spring.datasource.druid.validation-query}")
private String validationQuery;
@Value("${spring.datasource.druid.validation-query-timeout}")
private int validationQueryTimeout;
@Value("${spring.datasource.druid.test-while-idle}")
private boolean testWhileIdle;
@Value("${spring.datasource.druid.test-on-borrow}")
private boolean testOnBorrow;
@Value("${spring.datasource.druid.test-on-return}")
private boolean testOnReturn;
@Value("${spring.datasource.druid.pool-prepared-statements}")
private boolean poolPreparedStatements;
@Value("${spring.datasource.druid.filters}")
private String filters;
/*
meger操作
@Value("{spring.datasource.connectionProperties}")
private String connectionProperties;*/
@Bean(name = "druidDataSource") //声明其为Bean实例
@Primary //在同样的DataSource中,首先使用被标注的DataSource
public DruidDataSource dataSource(){
DruidDataSource datasource = new DruidDataSource();
datasource.setUrl(this.dbUrl);
datasource.setUsername(username);
datasource.setPassword(password);
datasource.setDriverClassName(driverClassName);
//configuration
datasource.setInitialSize(initialSize);
datasource.setMinIdle(minIdle);
datasource.setMaxActive(maxActive);
datasource.setMaxWait(maxWait);
datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
datasource.setValidationQuery(validationQuery);
datasource.setValidationQueryTimeout(validationQueryTimeout);
datasource.setTestWhileIdle(testWhileIdle);
datasource.setTestOnBorrow(testOnBorrow);
datasource.setTestOnReturn(testOnReturn);
datasource.setPoolPreparedStatements(poolPreparedStatements);
try {
datasource.setFilters(filters);
} catch (SQLException e) {
logger.error("druid configuration initialization filter", e);
}
//datasource.setConnectionProperties(connectionProperties);
return datasource;
}
@Bean
public ServletRegistrationBean statViewServlet(){
//创建servlet注册实体
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
//设置ip白名单
servletRegistrationBean.addInitParameter("allow","127.0.0.1");
//设置ip黑名单
servletRegistrationBean.addInitParameter("deny","192.168.0.2");
//设置控制台管理用户__登录用户名和密码
servletRegistrationBean.addInitParameter("loginUsername","druid");
servletRegistrationBean.addInitParameter("loginPassword","123456");
//是否可以重置数据
servletRegistrationBean.addInitParameter("resetEnable","false");
return servletRegistrationBean;
}
}
Después de ejecutar el proyecto, visite http: // localhost: 8080 / druida / sql.html,
Introduzca su nombre de usuario y contraseña en él