# BeeCP
**Repository Path**: fyy566/BeeCP
## Basic Information
- **Project Name**: BeeCP
- **Description**: 小蜜蜂连接池是一款简易型JDBC连接池
- **Primary Language**: Java
- **License**: GPL-3.0
- **Default Branch**: master
- **Homepage**: https://www.oschina.net/p/beecp
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 44
- **Created**: 2021-09-02
- **Last Updated**: 2021-09-02
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
English|中文
小蜜蜂连接池:一款创新式JDBC连接池,具有性能高,代码轻,稳定性好的特点。
**亮点**
1:单点缓存 (创新)
2:非移动等待(创新)
3:传递管道复用(创新)
4:异步候补(创新)
5:代码更简短
6:代码扫描缺陷更少
7:性能更高
Maven坐标(Java7及更高版本)
```xml
com.github.chris2018998
beecp
3.2.6
```
Maven坐标(Java6)
```xml
com.github.chris2018998
beecp
1.6.9
```
---
### 性能测试
**1:** 100万次查询测试(10000 线程 x 10 次数)
| Pool type | HikariCP-3.4.5 | beecp-3.0.5_compete|
| --------------- |---------------- | ----------------- |
| 平均时间(毫秒) |25.132750 | 0.284550 |
###### SQL:select 1 from dual
###### PC:I5-4210M(2.6Hz,dual core4threads),12G memory Java:JAVA8_64 Pool:init-size10,max-size:10
日志文件:JDBCPool2020-11-06.log
测试源码:https://github.com/Chris2018998/PoolPerformance
**2:** 使用光连接池基准测试结果(I3-7100,8G)
测试源码:HikariCP-benchmark_BeeCP.zip
想知道它性能高的原因吗? 请
点击
---
#### 范例1
```java
BeeDataSourceConfig config = new BeeDataSourceConfig();
config.setDriverClassName("com.mysql.jdbc.Driver");
config.setJdbcUrl("jdbc:mysql://localhost/test");
config.setUsername("root");
config.setPassword("root");
config.setMaxActive(10);
config.setInitialSize(0);
config.setMaxWait(8000);//ms
//DataSource ds=new BeeDataSource(config);
BeeDataSource ds=new BeeDataSource(config);
Connection con=ds.getConnection();
....
```
#### 范例2(SpringBoot)
*application.properties*
```java
spring.datasource.username=xx
spring.datasource.password=xx
spring.datasource.url=xx
spring.datasource.driverClassName=xxx
spring.datasource.datasourceJndiName=xxx
```
*DataSourceConfig.java*
```java
@Configuration
public class DataSourceConfig {
@Value("${spring.datasource.driverClassName}")
private String driver;
@Value("${spring.datasource.url}")
private String url;
@Value("${spring.datasource.username}")
private String user;
@Value("${spring.datasource.password}")
private String password;
@Value("${spring.datasource.datasourceJndiName}")
private String datasourceJndiName;
private BeeDataSourceFactory dataSourceFactory = new BeeDataSourceFactory();
@Bean
@Primary
@ConfigurationProperties(prefix="spring.datasource")
public DataSource primaryDataSource() {
return DataSourceBuilder.create().type(cn.beecp.BeeDataSource.class).build();
}
@Bean
public DataSource secondDataSource(){
return new BeeDataSource(new BeeDataSourceConfig(driver,url,user,password));
}
@Bean
public DataSource thirdDataSource()throws SQLException {
try{
return dataSourceFactory.lookup(datasourceJndiName);
}catch(NamingException e){
throw new SQLException("Jndi DataSource not found:"+datasourceJndiName);
}
}
}
```
---
### 功能与特性
1:请求超时支持
2:两种模式:公平与竞争
3:支持连接安全关闭
4:断网连接池自动恢复
5:闲置超时和持有超时处理
6:支持连接回收前,事物回滚
7:若连接出现问题,池自动补充
8:支持连接回收前,属性重置(比如:autoCommit,transactionIsolation,readonly,catlog,schema,networkTimeout)
9:支持XADataSource
10:支持连接工厂自定义
11:支持连接池重置
12:支持JMX
---
### 配置项说明
| 配置项 | 描述 | 备注 |
| ----------------| --------------------------- | ------------------------ |
| username | JDBC用户名 | |
| password | JDBC密码 | |
| jdbcUrl | JDBC连接URL | |
| driverClassName | JDBC驱动类名 | |
| poolName |池名 |如果未赋值则会自动产生一个 |
| fairMode | 连接池是否公平模式 | 默认false,竞争模式 |
| initialSize | 连接池初始大小 | |
| maxActive | 连接池最大个数 | |
| borrowSemaphoreSize | 信号量请求并发数(借用者线程数)| 不允许大于连接最大数 |
| defaultAutoCommit|连接是否为自动提交 | 默认true |
| defaultTransactionIsolationCode|事物等级 | 默认不未设置 |
| defaultCatalog | | |
| defaultSchema | | |
| defaultReadOnly | | 默认false |
| maxWait |连接借用等待最大时间(毫秒) | 默认8秒,连接请求最大等待时间 |
| idleTimeout |连接闲置最大时间(毫秒) | 默认3分钟,超时会被清理 |
| holdTimeout |连接被持有不用的最大时间(毫秒) | 默认5分钟,超时会被清理 |
| connectionTestSql |连接有效性测试SQL语句 | 一条 select 语句,不建议放入存储过程 |
| connectionTestTimeout |连接有效性测试超时时间(秒) |默认5秒 执行查询测试语句时间,在指定时间范围内等待反应|
| connectionTestInterval |连接测试的间隔时间(毫秒) |默认500毫秒 连接上次活动时间点与当前时间时间差值小于它,则假定连接是有效的|
| forceCloseUsingOnClear|是否直接关闭使用中转连接 |默认false;true:直接关闭使用中连接,false:等待处于使用中归还后再关闭|
| delayTimeForNextClear |延迟清理的时候时间(毫秒) |默认3000毫秒,还存在使用中的连接,延迟等待时间再清理|
| idleCheckTimeInterval |闲置扫描线程间隔时间(毫秒) | 默认5分钟 |
| connectionFactoryClassName|自定义的JDBC连接工作类名 | 默认为空 |
| enableJmx |JMX监控支持开关 | 默认false |
---
### 捐助
如果您觉得此作品不错,可以捐赠请我们喝杯咖啡吧,在此表示感谢^_^。
