From 87b9bf140da8d9eff4c6190bc3ac9a5e6940ced5 Mon Sep 17 00:00:00 2001 From: DNx Date: Wed, 12 Jul 2017 07:21:05 +0700 Subject: [PATCH] Add database setting to configure HikariCP 'maxLifetime' #1279 --- docs/config.md | 3 +++ src/main/java/fr/xephi/authme/datasource/MySQL.java | 6 +++++- .../xephi/authme/settings/properties/DatabaseSettings.java | 7 ++++++- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/docs/config.md b/docs/config.md index 9bc772b4f..554eb5f85 100644 --- a/docs/config.md +++ b/docs/config.md @@ -58,6 +58,9 @@ DataSource: mySQLlastlocPitch: 'pitch' # Overrides the size of the DB Connection Pool, -1 = Auto poolSize: -1 + # The maximum lifetime of a connection in the pool, default = 1800 seconds + # You should set this at least 30 seconds less than mysql server wait_timeout + maxLifetime: 1800 ExternalBoardOptions: # Column for storing players passwords salts mySQLColumnSalt: '' diff --git a/src/main/java/fr/xephi/authme/datasource/MySQL.java b/src/main/java/fr/xephi/authme/datasource/MySQL.java index 9c9816315..b86ad7167 100644 --- a/src/main/java/fr/xephi/authme/datasource/MySQL.java +++ b/src/main/java/fr/xephi/authme/datasource/MySQL.java @@ -41,6 +41,7 @@ public class MySQL implements DataSource { private String database; private String tableName; private int poolSize; + private int maxLifetime; private List columnOthers; private Columns col; private HashAlgorithm hashAlgorithm; @@ -116,6 +117,7 @@ public class MySQL implements DataSource { if (poolSize == -1) { poolSize = Utils.getCoreCount() * 3; } + this.maxLifetime = settings.getProperty(DatabaseSettings.MYSQL_CONNECTION_MAX_LIFETIME); this.useSsl = settings.getProperty(DatabaseSettings.MYSQL_USE_SSL); } @@ -126,8 +128,10 @@ public class MySQL implements DataSource { ds = new HikariDataSource(); ds.setPoolName("AuthMeMYSQLPool"); - // Pool size + // Pool Settings ds.setMaximumPoolSize(poolSize); + ds.setMaxLifetime(maxLifetime * 1000); + // Database URL ds.setJdbcUrl("jdbc:mysql://" + this.host + ":" + this.port + "/" + this.database); diff --git a/src/main/java/fr/xephi/authme/settings/properties/DatabaseSettings.java b/src/main/java/fr/xephi/authme/settings/properties/DatabaseSettings.java index 91d8f5ec1..f8344b4af 100644 --- a/src/main/java/fr/xephi/authme/settings/properties/DatabaseSettings.java +++ b/src/main/java/fr/xephi/authme/settings/properties/DatabaseSettings.java @@ -10,7 +10,7 @@ import static ch.jalu.configme.properties.PropertyInitializer.newProperty; public final class DatabaseSettings implements SettingsHolder { @Comment({"What type of database do you want to use?", - "Valid values: SQLITE, MYSQL"}) + "Valid values: SQLITE, MYSQL"}) public static final Property BACKEND = newProperty(DataSourceType.class, "DataSource.backend", DataSourceType.SQLITE); @@ -114,6 +114,11 @@ public final class DatabaseSettings implements SettingsHolder { public static final Property MYSQL_POOL_SIZE = newProperty("DataSource.poolSize", -1); + @Comment({"The maximum lifetime of a connection in the pool, default = 1800 seconds", + "You should set this at least 30 seconds less than mysql server wait_timeout"}) + public static final Property MYSQL_CONNECTION_MAX_LIFETIME = + newProperty("DataSource.maxLifetime", 1800); + private DatabaseSettings() { }