mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2024-10-04 09:27:27 +02:00
[#929] Removed custom Sponge DataSource MySQL implementation
This commit is contained in:
parent
2fc8c7c29b
commit
af8ff43c39
@ -87,7 +87,8 @@ public class MySQLDB extends SQLDB {
|
|||||||
String port = config.get(DatabaseSettings.MYSQL_PORT);
|
String port = config.get(DatabaseSettings.MYSQL_PORT);
|
||||||
String database = config.get(DatabaseSettings.MYSQL_DATABASE);
|
String database = config.get(DatabaseSettings.MYSQL_DATABASE);
|
||||||
String launchOptions = config.get(DatabaseSettings.MYSQL_LAUNCH_OPTIONS);
|
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";
|
launchOptions = "?rewriteBatchedStatements=true&useSSL=false";
|
||||||
logger.error(locale.getString(PluginLang.DB_MYSQL_LAUNCH_OPTIONS_FAIL, launchOptions));
|
logger.error(locale.getString(PluginLang.DB_MYSQL_LAUNCH_OPTIONS_FAIL, launchOptions));
|
||||||
}
|
}
|
||||||
|
@ -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 <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
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> 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<SqlService> 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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -18,8 +18,8 @@ package com.djrapitops.plan.system.database;
|
|||||||
|
|
||||||
import com.djrapitops.plan.api.exceptions.EnableException;
|
import com.djrapitops.plan.api.exceptions.EnableException;
|
||||||
import com.djrapitops.plan.db.H2DB;
|
import com.djrapitops.plan.db.H2DB;
|
||||||
|
import com.djrapitops.plan.db.MySQLDB;
|
||||||
import com.djrapitops.plan.db.SQLiteDB;
|
import com.djrapitops.plan.db.SQLiteDB;
|
||||||
import com.djrapitops.plan.db.SpongeMySQLDB;
|
|
||||||
import com.djrapitops.plan.system.locale.Locale;
|
import com.djrapitops.plan.system.locale.Locale;
|
||||||
import com.djrapitops.plan.system.settings.config.PlanConfig;
|
import com.djrapitops.plan.system.settings.config.PlanConfig;
|
||||||
import com.djrapitops.plan.system.settings.paths.DatabaseSettings;
|
import com.djrapitops.plan.system.settings.paths.DatabaseSettings;
|
||||||
@ -43,7 +43,7 @@ public class SpongeDBSystem extends DBSystem {
|
|||||||
@Inject
|
@Inject
|
||||||
public SpongeDBSystem(
|
public SpongeDBSystem(
|
||||||
Locale locale,
|
Locale locale,
|
||||||
SpongeMySQLDB spongeMySQLDB,
|
MySQLDB mySQLDB,
|
||||||
SQLiteDB.Factory sqLiteDB,
|
SQLiteDB.Factory sqLiteDB,
|
||||||
H2DB.Factory h2DB,
|
H2DB.Factory h2DB,
|
||||||
PlanConfig config,
|
PlanConfig config,
|
||||||
@ -54,7 +54,7 @@ public class SpongeDBSystem extends DBSystem {
|
|||||||
super(locale, sqLiteDB, h2DB, logger, timings, errorHandler);
|
super(locale, sqLiteDB, h2DB, logger, timings, errorHandler);
|
||||||
this.config = config;
|
this.config = config;
|
||||||
|
|
||||||
databases.add(spongeMySQLDB);
|
databases.add(mySQLDB);
|
||||||
databases.add(sqLiteDB.usingDefaultFile());
|
databases.add(sqLiteDB.usingDefaultFile());
|
||||||
databases.add(h2DB.usingDefaultFile());
|
databases.add(h2DB.usingDefaultFile());
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user