/BeeCP

A High Performance JDBC Connection Pool

Primary LanguageJavaGNU General Public License v3.0GPL-3.0

English|中文

BeeCP:A lightweight,high-performance JDBC pool

Maven artifact(Java7 and higher)

<dependency>
   <groupId>com.github.chris2018998</groupId>
   <artifactId>beecp</artifactId>
   <version>3.2.4</version>
</dependency>

Maven artifact(Java6)

<dependency>
   <groupId>com.github.chris2018998</groupId>
   <artifactId>beecp</artifactId>
   <version>1.6.9</version>
</dependency>

Performance

1: One million Mutil-thread query (10000 threads x 10 times)

Pool type HikariCP-3.4.5 beecp-3.0.5_compete
Average time(ms) 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

Test log file:JDBCPool2020-11-06.log

Test soruce:https://github.com/Chris2018998/PoolPerformance

2: Test with HikariCP performance benchmark(I3-7100,8G)

Test source:HikariCP-benchmark_BeeCP.zip


Example-1

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();
....

Example-2(SpringBoot)

application.properties

spring.datasource.username=xx
spring.datasource.password=xx
spring.datasource.url=xx
spring.datasource.driverClassName=xxx
spring.datasource.datasourceJndiName=xxx

DataSourceConfig.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);
     }
  }
}

Features

1:Borrow timeout

2:Fair mode and compete mode for borrowing

3:Proxy object safe close when return

4:Pooled connection cleared when network bad,pooled connection recreate when network restore OK

5:Idle timeout and hold timeout(long time inactively hold by borrower)

6:Connection transaction rollback if exist commit transaction when return

7:Pooled connection closed when exception,then create new one and transfer it to waiter

8:Pooled connection attributes reset when return(autoCommit,transactionIsolation,readonly,catlog,schema,networkTimeout)

9:XADataSource support

10:support self defined connection factory

11:Pool Reset

12:JMX support


Configuration

Field name Description Remark
username JDBC User
password JDBC Password
jdbcUrl DBC URL
driverClassName JDBC driver class name
poolName pool name name auto generated when not set
fairMode boolean indicator for borrow fair mode true:fair mode,false:comepete mode;default is false
initialSize pooled object creation size when pool initialized default is 0
maxActive max size for pooled object instances in pool default is 10
borrowSemaphoreSize borrow concurrent thread size default val=min(maxActive/2,cpu size)
defaultAutoCommit connection transaction open indicator default is true
defaultTransactionIsolationCode connection default transaction level default is not set value
defaultCatalog
defaultSchema
defaultReadOnly default is false
maxWait max wait time to borrow one connection time unit is ms,default is 8000 ms
idleTimeout max idle time of connection instance in pool time unit is ms,default is 18000 ms
holdTimeout max inactive time hold by borrower time unit is ms,default is 300000 ms
connectionTestSql connection valid test sql select statement(don't recommand store procedure in select
connectionTestTimeout connection test timeout time unit is second, default is 5 seconds
forceCloseUsingOnClear using connection close indicator true,close directly;false,wait util connection becoming idle,then close it
connectionFactoryClassName object factory class name default is null
enableJmx JMX boolean indicator for pool default is false

Donate

If the software can help you, please donate fee of one coffe to us,thanks.