1
0
mirror of https://github.com/GeyserMC/Floodgate.git synced 2025-12-19 23:09:27 +00:00

Fixed issues with MariaDB support and renamed MariaDB to MySQL

This commit is contained in:
Tim203
2021-04-23 11:40:28 +02:00
parent 2cb0162f64
commit f46791bd18
10 changed files with 35 additions and 46 deletions

View File

@@ -26,8 +26,6 @@
package org.geysermc.floodgate.database.config; package org.geysermc.floodgate.database.config;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import com.google.inject.Inject;
import com.google.inject.name.Named;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
@@ -38,26 +36,22 @@ import org.yaml.snakeyaml.constructor.CustomClassLoaderConstructor;
import org.yaml.snakeyaml.introspector.BeanAccess; import org.yaml.snakeyaml.introspector.BeanAccess;
public class DatabaseConfigLoader { public class DatabaseConfigLoader {
private Yaml yaml; private final Path dataDirectory;
private final String name;
private final ClassLoader classLoader;
private final JsonObject initData;
private final Yaml yaml;
@Inject public DatabaseConfigLoader(
@Named("dataDirectory") Path dataDirectory,
private Path dataDirectory; String databaseName,
ClassLoader classLoader,
JsonObject initData) {
this.dataDirectory = dataDirectory;
this.name = databaseName;
this.classLoader = classLoader;
this.initData = initData;
@Inject
@Named("databaseName")
private String name;
@Inject
@Named("databaseClassLoader")
private ClassLoader classLoader;
@Inject
@Named("databaseInitData")
private JsonObject initData;
@Inject
public void init() {
yaml = new Yaml(new CustomClassLoaderConstructor(classLoader)); yaml = new Yaml(new CustomClassLoaderConstructor(classLoader));
yaml.setBeanAccess(BeanAccess.FIELD); yaml.setBeanAccess(BeanAccess.FIELD);
} }

View File

@@ -26,7 +26,6 @@
package org.geysermc.floodgate.link; package org.geysermc.floodgate.link;
import com.google.inject.Inject; import com.google.inject.Inject;
import com.google.inject.Injector;
import java.util.Random; import java.util.Random;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
@@ -58,7 +57,7 @@ public abstract class CommonPlayerLink implements PlayerLink {
private FloodgateApi api; private FloodgateApi api;
@Inject @Inject
private Injector injector; private DatabaseConfigLoader configLoader;
@Inject @Inject
private void init(FloodgateConfig config) { private void init(FloodgateConfig config) {
@@ -87,8 +86,8 @@ public abstract class CommonPlayerLink implements PlayerLink {
*/ */
public <T extends DatabaseConfig> T getConfig(Class<T> configClass) { public <T extends DatabaseConfig> T getConfig(Class<T> configClass) {
// this method is not intended to be used more than once. It'll make a new instance of // this method is not intended to be used more than once. It'll make a new instance of
// DatabaseConfigLoader and DatabaseConfig every time you run this method. // DatabaseConfig every time you run this method.
return injector.getInstance(DatabaseConfigLoader.class).loadAs(configClass); return configLoader.loadAs(configClass);
} }
@Override @Override

View File

@@ -32,7 +32,6 @@ import com.google.gson.JsonObject;
import com.google.inject.Inject; import com.google.inject.Inject;
import com.google.inject.Injector; import com.google.inject.Injector;
import com.google.inject.Singleton; import com.google.inject.Singleton;
import com.google.inject.name.Names;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.InputStreamReader; import java.io.InputStreamReader;
@@ -46,6 +45,7 @@ import javax.inject.Named;
import org.geysermc.floodgate.api.link.PlayerLink; import org.geysermc.floodgate.api.link.PlayerLink;
import org.geysermc.floodgate.api.logger.FloodgateLogger; import org.geysermc.floodgate.api.logger.FloodgateLogger;
import org.geysermc.floodgate.config.FloodgateConfig; import org.geysermc.floodgate.config.FloodgateConfig;
import org.geysermc.floodgate.database.config.DatabaseConfigLoader;
import org.geysermc.floodgate.util.Constants; import org.geysermc.floodgate.util.Constants;
import org.geysermc.floodgate.util.Utils; import org.geysermc.floodgate.util.Utils;
@@ -156,14 +156,10 @@ public final class PlayerLinkLoader {
init = false; init = false;
Injector linkInjector = injector.createChildInjector(binder -> { Injector linkInjector = injector.createChildInjector(binder -> {
binder.bind(String.class) DatabaseConfigLoader configLoader = new DatabaseConfigLoader(
.annotatedWith(Names.named("databaseName")) dataDirectory, databaseName, classLoader, linkConfig
.toInstance(databaseName); );
binder.bind(ClassLoader.class).annotatedWith( binder.bind(DatabaseConfigLoader.class).toInstance(configLoader);
Names.named("databaseClassLoader")).toInstance(classLoader);
binder.bind(JsonObject.class)
.annotatedWith(Names.named("databaseInitData"))
.toInstance(linkConfig);
}); });
PlayerLink instance = linkInjector.getInstance(mainClass); PlayerLink instance = linkInjector.getInstance(mainClass);

View File

@@ -1,4 +0,0 @@
{
"mainClass": "org.geysermc.floodgate.database.MariadbDatabase",
"config": "mariadb.yml"
}

View File

@@ -10,7 +10,7 @@
<version>2.0-SNAPSHOT</version> <version>2.0-SNAPSHOT</version>
</parent> </parent>
<artifactId>mariadb</artifactId> <artifactId>mysql</artifactId>
<dependencies> <dependencies>
<dependency> <dependency>

View File

@@ -39,21 +39,21 @@ import java.util.concurrent.CompletionException;
import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.NonNull;
import org.geysermc.floodgate.api.link.LinkRequest; import org.geysermc.floodgate.api.link.LinkRequest;
import org.geysermc.floodgate.api.link.LinkRequestResult; import org.geysermc.floodgate.api.link.LinkRequestResult;
import org.geysermc.floodgate.database.config.MariadbConfig; import org.geysermc.floodgate.database.config.MysqlConfig;
import org.geysermc.floodgate.link.CommonPlayerLink; import org.geysermc.floodgate.link.CommonPlayerLink;
import org.geysermc.floodgate.link.LinkRequestImpl; import org.geysermc.floodgate.link.LinkRequestImpl;
import org.geysermc.floodgate.util.LinkedPlayer; import org.geysermc.floodgate.util.LinkedPlayer;
import org.mariadb.jdbc.MariaDbPoolDataSource; import org.mariadb.jdbc.MariaDbPoolDataSource;
public class MariadbDatabase extends CommonPlayerLink { public class MysqlDatabase extends CommonPlayerLink {
private MariaDbPoolDataSource pool; private MariaDbPoolDataSource pool;
@Override @Override
public void load() { public void load() {
getLogger().info("Connecting to mariadb database..."); getLogger().info("Connecting to a MySQL-like database...");
try { try {
Class.forName("org.mariadb.jdbc.Driver"); Class.forName("org.mariadb.jdbc.Driver");
MariadbConfig databaseconfig = getConfig(MariadbConfig.class); MysqlConfig databaseconfig = getConfig(MysqlConfig.class);
pool = new MariaDbPoolDataSource( pool = new MariaDbPoolDataSource(
"jdbc:mariadb://" + databaseconfig.getHostname() + "/" + "jdbc:mariadb://" + databaseconfig.getHostname() + "/" +
databaseconfig.getDatabase() + databaseconfig.getDatabase() +
@@ -85,9 +85,9 @@ public class MariadbDatabase extends CommonPlayerLink {
); );
} }
} }
getLogger().info("Connected to mariadb database."); getLogger().info("Connected to MySQL-like database.");
} catch (ClassNotFoundException exception) { } catch (ClassNotFoundException exception) {
getLogger().error("The required class to load the MariaDB database wasn't found"); getLogger().error("The required class to load the MySQL database wasn't found");
} catch (SQLException exception) { } catch (SQLException exception) {
getLogger().error("Error while loading database", exception); getLogger().error("Error while loading database", exception);
} }

View File

@@ -28,7 +28,7 @@ package org.geysermc.floodgate.database.config;
import lombok.Getter; import lombok.Getter;
@Getter @Getter
public class MariadbConfig implements DatabaseConfig { public class MysqlConfig implements DatabaseConfig {
private String hostname = "localhost"; private String hostname = "localhost";
private String database = "floodgate"; private String database = "floodgate";
private String username = "floodgate"; private String username = "floodgate";

View File

@@ -0,0 +1,4 @@
{
"mainClass": "org.geysermc.floodgate.database.MysqlDatabase",
"config": "mysql.yml"
}

View File

@@ -19,7 +19,7 @@
<modules> <modules>
<module>sqlite</module> <module>sqlite</module>
<module>mariadb</module> <module>mysql</module>
</modules> </modules>
<properties> <properties>