Add property `closeConnOnFatalError` to match HikariCP's behavior

This commit is contained in:
linghengqian 2024-09-26 00:28:30 +08:00
parent a1536b8cf8
commit c737d2a602
3 changed files with 14 additions and 1 deletions

View File

@ -147,6 +147,7 @@ public class DruidDataSource extends DruidAbstractDataSource
private boolean asyncInit;
protected boolean killWhenSocketReadTimeout;
protected boolean checkExecuteTime;
protected boolean closeConnOnFatalError = true;
private static List<Filter> autoFilters;
private boolean loadSpifilterSkip;
@ -185,6 +186,14 @@ public class DruidDataSource extends DruidAbstractDataSource
this.asyncInit = asyncInit;
}
public boolean isCloseConnOnFatalError() {
return closeConnOnFatalError;
}
public void setCloseConnOnFatalError(boolean closeConnOnFatalError) {
this.closeConnOnFatalError = closeConnOnFatalError;
}
@Deprecated
public void configFromPropety(Properties properties) {
configFromPropeties(properties);
@ -1640,7 +1649,7 @@ public class DruidDataSource extends DruidAbstractDataSource
ReentrantLock fatalErrorCountLock = hasHolderDataSource ? holder.getDataSource().lock : conn.lock;
fatalErrorCountLock.lock();
try {
if ((!conn.closed) && !conn.disable) {
if ((!conn.closed) && !conn.disable && isCloseConnOnFatalError()) {
conn.disable(error);
requireDiscard = true;
}

View File

@ -326,5 +326,6 @@ public class DruidDataSourceUtils {
trySetIntProperty(properties, "druid.socketTimeout", druidDataSource::setSocketTimeout);
trySetIntProperty(properties, "druid.transactionQueryTimeout", druidDataSource::setTransactionQueryTimeout);
trySetIntProperty(properties, "druid.loginTimeout", druidDataSource::setLoginTimeout);
trySetBooleanProperty(properties, "druid.closeConnOnFatalError", druidDataSource::setCloseConnOnFatalError);
}
}

View File

@ -396,6 +396,8 @@ public class DruidDataSourceUtilsTest extends TestCase {
properties.put("druid.disableException", druidDisableException);
String druidInstanceKey = "@lizongbo";
properties.put("druid.instanceKey", druidInstanceKey);
String druidCloseConnOnFatalError = "false";
properties.put("druid.closeConnOnFatalError", druidCloseConnOnFatalError);
DruidDataSource dataSource = new DruidDataSource();
dataSource.configFromPropeties(properties);
@ -455,6 +457,7 @@ public class DruidDataSourceUtilsTest extends TestCase {
assertEquals(druidKillWhenSocketReadTimeout, String.valueOf(dataSource.isKillWhenSocketReadTimeout()));
//assertEquals(druidCheckExecuteTime, String.valueOf(dataSource.isCheckExecuteTime()));
//assertEquals(druidLoadSpifilterSkip, String.valueOf(dataSource.isLoadSpifilterSkip()));
assertEquals(druidCloseConnOnFatalError, String.valueOf(dataSource.isCloseConnOnFatalError()));
}
public void testGenTestCode() {