add BeeCP support

This commit is contained in:
Looly 2020-08-16 10:27:50 +08:00
parent 2f64b3b85d
commit ef235aab5d
8 changed files with 88 additions and 19 deletions

View File

@ -21,6 +21,8 @@
* 【extra 】 SpringUtil增加getBean(TypeReference)pr#1009@Github
* 【core 】 Assert增加方法支持自定义异常处理pr#154@Gitee
* 【core 】 BooleanConverter增加数字转换规则issue#I1R2AB@Gitee
* 【poi 】 sax方式读取增加一个sheet结束的回调issue#155@Gitee
* 【db 】 增加BeeCP连接池支持
### Bug修复#
* 【core 】 修复原始类型转换时,转换失败没有抛出异常的问题

View File

@ -28,7 +28,6 @@ public class ServiceLoaderUtil {
*/
public static <T> T loadFirstAvailable(Class<T> clazz) {
final Iterator<T> iterator = load(clazz).iterator();
//noinspection WhileLoopReplaceableByForEach
while(iterator.hasNext()){
try {
return iterator.next();

View File

@ -71,6 +71,12 @@
<version>${c3p0.version}</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.github.chris2018998</groupId>
<artifactId>BeeCP</artifactId>
<version>2.5.3</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>

View File

@ -1,6 +1,7 @@
package cn.hutool.db.ds;
import cn.hutool.core.util.StrUtil;
import cn.hutool.db.ds.bee.BeeDSFactory;
import cn.hutool.db.ds.c3p0.C3p0DSFactory;
import cn.hutool.db.ds.dbcp.DbcpDSFactory;
import cn.hutool.db.ds.druid.DruidDSFactory;
@ -156,7 +157,7 @@ public abstract class DSFactory implements Closeable, Serializable{
/**
* 创建数据源实现工厂<br>
* 此方法通过试错方式查找引入项目的连接池库按照优先级寻找一旦寻找到则创建对应的数据源工厂<br>
* 连接池优先级Hikari &gt; Druid &gt; Tomcat &gt; Dbcp &gt; C3p0 &gt; Hutool Pooled
* 连接池优先级Hikari &gt; Druid &gt; Tomcat &gt; BeeCP &gt; Dbcp &gt; C3p0 &gt; Hutool Pooled
*
* @param setting 数据库配置项
* @return 日志实现类
@ -180,6 +181,11 @@ public abstract class DSFactory implements Closeable, Serializable{
//因为org.apache.tomcat.jdbc.pool.DataSource实现了此接口会首先检查接口的存在与否
// ignore
}
try {
return new BeeDSFactory(setting);
} catch (NoClassDefFoundError e) {
// ignore
}
try {
return new DbcpDSFactory(setting);
} catch (NoClassDefFoundError e) {

View File

@ -0,0 +1,47 @@
package cn.hutool.db.ds.bee;
import cn.beecp.BeeDataSource;
import cn.beecp.BeeDataSourceConfig;
import cn.hutool.core.util.StrUtil;
import cn.hutool.db.ds.AbstractDSFactory;
import cn.hutool.setting.Setting;
import javax.sql.DataSource;
/**
* BeeCP数据源工厂类
*
* @author Looly
*
*/
public class BeeDSFactory extends AbstractDSFactory {
private static final long serialVersionUID = 1L;
public static final String DS_NAME = "BeeCP";
public BeeDSFactory() {
this(null);
}
public BeeDSFactory(Setting setting) {
super(DS_NAME, BeeDataSource.class, setting);
}
@Override
protected DataSource createDataSource(String jdbcUrl, String driver, String user, String pass, Setting poolSetting) {
final BeeDataSourceConfig beeConfig = new BeeDataSourceConfig(driver, jdbcUrl, user, pass);
poolSetting.toBean(beeConfig);
// remarks等特殊配置since 5.3.8
String connValue;
for (String key : KEY_CONN_PROPS) {
connValue = poolSetting.getAndRemoveStr(key);
if(StrUtil.isNotBlank(connValue)){
beeConfig.addConnectProperty(key, connValue);
}
}
return new BeeDataSource(beeConfig);
}
}

View File

@ -0,0 +1,8 @@
/**
* BeeCP封装
* :https://github.com/Chris2018998/BeeCP
*
* @author looly
*
*/
package cn.hutool.db.ds.bee;

View File

@ -1,6 +1,5 @@
package cn.hutool.db.ds.hikari;
import cn.hutool.core.lang.Console;
import cn.hutool.core.util.StrUtil;
import cn.hutool.db.ds.AbstractDSFactory;
import cn.hutool.setting.Setting;

View File

@ -6,36 +6,38 @@ import java.util.List;
/**
* Sax方式读取Excel行处理器
* @author looly
*
* @author looly
*/
@FunctionalInterface
public interface RowHandler {
/**
* 处理一个单元格的数据
* @param sheetIndex 当前Sheet序号
* @param rowIndex 当前行号
* @param cellIndex 当前列号
* @param value 单元格的值
* @param xssfCellStyle 单元格样式
*/
default void handleCell(int sheetIndex, long rowIndex, int cellIndex, Object value, CellStyle xssfCellStyle){
//pass
}
/**
* 处理一行数据
*
* @param sheetIndex 当前Sheet序号
* @param rowIndex 当前行号从0开始计数
* @param rowList 行数据列表
* @param rowIndex 当前行号从0开始计数
* @param rowList 行数据列表
*/
void handle(int sheetIndex, long rowIndex, List<Object> rowList);
/**
* 处理一个单元格的数据
*
* @param sheetIndex 当前Sheet序号
* @param rowIndex 当前行号
* @param cellIndex 当前列号
* @param value 单元格的值
* @param xssfCellStyle 单元格样式
*/
default void handleCell(int sheetIndex, long rowIndex, int cellIndex, Object value, CellStyle xssfCellStyle) {
//pass
}
/**
* 处理一个sheet页完成的操作
*/
default void doAfterAllAnalysed(){
default void doAfterAllAnalysed() {
//pass
}
}