连接池

Spring Boot (二) 整合 Redis

天涯浪子 提交于 2019-12-18 09:42:26
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 前言 本文将会基于 springboot 2.1.8.RELEASE 简单整合 Redis ,适合新手小白入门 Spring Boot 整合 Redis 入门 1、 pom.xml 中引入 redis 依赖 <!-- Redis依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> 2、 application.yml 配置文件中配置Redis连接参数等 spring: # Redis数据源 redis: # Redis数据库索引(默认为0) database: 0 # Redis服务器地址 host: 127.0.0.1 # Redis服务器连接端口 port: 6379 # 连接超时时间(毫秒 timeout: 6000 # Redis服务器连接密码(默认为空) password: jedis: pool: max-active: 1000 # 连接池最大连接数(使用负值表示没有限制) max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制) max-idle: 10 #

[tomcat] 连接池参数maxActive、maxIdle 、maxWait 等

早过忘川 提交于 2019-12-17 10:44:43
maxActive 连接池支持的最大连接数,这里取值为20,表示同时最多有20个数据库连接。设 0 为没有限制。 maxIdle 连接池中最多可空闲maxIdle个连接 ,这里取值为20,表示即使没有数据库连接时依然可以保持20空闲的连接,而不被清除,随时处于待命状态。设 0 为没有限制。 minIdle 连接池中最少空闲maxIdle个连接 initialSize 初始化连接数目 maxWait 连接池中连接用完时,新的请求等待时间,毫秒,这里取值-1,表示无限等待,直到超时为止,也可取值9000,表示9秒后超时。超过时间会出错误信息一般把maxActive设置成可能的并发量就行了 timeBetweenEvictionRunsMillis timeBetweenEvictionRunsMillis和minEvictableIdleTimeMillis一起使用,每 timeBetweenEvictionRunsMillis毫秒秒检查一次连接池中空闲的连接,把空闲时间超过minEvictableIdleTimeMillis毫秒的连接断开,直到连接池中的连接数到minIdle为止 minEvictableIdleTimeMillis 连接池中连接可空闲的时间,毫秒 removeAbandoned true,false

spring +JDBC

旧巷老猫 提交于 2019-12-16 22:48:43
使用Spring+JDBC集成步骤如下: 配置数据源,如: <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="org.gjt.mm.mysql.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/itcast?useUnicode=true&characterEncoding=UTF-8"/> <property name="username" value="root"/> <property name="password" value="123456"/> .....略 </bean> 配置事务。配置事务时,需要在xml配置文件中引入用于声明事务的tx命名空间(见下页),事务的配置方式有两种:注解方式和基于XML配置方式。 所用jar包: commons-dbcp.jar (使用datasource必须) commons-pool.jar (使用datasource必须) commons-logging.jar(使用Spring必须) spring.jar (使用Spring必须)

数据库连接池原理分析及模拟实现

时间秒杀一切 提交于 2019-12-16 15:45:46
数据库访问 ​ 访问数据库主要有以下几个步骤: 加载数据库驱动 创建数据库连接 执行访问操作并处理执行结果 关闭连接,释放资源 ​ 在每一次请求数据库都要经历上述过程,创建连接和释放资源也都是些重复性的动作,当请求量比较大时,资源是个很大的浪费。如何优化呢,可以使用连接池。 连接池 ​ 数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。 原理分析 ​ 数据库连接是访问数据库必须的,可以在系统初始化时提前创建一定数量的连接,保存起来,当有创建连接的请求过来时,就直接拿出来,标记为使用中(避免与其他请求拿到同一个),使用完后,再放回连接池中。过程如下 系统在启动时初始化连接池; 向连接池请求可用的数据库连接; 如果没有获取到可用的数据库连接,并且连接池中连接的数量小于最大连接数,则按照规定的步长给连接池中添加连接,然后再获取,如果连接池中的数量已经到了最大连接数还没有获取到可用的连接,则等待其他请求释放了连接后再获取; 使用获取到的数据库连接请求数据库; 将数据库连接放回连接池,供其他连接使用; 简单模拟实现 /** * 连接池对象 */ public class Pool { private String driver = null;

SpringBoot整合SpringMVC

亡梦爱人 提交于 2019-12-16 13:07:12
虽然默认配置已经可以使用SpringMVC了,不过我们有时候需要进行自定义配置。 1.1.1.修改端口 查看SpringBoot的全局属性可知,端口通过以下方式配置: # 映射端口 server.port=80 重启服务后测试: 1.1.2.访问静态资源 现在,我们的项目是一个jar工程,那么就没有webapp,我们的静态资源该放哪里呢? 回顾我们上面看的源码,有一个叫做ResourceProperties的类,里面就定义了静态资源的默认查找路径: 默认的静态资源路径为: classpath:/META-INF/resources/ classpath:/resources/ classpath:/static/ classpath:/public 只要静态资源放在这些目录中任何一个,SpringMVC都会帮我们处理。 我们习惯会把静态资源放在 classpath:/static/ 目录下。我们创建目录,并且添加一些静态资源: 重启项目后测试: 1.1.3.添加拦截器 拦截器也是我们经常需要使用的,在SpringBoot中该如何配置呢? 拦截器不是一个普通属性,而是一个类,所以就要用到java配置方式了。在SpringBoot官方文档中有这么一段说明: If you want to keep Spring Boot MVC features and you want to add

Springboot整合JDBCTemplate

浪子不回头ぞ 提交于 2019-12-16 11:51:16
概述 前面有关于Springboot整合Mybatis文章, 传送门 ,对于JDBCTemlate实际也是用来操作数据库的持久层框架,这里使用Springboot整合JDBCTemlate,如何使用JDBCTemlate操作数据库,和Springboot整合Mybatis一样,数据库连接池还是使用默认的连接池tomcat.jdbc.pool,我们不再配置Druid或者其他连接池,关于Springboot如何整合Druid或者其他连接池。 整合 导入依赖,在idea中通过Sping提供的插件直接引入,如下 ​ 或者手动导入 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jdbc</artifactId> </dependency> 创建一个接口 public interface StuDao { public int add(Student student); } 实现类 @Repository public class StuDaoImpl implements StuDao { @Autowired private NamedParameterJdbcTemplate jdbcTemplate; @Override public int

(转)pgbouncer常用配置项详解

主宰稳场 提交于 2019-12-16 09:38:38
https://pgbouncer.github.io/config.html 参考 《PostgreSQL修炼之道》之pgbouncer 配置文件分为[databases] 和 [pgbouncer]两部分,这个前面说过。现在我们来详细讲解一下里面的配置。 在上面的部分我们已经看到了一部分的[databases]部分的参数配置,都是以键值对的形式出现的,例如dbname、host、port、user、password,这几个参数都比较好理解。还有几个额外的配置我们接着看一下: (1) pool_size 用来配置连接池的大小。连接池的含义上面说过,如果没有这个值则使用[pgbouncer]部分的default_pool_size的值。 (2)connect_query :后面跟一个SQL语句字符串,用于探测这个连接是否正常,如果执行SQL语句出错,则换一个连接。 (3)client_encoding:指定连接的客户端使用的字符集编码 (4)datestyle:指定日期类型 (5)timezone:指定时区。 [pgbouncer]部分的配置 这个部分的配置项比较多,主要分为下面几类: 通用配置项 日志配置项 控制界面访问控制配置项 连接健康检查和超时配置项 危险的超时配置项 底层网络配置项 通用配置 logfile 指定日志文件,默认值是/var/log/pgbouncer

记录一次现场com.mongodb.MongoSocketOpenException: Exception opening socket的问题排查与解决方案

不羁岁月 提交于 2019-12-15 06:45:59
记录一次现场com.mongodb.MongoSocketOpenException: Exception opening socket的问题排查与解决方案 问题发现 快下班时,现场运维同事发现日志有很多如下报错,并请求协助排查解决 日志部分截图如下: 问题排查 查看日志,发现部分DB连接超时 利用谷歌翻译,得到部分消息:连接池后台维护任务期间引发WARN异常 联系运维同事,让查看 MongoDB集群各分片的状态。因为VPN被其他同时占用,所以需要等待一段时间,同事告诉说DB应该是正常的。但是根据日志中有正常的业务日志判断,应该是有一个分片出问题了。 期间自行百度发现一些相似错误(大多数都是说bind_ip和配置连接的ip有问题,显然不是这个问题),其中有一个比较类似的说是因为连接数过多,导致time_wait超时。因为现场用户有300W,所以觉得这个比较合理。该文章链接为 https://www.jianshu.com/p/ece233d2c601。 联想到MySQL 的默认设置下,当一个连接的空闲时间超过8小时后,MySQL 就会断开该连接,而 c3p0/dbcp 连接池则以为该被断开的连接依然有效。在这种情况下,如果客户端代码向c3p0/dbcp 连接池请求连接的话,连接池就会把已经失效的连接返回给客户端,客户端在使用该失效连接的时候即抛出异常。 当正准备测试time

关于连接池参数testWhileIdle,testOnBorrow,testOnReturn的疑问

馋奶兔 提交于 2019-12-14 20:00:35
testOnBorrow和testOnReturn在生产环境一般是不开启的,主要是性能考虑。失效连接主要通过testWhileIdle保证,如果获取到了不可用的数据库连接,一般由应用处理异常。 对于常规的数据库连接池,testOnBorrow等配置参数的含义和最佳实践可以参考官方文档。 数据源库连接池的实现原理与dropwizard无关,既然mysql server的wait_timeout等参数被设置为30秒,那么就会主动关闭不活跃的客户端连接,几个test参数设置为true可以通过充分的检测移除不可用连接,并重新创建新的连接,保证应用都获取到健康的连接。 my.conf中的wait_timeout参数和interactive_timeout参数默认是28800秒,也就是8小时。一般在生产环境这个数值会被设置为7天甚至30天,目的是保证mysql不会因为流量稀少而主动关闭session. 至于是否会导致大量的sleep连接,这个请在理解以上原理后,自行思考吧。 ———————————————— 版权声明:本文为CSDN博主「jjwen」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/jjwen/article/details/53319690 来源: CSDN 作者: 二十克 链接:

使用dbcp作为数据库的连接池

孤者浪人 提交于 2019-12-13 20:02:54
第一步:在pom.xml引入依赖包 <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.4</version> </dependency> 第二步:在applicationContext-datasource.xml配置<bean> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${db.driverClassName}"/> <property name="url" value="${db.url}"/> <property name="username" value="${db.username}"/> <property name="password" value="${db.password}"/> <!-- 连接池启动时的初始值 --> <property name="initialSize" value="${db.initialSize}"/> <!-- 连接池的最大值 --> <property name=