From af8ff43c39fda439cf23ee378d107caf0f06f385 Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Mon, 25 Feb 2019 10:48:12 +0200 Subject: [PATCH] [#929] Removed custom Sponge DataSource MySQL implementation --- .../java/com/djrapitops/plan/db/MySQLDB.java | 3 +- .../com/djrapitops/plan/db/SpongeMySQLDB.java | 108 ------------------ .../plan/system/database/SpongeDBSystem.java | 6 +- 3 files changed, 5 insertions(+), 112 deletions(-) delete mode 100644 Plan/sponge/src/main/java/com/djrapitops/plan/db/SpongeMySQLDB.java diff --git a/Plan/common/src/main/java/com/djrapitops/plan/db/MySQLDB.java b/Plan/common/src/main/java/com/djrapitops/plan/db/MySQLDB.java index 010959e18..8445b8534 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/db/MySQLDB.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/db/MySQLDB.java @@ -87,7 +87,8 @@ public class MySQLDB extends SQLDB { String port = config.get(DatabaseSettings.MYSQL_PORT); String database = config.get(DatabaseSettings.MYSQL_DATABASE); String launchOptions = config.get(DatabaseSettings.MYSQL_LAUNCH_OPTIONS); - if (launchOptions.isEmpty() || !launchOptions.startsWith("?") || launchOptions.endsWith("&")) { + // REGEX: match "?", match "word=word&" *-times, match "word=word" + if (launchOptions.isEmpty() || !launchOptions.matches("\\?((\\w*=\\w*)&)*(\\w*=\\w*)")) { launchOptions = "?rewriteBatchedStatements=true&useSSL=false"; logger.error(locale.getString(PluginLang.DB_MYSQL_LAUNCH_OPTIONS_FAIL, launchOptions)); } diff --git a/Plan/sponge/src/main/java/com/djrapitops/plan/db/SpongeMySQLDB.java b/Plan/sponge/src/main/java/com/djrapitops/plan/db/SpongeMySQLDB.java deleted file mode 100644 index 694bcd861..000000000 --- a/Plan/sponge/src/main/java/com/djrapitops/plan/db/SpongeMySQLDB.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * This file is part of Player Analytics (Plan). - * - * Plan is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License v3 as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * Plan is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with Plan. If not, see . - */ -package com.djrapitops.plan.db; - -import com.djrapitops.plan.api.exceptions.database.DBInitException; -import com.djrapitops.plan.data.store.containers.NetworkContainer; -import com.djrapitops.plan.system.info.server.ServerInfo; -import com.djrapitops.plan.system.locale.Locale; -import com.djrapitops.plan.system.settings.config.PlanConfig; -import com.djrapitops.plan.system.settings.paths.DatabaseSettings; -import com.djrapitops.plugin.benchmarking.Timings; -import com.djrapitops.plugin.logging.console.PluginLogger; -import com.djrapitops.plugin.logging.error.ErrorHandler; -import com.djrapitops.plugin.task.RunnableFactory; -import dagger.Lazy; -import org.spongepowered.api.Sponge; -import org.spongepowered.api.service.sql.SqlService; - -import javax.inject.Inject; -import java.sql.Connection; -import java.sql.SQLException; -import java.util.Optional; - -/** - * MySQLDB implementation for Sponge since default driver is not available. - * - * @author Rsl1122 - */ -public class SpongeMySQLDB extends MySQLDB { - - @Inject - public SpongeMySQLDB( - Locale locale, - PlanConfig config, - Lazy serverInfo, - NetworkContainer.Factory networkContainerFactory, - RunnableFactory runnableFactory, - PluginLogger pluginLogger, - Timings timings, - ErrorHandler errorHandler - ) { - super(locale, config, serverInfo, networkContainerFactory, runnableFactory, pluginLogger, timings, errorHandler); - } - - @Override - public void setupDataSource() { - Optional sqlServiceProvider = Sponge.getServiceManager().provide(SqlService.class); - if (!sqlServiceProvider.isPresent()) { - return; - } - - String host = config.get(DatabaseSettings.MYSQL_HOST); - String port = config.get(DatabaseSettings.MYSQL_PORT); - String database = config.get(DatabaseSettings.MYSQL_DATABASE); - String launchOptions = config.get(DatabaseSettings.MYSQL_LAUNCH_OPTIONS); - if (launchOptions.isEmpty() || !launchOptions.startsWith("?") || launchOptions.endsWith("&")) { - logger.error("Launch Options were faulty, using default (?rewriteBatchedStatements=true&useSSL=false)"); - launchOptions = "?rewriteBatchedStatements=true&useSSL=false"; - } - - String url = host + ":" + port + "/" + database + launchOptions; - String username = config.get(DatabaseSettings.MYSQL_USER); - String password = config.get(DatabaseSettings.MYSQL_PASS); - try { - this.dataSource = sqlServiceProvider.get().getDataSource( - "jdbc:mysql://" + username + ":" + password + "@" + url - ); - } catch (SQLException e) { - throw new DBInitException(e.getMessage(), e); - } - } - - @Override - public synchronized Connection getConnection() throws SQLException { - try { - return super.getConnection(); - } catch (SQLException e) { - if (e.getMessage().contains("has been closed")) { - restartDataSource(); - return super.getConnection(); - } else { - throw e; - } - } - } - - private void restartDataSource() { - try { - setupDataSource(); - } catch (DBInitException setupException) { - throw new IllegalStateException("Failed to set up a new datasource after connection failure.", setupException); - } - } -} \ No newline at end of file diff --git a/Plan/sponge/src/main/java/com/djrapitops/plan/system/database/SpongeDBSystem.java b/Plan/sponge/src/main/java/com/djrapitops/plan/system/database/SpongeDBSystem.java index db2cfdca2..d548f9379 100644 --- a/Plan/sponge/src/main/java/com/djrapitops/plan/system/database/SpongeDBSystem.java +++ b/Plan/sponge/src/main/java/com/djrapitops/plan/system/database/SpongeDBSystem.java @@ -18,8 +18,8 @@ package com.djrapitops.plan.system.database; import com.djrapitops.plan.api.exceptions.EnableException; import com.djrapitops.plan.db.H2DB; +import com.djrapitops.plan.db.MySQLDB; import com.djrapitops.plan.db.SQLiteDB; -import com.djrapitops.plan.db.SpongeMySQLDB; import com.djrapitops.plan.system.locale.Locale; import com.djrapitops.plan.system.settings.config.PlanConfig; import com.djrapitops.plan.system.settings.paths.DatabaseSettings; @@ -43,7 +43,7 @@ public class SpongeDBSystem extends DBSystem { @Inject public SpongeDBSystem( Locale locale, - SpongeMySQLDB spongeMySQLDB, + MySQLDB mySQLDB, SQLiteDB.Factory sqLiteDB, H2DB.Factory h2DB, PlanConfig config, @@ -54,7 +54,7 @@ public class SpongeDBSystem extends DBSystem { super(locale, sqLiteDB, h2DB, logger, timings, errorHandler); this.config = config; - databases.add(spongeMySQLDB); + databases.add(mySQLDB); databases.add(sqLiteDB.usingDefaultFile()); databases.add(h2DB.usingDefaultFile()); }