validationQuery option added for connection pool

This commit is contained in:
Anamarija Talijanac
2019-11-04 23:15:23 +01:00
parent a69d94e99f
commit ecc658ddd5
2 changed files with 24 additions and 0 deletions

View File

@@ -1,6 +1,8 @@
package io.quarkus.agroal.runtime;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
@@ -167,6 +169,22 @@ public abstract class AbstractDataSourceProducer {
if (dataSourceRuntimeConfig.backgroundValidationInterval.isPresent()) {
poolConfiguration.validationTimeout(dataSourceRuntimeConfig.backgroundValidationInterval.get());
}
if (dataSourceRuntimeConfig.validationQuerySql.isPresent()) {
String validationQuery = dataSourceRuntimeConfig.validationQuerySql.get();
poolConfiguration.connectionValidator(new ConnectionValidator() {
@Override
public boolean isValid(Connection connection) {
try (Statement stmt = connection.createStatement()) {
stmt.execute(validationQuery);
return true;
} catch (Exception e) {
log.warn("Connection validation failed", e);
}
return false;
}
});
}
if (dataSourceRuntimeConfig.idleRemovalInterval.isPresent()) {
poolConfiguration.reapTimeout(dataSourceRuntimeConfig.idleRemovalInterval.get());
}

View File

@@ -124,4 +124,10 @@ public class DataSourceRuntimeConfig {
*/
@ConfigItem
public Optional<String> newConnectionSql;
/**
* Query executed to validate a connection.
*/
@ConfigItem
public Optional<String> validationQuerySql;
}