JFinal使用技巧-BeeCp小型JDBC连接池组件

图片 分享一款国产JDBC 连接池在 JFianl下的使用姿势:

小蜜蜂连接池(BeeCP)是一款小型 JDBC 连接池组件,具有性能高,代码轻,稳定好的特点。

  • Java 语言开发,具有跨平台的优点

  • 基于参数驱动,支持多种参数设置, 支持配置文件导入

  • 适用多种数据库驱动(截止当前,主流数据库均可适配)

  • 支持本地事务与分布式事务

  • 产品采用 JUC 技术开发,具有单点缓存,信号量控制,队列复用,非移动等待,自旋控制, 连接和异常的传递,异步候补,安全关闭等亮点

  • 提供日志输出和监控工具

  • 健壮性好,敏捷应对意外情况(如断网,数据库服务崩溃)

  • 良好的接口扩展性

    image.png

使用:

<!-- 数据库连接池-->
<dependency>
    <groupId>com.github.chris2018998</groupId>
    <artifactId>beecp</artifactId>
    <version>4.0.7</version>
</dependency>

在 JF 里面增加一个 BeeCpPlugin,上码:

import com.jfinal.plugin.IPlugin;
import com.jfinal.plugin.activerecord.IDataSourceProvider;
import org.stone.beecp.BeeDataSource;
import org.stone.beecp.BeeDataSourceConfig;

import java.sql.SQLException;

/**
 * BeeCpPlugin
 * <a href="https://gitee.com/Chris2018998/BeeCP">BeeCp DOC</a>
 */
@SuppressWarnings("FieldMayBeFinal")
public class BeeCpPlugin implements IPlugin, IDataSourceProvider {
    private final BeeDataSource ds;

    public BeeCpPlugin(String jdbcUrl, String username, String password) {
        this(jdbcUrl, username, password, null);
    }

    public BeeCpPlugin(String jdbcUrl, String username, String password, String driver) {
        ds = new BeeDataSource(driver, jdbcUrl, username, password);
    }

    public BeeCpPlugin set(int initialSize, int maxActive){
        ds.setInitialSize(initialSize);
        ds.setMaxActive(maxActive);
        return this;
    }
    public BeeCpPlugin set(int initialSize, int maxActive, int borrowSemaphoreSize){
        ds.setInitialSize(initialSize);
        ds.setMaxActive(maxActive);
        ds.setBorrowSemaphoreSize(borrowSemaphoreSize);
        return this;
    }

    @Override
    public boolean start() {
        try {
            ds.check();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
        return true;
    }

    @Override
    public boolean stop() {
        if (!ds.isClosed()){
            ds.close();
        }
        return true;
    }

    @Override
    public BeeDataSource getDataSource() {
        return ds;
    }

    public BeeDataSourceConfig getConfig(){
        return ds;
    }
}

常用的初始大小、最大连接数 有增加一个set方法快速设置,如果有更多需求设置可以调用getConfig()进行设置更多参数:
我复制部分配置类源码过来:

配置项

项名描述默认值
usernameJDBC用户名
passwordJDBC密码
jdbcUrlJDBC连接URL
driverClassNameJDBC驱动类名
poolName池名,如果未赋值则会自动产生一个
fairMode是否使用公平模式false(竞争模式)
initialSize连接池初始大小0
maxActive连接池最大个数10
borrowSemaphoreSize信号量许可大小min(最大连接数/2,CPU核心数)
defaultAutoCommitAutoComit默认值,未配置则从第一个连接上读取默认值
defaultTransactionIsolationCode事物隔离代码,未设置时则从第一个连接上读取默认值
defaultCatalogCatalog默认值 ,未配置则从第一个连接上读取默认值
defaultSchemaSchema默认值,未配置则从第一个连接上读取默认值
defaultReadOnlyReadOnly默认值 ,未配置则从第一个连接上读取默认值
maxWait连接借用等待最大时间(毫秒)8000
idleTimeout连接闲置最大时间(毫秒)18000
holdTimeout连接被持有不用最大允许时间(毫秒)18000
aliveTestSql连接有效性测试SQL语句SELECT 1
aliveTestTimeout连接有效性测试超时时间(秒)3
aliveAssumeTime连接测试的间隔时间(毫秒)500
forceCloseUsingOnClear是否直接关闭使用中连接false
delayTimeForNextClear延迟清理的时候时间(毫秒)3000
timerCheckInterval闲置扫描线程间隔时间(毫秒)18000
connectionFactoryClassName自定义的JDBC连接工作类名
enableJmxJMX监控支持开关false
printConfigInfo是否打印配置信息false
printRuntimeLog是否打印运行时日志false


在JFinalConfig 子类使用(和DruidPlugin一样 https://jfinal.com/doc/5-2  也可以独立使用 ):

public static String get(String key){
    //配置文件
    return p().get(key);
}

@Override
public void configPlugin(Plugins me) {
    BeeCpPlugin bp = new BeeCpPlugin(get("db.jdbcUrl"), get("db.user"), get("db.pw"));
    me.add(bp);
    ActiveRecordPlugin arp = new ActiveRecordPlugin(bp);
    me.add(arp);
    ...
}

数据库监控,我们一般都使用阿里云数据库,是自带监控和统计慢sql之类的功能的,以及自动扩容CPU等功能。

到这里就完工了~ 

有兴趣的给 @BeeCP 作者一个star 吧!
https://gitee.com/Chris2018998/BeeCP 


评论区

热门分享

扫码入社