# 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 | --- ### 捐助 如果您觉得此作品不错,可以捐赠请我们喝杯咖啡吧,在此表示感谢^_^。