fix c3p0 bug

This commit is contained in:
Looly 2022-02-11 13:35:37 +08:00
parent 9b01a23a60
commit 9679165161
3 changed files with 30 additions and 14 deletions

View File

@ -2,7 +2,7 @@
# 🚀Changelog # 🚀Changelog
------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------
# 5.7.21 (2022-02-07) # 5.7.21 (2022-02-11)
### 🐣新特性 ### 🐣新特性
* 【extra 】 增加jetbrick模板支持 * 【extra 】 增加jetbrick模板支持
@ -24,6 +24,7 @@
* 【extra 】 修复EmojiUtil.toHtmlHex()方法pr#519@Gitee * 【extra 】 修复EmojiUtil.toHtmlHex()方法pr#519@Gitee
* 【system 】 修复CpuInfo.getUsed()方法issue#2116@Github * 【system 】 修复CpuInfo.getUsed()方法issue#2116@Github
* 【dfa 】 修复密集匹配和贪婪匹配冲突问题issue#2126@Github * 【dfa 】 修复密集匹配和贪婪匹配冲突问题issue#2126@Github
* 【db 】 修复c3p0丢失信息问题issue#I4T7XZ@Gitee
------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------
# 5.7.20 (2022-01-20) # 5.7.20 (2022-01-20)

View File

@ -1,5 +1,6 @@
package cn.hutool.db.ds.c3p0; package cn.hutool.db.ds.c3p0;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.db.DbRuntimeException; import cn.hutool.db.DbRuntimeException;
import cn.hutool.db.ds.AbstractDSFactory; import cn.hutool.db.ds.AbstractDSFactory;
@ -12,13 +13,13 @@ import java.beans.PropertyVetoException;
/** /**
* Druid数据源工厂类 * Druid数据源工厂类
* *
* @author Looly * @author Looly
* *
*/ */
public class C3p0DSFactory extends AbstractDSFactory { public class C3p0DSFactory extends AbstractDSFactory {
private static final long serialVersionUID = -6090788225842047281L; private static final long serialVersionUID = -6090788225842047281L;
public static final String DS_NAME = "C3P0"; public static final String DS_NAME = "C3P0";
/** /**
@ -30,24 +31,16 @@ public class C3p0DSFactory extends AbstractDSFactory {
/** /**
* 构造 * 构造
* *
* @param setting 配置 * @param setting 配置
*/ */
public C3p0DSFactory(Setting setting) { public C3p0DSFactory(Setting setting) {
super(DS_NAME, ComboPooledDataSource.class, setting); super(DS_NAME, ComboPooledDataSource.class, setting);
} }
@Override @Override
protected DataSource createDataSource(String jdbcUrl, String driver, String user, String pass, Setting poolSetting) { protected DataSource createDataSource(String jdbcUrl, String driver, String user, String pass, Setting poolSetting) {
final ComboPooledDataSource ds = new ComboPooledDataSource(); final ComboPooledDataSource ds = new ComboPooledDataSource();
ds.setJdbcUrl(jdbcUrl);
try {
ds.setDriverClass(driver);
} catch (PropertyVetoException e) {
throw new DbRuntimeException(e);
}
ds.setUser(user);
ds.setPassword(pass);
// remarks等特殊配置since 5.3.8 // remarks等特殊配置since 5.3.8
final Props connProps = new Props(); final Props connProps = new Props();
@ -58,7 +51,18 @@ public class C3p0DSFactory extends AbstractDSFactory {
connProps.setProperty(key, connValue); connProps.setProperty(key, connValue);
} }
} }
ds.setProperties(connProps); if(MapUtil.isNotEmpty(connProps)){
ds.setProperties(connProps);
}
ds.setJdbcUrl(jdbcUrl);
try {
ds.setDriverClass(driver);
} catch (PropertyVetoException e) {
throw new DbRuntimeException(e);
}
ds.setUser(user);
ds.setPassword(pass);
// 注入属性 // 注入属性
poolSetting.toBean(ds); poolSetting.toBean(ds);

View File

@ -2,6 +2,7 @@ package cn.hutool.db;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.db.ds.DSFactory; import cn.hutool.db.ds.DSFactory;
import cn.hutool.db.ds.DataSourceWrapper;
import cn.hutool.db.ds.bee.BeeDSFactory; import cn.hutool.db.ds.bee.BeeDSFactory;
import cn.hutool.db.ds.c3p0.C3p0DSFactory; import cn.hutool.db.ds.c3p0.C3p0DSFactory;
import cn.hutool.db.ds.dbcp.DbcpDSFactory; import cn.hutool.db.ds.dbcp.DbcpDSFactory;
@ -9,6 +10,7 @@ import cn.hutool.db.ds.druid.DruidDSFactory;
import cn.hutool.db.ds.hikari.HikariDSFactory; import cn.hutool.db.ds.hikari.HikariDSFactory;
import cn.hutool.db.ds.pooled.PooledDSFactory; import cn.hutool.db.ds.pooled.PooledDSFactory;
import cn.hutool.db.ds.tomcat.TomcatDSFactory; import cn.hutool.db.ds.tomcat.TomcatDSFactory;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Test; import org.junit.Test;
@ -87,6 +89,15 @@ public class DsTest {
Assert.assertTrue(CollUtil.isNotEmpty(all)); Assert.assertTrue(CollUtil.isNotEmpty(all));
} }
@Test
public void c3p0DsUserAndPassTest() {
// https://gitee.com/dromara/hutool/issues/I4T7XZ
DSFactory.setCurrentDSFactory(new C3p0DSFactory());
ComboPooledDataSource ds = (ComboPooledDataSource) ((DataSourceWrapper) DSFactory.get("mysql")).getRaw();
Assert.assertEquals("root", ds.getUser());
Assert.assertEquals("123456", ds.getPassword());
}
@Test @Test
public void hutoolPoolTest() throws SQLException { public void hutoolPoolTest() throws SQLException {
DSFactory.setCurrentDSFactory(new PooledDSFactory()); DSFactory.setCurrentDSFactory(new PooledDSFactory());