连接池

java数据库连接池之DBCP、C3P0、tomcat jdbc pool、hikari和Druid

杀马特。学长 韩版系。学妹 提交于 2020-03-08 20:35:59
我用的是springboot2.x整合如下连接池: 一、DBCP连接池(已过时,不推荐使用) Tomcat 在 7.0 以前版本使用 commons-dbcp 做连接池。 DBCP缺点如下: 1、dbcp 是单线程的,为了保证线程安全会锁整个连接池 2、dbcp没有自动回收空闲连接的功能 3、dbcp 性能不佳 4、dbcp 使用静态接口,在 JDK 1.6 编译有问题 5、dbcp 发展滞后 dbcp一个线程:负责心跳,最小连接数维持,最大空闲时间和防连接泄露。 整合步骤: 1、引入pom <!-- dbcp数据库连接池 --> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.4</version> </dependency> 2、配置文件添加 #必须参数 spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.type=org.apache.commons.dbcp.BasicDataSource spring.datasource.url=jdbc:mysql://localhost:3306/sumengnan?useUnicode=true

SpringBoot 集成 Druid

跟風遠走 提交于 2020-03-08 10:13:21
Druid是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0、DBCP、PROXOOL等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况,可以说是针对监控而生的DB连接池。更多资料说明大家可以查看官网Github: https://github.com/alibaba/druid Druid官方已经编写好了相关的启动器,我们可以引入启动器,然后进行相关配置就可以使用Druid的各种功能。如果只是引入Druid依赖包,没有引入Druid的SpringBoot启动器依赖,这时如果要实现使用Druid的,需要自己实现数据库连接池对象(DataSource),然后将配置信息注入到实现的连接池对象中。另外如果要使用Druid的监控功能,还需要编写Druid内置监控页面StatViewServlet对象和WebViewFilter到Spring容器中。 这里的话使用Druid启动器进行集成。 1. 在 Spring Boot 项目中加入 druid-spring-boot-starter 依赖 Maven <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.17</version> <

Mybatis获取数据源连接原理

那年仲夏 提交于 2020-03-07 13:50:28
Mybatis获取数据源连接原理 Mybatis获取数据源的创建使用工厂模式,基本分为两种: 有带连接池的数据源 不带连接池的数据源 不带连接池的数据源获取类似于jdbc连接,不做过多介绍,详细写一下带连接池的数据源; 获取带连接池的数据源的连接原理: 带有连接池的数据源对象中包含PoolState(连接池状态,定义了一个数据结构,两个连接池是ArrayList),调用PoolDataSource.getConnection方法会调用自己内部的popConnect方法,返回PooledConnection,最后调用PooledConnect.getProxyConnection方法返回连接(运用了代理模式)。 调用PoolDataSource.popConnection时,会先锁定PoolState对象,防止对象中两个不是线程安全的ArrayList出现并发导致不安全。 首先判断idleConnections空闲连接池是否为空,如果不为空,则获取一个空闲连接,并加入到activeConnections活跃连接池中。如果idleConnections空闲连接池为空,则进入第4步骤。 判断activeConnections活跃连接池是否已满,如果activeConnections活跃连接池没有满,就创建一个新的PooledConnection对象

springboot postgresql druid连接池和jpa,jdbctemplate执行sql查询

心不动则不痛 提交于 2020-03-05 16:08:11
1.maven依赖配置(pom.xml) 1 <dependency> 2 <groupId>org.springframework.boot</groupId> 3 <artifactId>spring-boot-starter</artifactId> 4 </dependency> 5 6 <dependency> 7 <groupId>org.springframework.boot</groupId> 8 <artifactId>spring-boot-starter-web</artifactId> 9 </dependency> 10 <dependency> 11 <groupId>org.springframework.boot</groupId> 12 <artifactId>spring-boot-starter-jdbc</artifactId> 13 </dependency> 14 <dependency> 15 <groupId>com.alibaba</groupId> 16 <artifactId>druid</artifactId> 17 <version>1.0.20</version> 18 </dependency> 19 <dependency> 20 <groupId>org.postgresql</groupId> 21

C3P0连接池的简单介绍

柔情痞子 提交于 2020-03-04 12:45:35
c3p0是一个易于使用的库,用于通过JNDI可绑定的数据源(包括实现连接和语句池的数据源)扩展传统的(基于DriverManager的)JDBC驱动程序,如jdbc3规范和jdbc2 std扩展所述。 C3P0连接池简介: C3P0地址: https://sourceforge.net/projects/c3p0/?source=navbar C3P0是一个开源的连接池。Hibernate框架,默认推荐使用C3P0作为连接池实现。 C3P0的jar包: c3p0-0.9.1.2.jar C3P0常用的配置参数解释: 参数 说明 initialPoolSize 刚创建好连接池的时候连接数量 maxPoolSize 连接池中最多可以放多少个连接 checkoutTimeout 连接池中没有连接时最长等待时间 maxIdleTime 连接池中的空闲连接多久没有使用就会回收。默认是0,0表示不回收 API介绍: com.mchange.v2.c3p0.ComboPooledDataSource 类表示C3P0的连接池对象,常用2种创建连接池的方式: 1.无参构造,使用默认配置 , 2.有参构造,使用命名配置 public ComboPooledDataSource() 无参构造使用默认配置(使用xml中default-config标签中对应的参数) public

连接池

心已入冬 提交于 2020-03-04 10:37:58
连接池概述 用池来管理 Connection ,这样可以重复使用 Connection 。有了池,所以我们就不用自己来创建 Connection ,而是通过池来获取 Connection 对象。当使用完 Connection 后,调用 Connection 的 close() 方法也不会真的关闭 Connection ,而是把 Connection “归还”给池。池就可以再利用这个 Connection 对象了。 l 规范 Java 为数据库连接池提供了公共的接口: javax.sql.DataSource ,各个厂商需要让自己的连接池实现这个接口。这样应用程序可以方便的切换不同厂商的连接池! 常见的连接池: DBCP 、 C3P0 。 我们这里主要学DBCP 导入 jar 包 在E盘下的commons文件下有我早已解压号的文件 然后把 复制粘贴到你webcontent下的WEB-INF下的bil文件下 然后把在你的tools包下创建一个class 然后把 package com.oracle.tools; import java.sql.Connection; import java.sql.SQLException; import javax.sql.DataSource; import org.apache.commons.dbcp.BasicDataSource;

QPS,TPS,RPS你知道多少?

六眼飞鱼酱① 提交于 2020-03-03 10:23:10
QPS:即Queries Per Second的缩写,每秒能处理查询数目。是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。 TPS:即Transactions Per Second的缩写,每秒处理的事务数目。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数,最终利用这些信息作出的评估分。 RPS: 即Requests Per Second的缩写,每秒能处理的请求数目。等效于QPS 吞吐量: 每秒的响应请求数,也即是最大吞吐能力 计算关系: QPS = 并发量 / 平均响应时间 并发量 = QPS * 平均响应时间 举例: 根据以上计算关系,我们来预估下单日访问量在 1000W 需要多大的QPS来支持: 通常情况下,80% 的访问量集中在 20%的时间,算一下这 1000w pv实际需要机器达到多少qps才能满足, qps = (1000w * 0.8) / (24 * 3600 * 0.2) qps = 462.9 JedisPool资源池优化建议: 1、maxTotal:最大连接数 以一个例子说明,假设: 一次命令时间(borrow|return resource + Jedis执行命令(含网络) )的平均耗时约为1ms

sqlalchemy 数据库操作

故事扮演 提交于 2020-03-03 00:28:08
1、简介 一种ORM 2、安装 pip3 install -i https://pypi.douban.com/simple sqlalchemy 3、连接数据库 from sqlalchemy import create_engine engine = create_engine( "mysql+pymysql://root:密码@127.0.0.1:3306/数据库名称?charset=utf8", max_overflow=0, # 超过连接池大小外最多创建的连接 pool_size=5, # 连接池大小 pool_timeout=30, # 池中没有线程最多等待的时间,否则报错 pool_recycle=-1 # 多久之后对线程池中的线程进行一次连接的回收(重置) ) 4、创建/删除表(包含连接数据库) a、表类 from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column from sqlalchemy import Integer,String Base = declarative_base() class Users(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True)

sqlalchemy 多线程 创建session

若如初见. 提交于 2020-03-02 18:03:50
1、基于threding.local,推荐使用 from sqlalchemy.orm import sessionmaker from sqlalchemy import create_engine from sqlalchemy.orm import scoped_session from models import Student from threading import Thread engine = create_engine( "mysql+pymysql://root:密码@127.0.0.1:3306/数据库?charset=utf8", max_overflow=0, # 超过连接池大小外最多创建的连接 pool_size=5, # 连接池大小 pool_timeout=30, # 池中没有线程最多等待的时间,否则报错 pool_recycle=-1 # 多久之后对线程池中的线程进行一次连接的回收(重置) ) SessionFactory = sessionmaker(bind=engine) session = scoped_session(SessionFactory) def task(): ret = session.query(Student).all() # 将连接交还给连接池 session.remove() for i in range(20):

redis常用命令

一世执手 提交于 2020-03-02 08:27:39
1.1 Redis命令 ps -ef |grep redis 指定端口:bind 127.0.0.1 我们要注释掉,让所有端口都能进入。 1.1.1 redis-cli的使用之发送命令 默认连接:IP 127.0.0.1 端口 6379 redis-cli 指定IP端口: redis-cli –h 127.0.0.1 –p 6379 1.1.2 redis-cli的使用之命令返回值 状态回复(最简单的回复-redis提供的测试命令) redis>PING PONG 127.0.0.1:6379>INCR test_incr (integer) 1 字符串回复(最长久的一种回复,双引号包裹) 127.0.0.1:6379>get test “123” 多行字符串回复 127.0.0.1:6379>KEYS * 1) "test_incr" 2) "test" 1.1.3 redis数据库切换SELECT redis默认支持16个数据库,对外都是以一个从0开始的递增数字命名,可以通过参数database来修改默认数据库个数。客户端连接redis服务后会自动选择0号数据库,可以通过select命令更换数据库,例如选择1号数据库: 127.0.0.1:6379>SELECT 1 OK 127.0.0.1:6379>GET test (nil) 说明: Redis不支持自定义数据库名称。