分享一款国产JDBC 连接池在 JFianl下的使用姿势:
小蜜蜂连接池(BeeCP)是一款小型 JDBC 连接池组件,具有性能高,代码轻,稳定好的特点。
Java 语言开发,具有跨平台的优点
基于参数驱动,支持多种参数设置, 支持配置文件导入
适用多种数据库驱动(截止当前,主流数据库均可适配)
支持本地事务与分布式事务
产品采用 JUC 技术开发,具有单点缓存,信号量控制,队列复用,非移动等待,自旋控制, 连接和异常的传递,异步候补,安全关闭等亮点
提供日志输出和监控工具
健壮性好,敏捷应对意外情况(如断网,数据库服务崩溃)
良好的接口扩展性
使用:
<!-- 数据库连接池--> <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()进行设置更多参数:
我复制部分配置类源码过来:
配置项
项名 | 描述 | 默认值 |
---|---|---|
username | JDBC用户名 | 空 |
password | JDBC密码 | 空 |
jdbcUrl | JDBC连接URL | 空 |
driverClassName | JDBC驱动类名 | 空 |
poolName | 池名,如果未赋值则会自动产生一个 | 空 |
fairMode | 是否使用公平模式 | false(竞争模式) |
initialSize | 连接池初始大小 | 0 |
maxActive | 连接池最大个数 | 10 |
borrowSemaphoreSize | 信号量许可大小 | min(最大连接数/2,CPU核心数) |
defaultAutoCommit | AutoComit默认值,未配置则从第一个连接上读取默认值 | 空 |
defaultTransactionIsolationCode | 事物隔离代码,未设置时则从第一个连接上读取默认值 | 空 |
defaultCatalog | Catalog默认值 ,未配置则从第一个连接上读取默认值 | 空 |
defaultSchema | Schema默认值,未配置则从第一个连接上读取默认值 | 空 |
defaultReadOnly | ReadOnly默认值 ,未配置则从第一个连接上读取默认值 | 空 |
maxWait | 连接借用等待最大时间(毫秒) | 8000 |
idleTimeout | 连接闲置最大时间(毫秒) | 18000 |
holdTimeout | 连接被持有不用最大允许时间(毫秒) | 18000 |
aliveTestSql | 连接有效性测试SQL语句 | SELECT 1 |
aliveTestTimeout | 连接有效性测试超时时间(秒) | 3 |
aliveAssumeTime | 连接测试的间隔时间(毫秒) | 500 |
forceCloseUsingOnClear | 是否直接关闭使用中连接 | false |
delayTimeForNextClear | 延迟清理的时候时间(毫秒) | 3000 |
timerCheckInterval | 闲置扫描线程间隔时间(毫秒) | 18000 |
connectionFactoryClassName | 自定义的JDBC连接工作类名 | 空 |
enableJmx | JMX监控支持开关 | 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