Merge pull request #4 from P0nk/db-connection

Upgrade MySQL version, fix connection pool, rework Docker support
This commit is contained in:
Ponk
2021-04-03 15:26:18 +02:00
committed by GitHub
44 changed files with 208 additions and 265 deletions
+3
View File
@@ -0,0 +1,3 @@
/docs
/handbook
/tools
+1
View File
@@ -2,6 +2,7 @@
.idea/
*.iml
/target
/docker-db-data
# build files
+17 -10
View File
@@ -1,13 +1,20 @@
# Docker support, thanks to xinyifly
# Initial Docker support thanks to xinyifly
FROM openjdk:8u171-jdk-alpine
RUN apk -U add tini
WORKDIR /mnt
#
# Build stage
#
FROM maven:3.6.3-jdk-8 AS build
COPY src /home/app/src
COPY pom.xml /home/app
RUN mvn -f /home/app/pom.xml clean package
#
# Package stage
#
FROM openjdk:8
COPY --from=build /home/app/target/Cosmic.jar /usr/local/lib/Cosmic.jar
COPY ./ ./
RUN sh ./posix-compile.sh
ADD https://github.com/ufoscout/docker-compose-wait/releases/download/2.6.0/wait /wait
RUN chmod +x /wait
EXPOSE 8484 7575 7576 7577
ENTRYPOINT ["tini", "--"]
CMD /wait && sh ./posix-launch.sh
ENTRYPOINT ["java", "-jar", "/usr/local/lib/Cosmic.jar"]
+5 -4
View File
@@ -162,10 +162,11 @@ server:
USE_THREAD_TRACKER: false #[SEVERE] This deadlock auditing thing will bloat the memory as fast as the time frame one takes to lose track of a raindrop on a tempesting day. Only for debugging purposes.
#Database Configuration
DB_URL: "jdbc:mysql://localhost:3306/cosmic"
DB_USER: "snail"
DB_PASS: "shell"
DB_CONNECTION_POOL: true #Installs a connection pool to hub DB connections. Set false to default.
DB_URL_FORMAT: "jdbc:mysql://%s:3306/cosmic"
DB_HOST: "localhost"
DB_USER: "cosmic_server"
DB_PASS: "snailshell"
INIT_CONNECTION_POOL_TIMEOUT: 60 # Seconds
#Login Configuration
WORLDS: 1 #Initial number of worlds on the server.
+9 -7
View File
@@ -1,20 +1,22 @@
version: '3'
services:
maplestory:
network_mode: "host"
build: .
depends_on:
- db
ports:
- "8484:8484"
- "7575-7577:7575-7577"
environment:
WAIT_HOSTS: localhost:3306
DB_HOST: "db"
db:
network_mode: "host"
image: mysql:5.6
image: mysql:8.0.23
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
MYSQL_RANDOM_ROOT_PASSWORD: "true"
MYSQL_DATABASE: "cosmic"
MYSQL_USER: "root"
MYSQL_PASSWORD: ""
MYSQL_USER: "cosmic_server"
MYSQL_PASSWORD: "snailshell"
volumes:
- ./docker-db-data:/var/lib/mysql
- ./sql:/docker-entrypoint-initdb.d
-61
View File
@@ -1,61 +0,0 @@
REM // 'launchtest.bat' Author: Tochi
@echo off
set a=0
title HeavenMS: Offline
color 1b
:clear
cls
echo HeavenMS Server Launcher
echo.
echo Commands:
echo -------------------------------------------------------------
echo start - Start HeavenMS server
echo shutdown - Shut down HeavenMS server and close Launcher File
echo reset - Resets HeavenMS Launcher File
echo clear - Clear this window
echo -------------------------------------------------------------
echo.
:command
set /p s="Enter command: "
if "%s%"=="start" goto :start
if "%s%"=="shutdown" goto :shutdown
if "%s%"=="reset" goto :reset
if "%s%"=="clear" goto :clear
echo Wrong Command.
echo.
goto :command
:start
if "%a%"=="1" (
echo HeavenMS is already active!
echo.
goto :command
)
color 4c
echo This might take a while....
echo.
title HeavenMS: activating
echo Server Launching...
start /b launch.bat
color 2a
title HeavenMS: Online
set a=1
ping localhost -w 10000 >nul
echo.
goto :command
:shutdown
color 4c
title HeavenMS: Shutting Down...
echo The Server Launcher will be close in a few seconds.
ping localhost -w 100000 >nul
taskkill /im cmd.exe
:reset
color 4c
title HeavenMS: Resetting...
echo Please type 'start' in command box after bat file have been resetted.
ping localhost -w 100000 >nul
start launchtest.bat REM // thanks Paxum for noting that 'launchtest.bat' is to be used here
taskkill /im cmd.exe
-4
View File
@@ -1,4 +0,0 @@
#!/bin/bash
# thanks to lkxyyjx
sudo ant -Dplatforms.JDK_1.7.home=/opt/jdk1.7.0_80 compile
sudo ant -Dplatforms.JDK_1.7.home=/opt/jdk1.7.0_80 jar
-4
View File
@@ -1,4 +0,0 @@
#!/bin/sh
# cores in classpath, thanks to lkxyyjx
export CLASSPATH=".:dist/*:cores/*"
java -Xmx2048m -Dwzpath=wz/ net.server.Server
+1 -1
View File
@@ -31,7 +31,7 @@
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
<version>8.0.23</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
-11
View File
@@ -1,11 +0,0 @@
#!/bin/bash
# compilation script for posix-compliant systems
src=src
dist=dist
cores=$(echo cores/*)
cores=${cores// /:}
mkdir -p $dist
javac -d $dist -cp $cores $(find $src -name "*.java")
-7
View File
@@ -1,7 +0,0 @@
#!/bin/bash
# launch script
cores=$(echo cores/*)
cores=${cores// /:}
cp=.:dist:$cores
java -Xmx2048m -Dwzpath=wz -cp $cp net.server.Server
@@ -21,7 +21,7 @@ CREATE TABLE IF NOT EXISTS `accounts` (
`loggedin` tinyint(4) NOT NULL DEFAULT '0',
`lastlogin` timestamp NULL DEFAULT NULL,
`createdat` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`birthday` date NOT NULL DEFAULT '0000-00-00',
`birthday` date NOT NULL DEFAULT '2005-05-11',
`banned` tinyint(1) NOT NULL DEFAULT '0',
`banreason` text,
`macs` tinytext,
@@ -30,7 +30,7 @@ CREATE TABLE IF NOT EXISTS `accounts` (
`nxPrepaid` int(11) DEFAULT NULL,
`characterslots` tinyint(2) NOT NULL DEFAULT '3',
`gender` tinyint(2) NOT NULL DEFAULT '10',
`tempban` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`tempban` timestamp NOT NULL DEFAULT '2005-05-11 00:00:00',
`greason` tinyint(4) NOT NULL DEFAULT '0',
`tos` tinyint(1) NOT NULL DEFAULT '0',
`sitelogged` text,
+19
View File
@@ -0,0 +1,19 @@
package client;
import java.time.LocalDate;
import java.time.LocalDateTime;
final public class DefaultDates {
// May 11 2005 is the date MapleGlobal released, so it's a symbolic default value
private DefaultDates() {
}
public static LocalDate getBirthday() {
return LocalDate.parse("2005-05-11");
}
public static LocalDateTime getTempban() {
return LocalDateTime.parse("2005-05-11T00:00:00");
}
}
+10 -3
View File
@@ -30,6 +30,7 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
@@ -9777,7 +9778,8 @@ public class MapleCharacter extends AbstractMapleCharacterObject {
public void showNote() {
try {
Connection con = DatabaseConnection.getConnection();
try (PreparedStatement ps = con.prepareStatement("SELECT * FROM notes WHERE `to` = ? AND `deleted` = 0", ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE)) {
try (PreparedStatement ps = con.prepareStatement("SELECT * FROM notes WHERE `to` = ? AND `deleted` = 0",
ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE)) {
ps.setString(1, this.getName());
try (ResultSet rs = ps.executeQuery()) {
rs.last();
@@ -11036,8 +11038,13 @@ public class MapleCharacter extends AbstractMapleCharacterObject {
try (PreparedStatement ps = con.prepareStatement("SELECT tempban FROM accounts WHERE id = ?")) {
ps.setInt(1, accountId);
ResultSet rs = ps.executeQuery();
if(!rs.next()) return "Account does not exist.";
if(rs.getLong("tempban") != 0 && !rs.getString("tempban").equals("2018-06-20 00:00:00.0")) return "Account has been banned.";
if (!rs.next()) {
return "Account does not exist.";
}
LocalDateTime tempban = rs.getTimestamp("tempban").toLocalDateTime();
if(!tempban.equals(DefaultDates.getTempban())) {
return "Account has been banned.";
}
} catch(SQLException e) {
e.printStackTrace();
FilePrinter.printError(FilePrinter.CHANGE_CHARACTER_NAME, e);
+11 -12
View File
@@ -25,10 +25,8 @@ import java.io.*;
import java.net.InetAddress;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.*;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
@@ -647,23 +645,24 @@ public class MapleClient {
ResultSet rs = null;
final Calendar lTempban = Calendar.getInstance();
try {
con = DatabaseConnection.getConnection();
con = DatabaseConnection.getConnection();
ps = con.prepareStatement("SELECT `tempban` FROM accounts WHERE id = ?");
ps.setInt(1, getAccID());
rs = ps.executeQuery();
if (!rs.next()) {
return null;
}
long blubb = rs.getLong("tempban");
if (blubb == 0 || rs.getString("tempban").equals("2018-06-20 00:00:00.0")) { // 0000-00-00 or 2018-06-20 (default set in LoginPasswordHandler)
final Timestamp tempban = rs.getTimestamp("tempban");
if (tempban.toLocalDateTime().equals(DefaultDates.getTempban())) {
return null;
}
lTempban.setTimeInMillis(rs.getTimestamp("tempban").getTime());
lTempban.setTimeInMillis(tempban.getTime());
tempBanCalendar = lTempban;
return lTempban;
} catch (SQLException e) {
e.printStackTrace();
e.printStackTrace();
} finally {
try {
if (ps != null) {
@@ -672,11 +671,11 @@ public class MapleClient {
if (rs != null) {
rs.close();
}
if (con != null && !con.isClosed()) {
if (con != null && !con.isClosed()) {
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
e.printStackTrace();
}
}
return null;//why oh why!?!
+3 -2
View File
@@ -247,9 +247,10 @@ public final class MonsterBook {
public static int[] getCardTierSize() {
try {
Connection con = DatabaseConnection.getConnection();
PreparedStatement ps = con.prepareStatement("SELECT COUNT(*) FROM monstercarddata GROUP BY floor(cardid / 1000);");
PreparedStatement ps = con.prepareStatement("SELECT COUNT(*) FROM monstercarddata GROUP BY floor(cardid / 1000);",
ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
ResultSet rs = ps.executeQuery();
rs.last();
int[] tierSizes = new int[rs.getRow()];
rs.beforeFirst();
+3 -2
View File
@@ -5,10 +5,11 @@ public class ServerConfig {
public boolean USE_THREAD_TRACKER;
//Database Configuration
public String DB_URL;
public String DB_URL_FORMAT;
public String DB_HOST;
public String DB_USER;
public String DB_PASS;
public boolean DB_CONNECTION_POOL;
public int INIT_CONNECTION_POOL_TIMEOUT;
//Login Configuration
public int WORLDS;
+8 -2
View File
@@ -866,8 +866,13 @@ public class Server {
public void init() {
System.out.println("Cosmic v" + ServerConstants.VERSION + " starting up.\r\n");
if(YamlConfig.config.server.SHUTDOWNHOOK)
if(YamlConfig.config.server.SHUTDOWNHOOK) {
Runtime.getRuntime().addShutdownHook(new Thread(shutdown(false)));
}
if (!DatabaseConnection.initializeConnectionPool()) {
throw new IllegalStateException("Failed to initiate a connection to the database");
}
TimeZone.setDefault(TimeZone.getTimeZone(YamlConfig.config.server.TIMEZONE));
@@ -1620,7 +1625,8 @@ public class Server {
private static void applyAllWorldTransfers() {
try (Connection con = DatabaseConnection.getConnection();
PreparedStatement ps = con.prepareStatement("SELECT * FROM worldtransfers WHERE completionTime IS NULL")) {
PreparedStatement ps = con.prepareStatement("SELECT * FROM worldtransfers WHERE completionTime IS NULL",
ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY)) {
ResultSet rs = ps.executeQuery();
List<Integer> removedTransfers = new LinkedList<Integer>();
while(rs.next()) {
@@ -98,7 +98,8 @@ public final class BBSOperationHandler extends AbstractMaplePacketHandler {
private static void listBBSThreads(MapleClient c, int start) {
try {
Connection con = DatabaseConnection.getConnection();
try (PreparedStatement ps = con.prepareStatement("SELECT * FROM bbs_threads WHERE guildid = ? ORDER BY localthreadid DESC")) {
try (PreparedStatement ps = con.prepareStatement("SELECT * FROM bbs_threads WHERE guildid = ? ORDER BY localthreadid DESC",
ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY)) {
ps.setInt(1, c.getPlayer().getGuildId());
try (ResultSet rs = ps.executeQuery()) {
c.announce(MaplePacketCreator.BBSThreadList(rs, start));
@@ -76,7 +76,7 @@ public class MapleGuild {
con = DatabaseConnection.getConnection();
PreparedStatement ps = con.prepareStatement("SELECT * FROM guilds WHERE guildid = " + guildid);
ResultSet rs = ps.executeQuery();
if (!rs.first()) {
if (!rs.next()) {
id = -1;
ps.close();
rs.close();
@@ -102,7 +102,7 @@ public class MapleGuild {
ps = con.prepareStatement("SELECT id, name, level, job, guildrank, allianceRank FROM characters WHERE guildid = ? ORDER BY guildrank ASC, name ASC");
ps.setInt(1, guildid);
rs = ps.executeQuery();
if (!rs.first()) {
if (!rs.next()) {
rs.close();
ps.close();
return;
@@ -436,7 +436,7 @@ public class MapleGuild {
PreparedStatement ps = con.prepareStatement("SELECT guildid FROM guilds WHERE name = ?");
ps.setString(1, name);
ResultSet rs = ps.executeQuery();
if (rs.first()) {
if (rs.next()) {
ps.close();
rs.close();
return 0;
@@ -454,7 +454,7 @@ public class MapleGuild {
ps = con.prepareStatement("SELECT guildid FROM guilds WHERE leader = ?");
ps.setInt(1, leaderId);
rs = ps.executeQuery();
rs.first();
rs.next();
int guildId = rs.getInt("guildid");
rs.close();
ps.close();
@@ -779,7 +779,8 @@ public class MapleGuild {
try {
ResultSet rs;
Connection con = DatabaseConnection.getConnection();
try (PreparedStatement ps = con.prepareStatement("SELECT `name`, `GP`, `logoBG`, `logoBGColor`, `logo`, `logoColor` FROM guilds ORDER BY `GP` DESC LIMIT 50")) {
try (PreparedStatement ps = con.prepareStatement("SELECT `name`, `GP`, `logoBG`, `logoBGColor`, `logo`, `logoColor` FROM guilds ORDER BY `GP` DESC LIMIT 50",
ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY)) {
rs = ps.executeQuery();
c.announce(MaplePacketCreator.showGuildRanks(npcid, rs));
}
@@ -21,11 +21,11 @@
*/
package net.server.handlers.login;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.*;
import java.time.LocalDateTime;
import java.util.Calendar;
import client.DefaultDates;
import config.YamlConfig;
import net.MaplePacketHandler;
import net.server.Server;
@@ -35,8 +35,7 @@ import tools.HexTool;
import tools.MaplePacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
import client.MapleClient;
import java.sql.ResultSet;
import java.sql.Statement;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
@@ -100,8 +99,8 @@ public final class LoginPasswordHandler implements MaplePacketHandler {
ps = con.prepareStatement("INSERT INTO accounts (name, password, birthday, tempban) VALUES (?, ?, ?, ?);", Statement.RETURN_GENERATED_KEYS); //Jayd: Added birthday, tempban
ps.setString(1, login);
ps.setString(2, YamlConfig.config.server.BCRYPT_MIGRATION ? BCrypt.hashpw(pwd, BCrypt.gensalt(12)) : hashpwSHA512(pwd));
ps.setString(3, "2018-06-20"); //Jayd's idea: was added to solve the MySQL 5.7 strict checking (birthday)
ps.setString(4, "2018-06-20"); //Jayd's idea: was added to solve the MySQL 5.7 strict checking (tempban)
ps.setDate(3, Date.valueOf(DefaultDates.getBirthday()));
ps.setTimestamp(4, Timestamp.valueOf(DefaultDates.getTempban()));
ps.executeUpdate();
ResultSet rs = ps.getGeneratedKeys();
@@ -30,7 +30,6 @@ import client.inventory.MapleInventoryType;
import client.inventory.manipulator.MapleInventoryManipulator;
import client.inventory.manipulator.MapleKarmaManipulator;
import client.processor.npc.FredrickProcessor;
import com.mysql.jdbc.Statement;
import config.YamlConfig;
import java.sql.Connection;
import java.sql.PreparedStatement;
@@ -309,7 +308,7 @@ public class MapleHiredMerchant extends AbstractMapleMapObject {
}
merchantMesos += price;
try (PreparedStatement ps = con.prepareStatement("UPDATE characters SET MerchantMesos = ? WHERE id = ?", Statement.RETURN_GENERATED_KEYS)) {
try (PreparedStatement ps = con.prepareStatement("UPDATE characters SET MerchantMesos = ? WHERE id = ?", PreparedStatement.RETURN_GENERATED_KEYS)) {
ps.setInt(1, (int) Math.min(merchantMesos, Integer.MAX_VALUE));
ps.setInt(2, ownerId);
ps.executeUpdate();
@@ -383,7 +382,7 @@ public class MapleHiredMerchant extends AbstractMapleMapObject {
} else {
try {
Connection con = DatabaseConnection.getConnection();
PreparedStatement ps = con.prepareStatement("UPDATE characters SET HasMerchant = 0 WHERE id = ?", Statement.RETURN_GENERATED_KEYS);
PreparedStatement ps = con.prepareStatement("UPDATE characters SET HasMerchant = 0 WHERE id = ?", PreparedStatement.RETURN_GENERATED_KEYS);
ps.setInt(1, ownerId);
ps.executeUpdate();
@@ -442,7 +441,7 @@ public class MapleHiredMerchant extends AbstractMapleMapObject {
player.setHasMerchant(false);
} else {
Connection con = DatabaseConnection.getConnection();
try (PreparedStatement ps = con.prepareStatement("UPDATE characters SET HasMerchant = 0 WHERE id = ?", Statement.RETURN_GENERATED_KEYS)) {
try (PreparedStatement ps = con.prepareStatement("UPDATE characters SET HasMerchant = 0 WHERE id = ?", PreparedStatement.RETURN_GENERATED_KEYS)) {
ps.setInt(1, ownerId);
ps.executeUpdate();
}
+61 -78
View File
@@ -1,10 +1,11 @@
package tools;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.time.Duration;
import java.time.Instant;
import java.util.concurrent.TimeUnit;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
@@ -16,82 +17,64 @@ import config.YamlConfig;
* @author Ronan - some connection pool to this beautiful code
*/
public class DatabaseConnection {
private static HikariDataSource ds;
public static Connection getConnection() throws SQLException {
if(ds != null) {
try {
return ds.getConnection();
} catch (SQLException sqle) {
sqle.printStackTrace();
}
}
int denies = 0;
while(true) { // There is no way it can pass with a null out of here?
try {
return DriverManager.getConnection(YamlConfig.config.server.DB_URL, YamlConfig.config.server.DB_USER, YamlConfig.config.server.DB_PASS);
} catch (SQLException sqle) {
denies++;
if(denies == 3) {
// Give up, throw exception. Nothing good will come from this.
FilePrinter.printError(FilePrinter.SQL_EXCEPTION, "SQL Driver refused to give a connection after " + denies + " tries. Problem: " + sqle.getMessage());
throw sqle;
}
}
}
}
private static int getNumberOfAccounts() {
try {
Connection con = DriverManager.getConnection(YamlConfig.config.server.DB_URL, YamlConfig.config.server.DB_USER, YamlConfig.config.server.DB_PASS);
try (PreparedStatement ps = con.prepareStatement("SELECT count(*) FROM accounts")) {
try (ResultSet rs = ps.executeQuery()) {
rs.next();
return rs.getInt(1);
}
} finally {
con.close();
}
} catch(SQLException sqle) {
return 20;
}
}
public DatabaseConnection() {
try {
Class.forName("com.mysql.jdbc.Driver"); // touch the mysql driver
} catch (ClassNotFoundException e) {
System.out.println("[SEVERE] SQL Driver Not Found. Consider death by clams.");
e.printStackTrace();
}
ds = null;
if(YamlConfig.config.server.DB_CONNECTION_POOL) {
// Connection Pool on database ftw!
HikariConfig config = new HikariConfig();
config.setJdbcUrl(YamlConfig.config.server.DB_URL);
config.setUsername(YamlConfig.config.server.DB_USER);
config.setPassword(YamlConfig.config.server.DB_PASS);
// Make sure pool size is comfortable for the worst case scenario.
// Under 100 accounts? Make it 10. Over 10000 accounts? Make it 30.
int poolSize = (int)Math.ceil(0.00202020202 * getNumberOfAccounts() + 9.797979798);
if(poolSize < 10) poolSize = 10;
else if(poolSize > 30) poolSize = 30;
config.setConnectionTimeout(30 * 1000);
config.setMaximumPoolSize(poolSize);
config.addDataSourceProperty("cachePrepStmts", true);
config.addDataSourceProperty("prepStmtCacheSize", 25);
config.addDataSourceProperty("prepStmtCacheSqlLimit", 2048);
private static HikariDataSource dataSource;
ds = new HikariDataSource(config);
public static Connection getConnection() throws SQLException {
if (dataSource == null) {
throw new IllegalStateException("Unable to get connection from uninitialized connection pool");
}
return dataSource.getConnection();
}
private static String getDbUrl() {
// Environment variables override what's defined in the config file
// This feature is used for the Docker support
String hostOverride = System.getenv("DB_HOST");
String host = hostOverride != null ? hostOverride : YamlConfig.config.server.DB_HOST;
String dbUrl = String.format(YamlConfig.config.server.DB_URL_FORMAT, host);
return dbUrl;
}
private static HikariConfig getConfig() {
HikariConfig config = new HikariConfig();
config.setJdbcUrl(getDbUrl());
config.setUsername(YamlConfig.config.server.DB_USER);
config.setPassword(YamlConfig.config.server.DB_PASS);
final int initFailTimeoutSeconds = YamlConfig.config.server.INIT_CONNECTION_POOL_TIMEOUT;
config.setInitializationFailTimeout(TimeUnit.SECONDS.toMillis(initFailTimeoutSeconds));
config.setConnectionTimeout(30 * 1000); // Hikari default
config.setMaximumPoolSize(10); // Hikari default
config.addDataSourceProperty("cachePrepStmts", true);
config.addDataSourceProperty("prepStmtCacheSize", 25);
config.addDataSourceProperty("prepStmtCacheSqlLimit", 2048);
return config;
}
/**
* Initiate connection to the database
*
* @return true if connection to the database initiated successfully, false if not successful
*/
public static boolean initializeConnectionPool() {
System.out.println("Initializing connection pool...");
final HikariConfig config = getConfig();
Instant initStart = Instant.now();
try {
dataSource = new HikariDataSource(config);
long initDuration = Duration.between(initStart, Instant.now()).toMillis();
System.out.printf("Connection pool initialized in %d ms%n", initDuration);
return true;
} catch (Exception e) {
long timeout = Duration.between(initStart, Instant.now()).getSeconds();
System.err.printf("Failed to initialize database connection pool. Gave up after %d seconds.%n", timeout);
}
// Timed out - failed to initialize
return false;
}
}
@@ -10,8 +10,8 @@ import java.sql.SQLException;
*/
public class DatabaseConnection {
private static String DB_URL = "jdbc:mysql://localhost:3306/cosmic";
private static String DB_USER = "snail";
private static String DB_PASS = "shell";
private static String DB_USER = "cosmic_server";
private static String DB_PASS = "snailshell";
public static final int RETURN_GENERATED_KEYS = 1;
@@ -10,8 +10,8 @@ import java.sql.SQLException;
*/
public class DatabaseConnection {
private static String DB_URL = "jdbc:mysql://localhost:3306/cosmic";
private static String DB_USER = "snail";
private static String DB_PASS = "shell";
private static String DB_USER = "cosmic_server";
private static String DB_PASS = "snailshell";
public static final int RETURN_GENERATED_KEYS = 1;
@@ -50,8 +50,8 @@ import tools.Pair;
public class MapleCashDropFetcher {
static String host = "jdbc:mysql://localhost:3306/cosmic";
static String driver = "com.mysql.jdbc.Driver";
static String username = "snail";
static String password = "shell";
static String username = "cosmic_server";
static String password = "snailshell";
static String wzPath = "../../wz";
@@ -10,8 +10,8 @@ import java.sql.SQLException;
*/
public class DatabaseConnection {
private static String DB_URL = "jdbc:mysql://localhost:3306/cosmic";
private static String DB_USER = "snail";
private static String DB_PASS = "shell";
private static String DB_USER = "cosmic_server";
private static String DB_PASS = "snailshell";
public static final int RETURN_GENERATED_KEYS = 1;
@@ -47,8 +47,8 @@ import java.sql.Statement;
public class MapleCodeCouponGenerator {
static String host = "jdbc:mysql://localhost:3306/cosmic";
static String driver = "com.mysql.jdbc.Driver";
static String username = "snail";
static String password = "shell";
static String username = "cosmic_server";
static String password = "snailshell";
static Connection con = null;
static InputStreamReader fileReader = null;
@@ -37,8 +37,8 @@ import java.sql.SQLException;
public class MapleCouponInstaller {
static String host = "jdbc:mysql://localhost:3306/cosmic";
static String driver = "com.mysql.jdbc.Driver";
static String username = "snail";
static String password = "shell";
static String username = "cosmic_server";
static String password = "snailshell";
static Connection con = null;
static InputStreamReader fileReader = null;
@@ -57,8 +57,8 @@ public class MapleGachaponItemidRetriever {
static String host = "jdbc:mysql://localhost:3306/cosmic";
static String driver = "com.mysql.jdbc.Driver";
static String username = "snail";
static String password = "shell";
static String username = "cosmic_server";
static String password = "snailshell";
static Connection con = null;
static InputStreamReader fileReader = null;
@@ -50,8 +50,8 @@ public class MapleIdRetriever {
static String host = "jdbc:mysql://localhost:3306/cosmic";
static String driver = "com.mysql.jdbc.Driver";
static String username = "snail";
static String password = "shell";
static String username = "cosmic_server";
static String password = "snailshell";
static Connection con = null;
static InputStreamReader fileReader = null;
@@ -50,8 +50,8 @@ import java.util.Set;
public class MapleNoItemIdFetcher {
static String host = "jdbc:mysql://localhost:3306/cosmic";
static String driver = "com.mysql.jdbc.Driver";
static String username = "snail";
static String password = "shell";
static String username = "cosmic_server";
static String password = "snailshell";
static String wzPath = "../../wz";
static String newFile = "lib/result.txt";
@@ -10,8 +10,8 @@ import java.sql.SQLException;
*/
public class DatabaseConnection {
private static String DB_URL = "jdbc:mysql://localhost:3306/cosmic";
private static String DB_USER = "snail";
private static String DB_PASS = "shell";
private static String DB_USER = "cosmic_server";
private static String DB_PASS = "snailshell";
public static final int RETURN_GENERATED_KEYS = 1;
@@ -10,8 +10,8 @@ import java.sql.SQLException;
*/
public class DatabaseConnection {
private static String DB_URL = "jdbc:mysql://localhost:3306/cosmic";
private static String DB_USER = "snail";
private static String DB_PASS = "shell";
private static String DB_USER = "cosmic_server";
private static String DB_PASS = "snailshell";
public static final int RETURN_GENERATED_KEYS = 1;
@@ -38,8 +38,8 @@ import java.io.*;
public class MapleMobBookIndexer {
static String host = "jdbc:mysql://localhost:3306/cosmic";
static String driver = "com.mysql.jdbc.Driver";
static String username = "snail";
static String password = "shell";
static String username = "cosmic_server";
static String password = "snailshell";
static String fileName = "lib/MonsterBook.img.xml";
@@ -48,8 +48,8 @@ import java.io.*;
public class MapleMobBookUpdate {
static String host = "jdbc:mysql://localhost:3306/cosmic";
static String driver = "com.mysql.jdbc.Driver";
static String username = "snail";
static String password = "shell";
static String username = "cosmic_server";
static String password = "snailshell";
static String fileName = "lib/MonsterBook.img.xml";
static String newFile = "lib/MonsterBook_updated.img.xml";
@@ -67,8 +67,8 @@ public class MapleQuestItemFetcher {
static String host = "jdbc:mysql://localhost:3306/cosmic";
static String driver = "com.mysql.jdbc.Driver";
static String username = "snail";
static String password = "shell";
static String username = "cosmic_server";
static String password = "snailshell";
static String wzPath = "../../wz";
static String directoryName = "../..";
@@ -10,8 +10,8 @@ import java.sql.SQLException;
*/
public class DatabaseConnection {
private static String DB_URL = "jdbc:mysql://localhost:3306/cosmic";
private static String DB_USER = "snail";
private static String DB_PASS = "shell";
private static String DB_USER = "cosmic_server";
private static String DB_PASS = "snailshell";
public static final int RETURN_GENERATED_KEYS = 1;
@@ -46,8 +46,8 @@ import java.io.File;
public class MapleReactorDropFetcher {
static String host = "jdbc:mysql://localhost:3306/cosmic";
static String driver = "com.mysql.jdbc.Driver";
static String username = "snail";
static String password = "shell";
static String username = "cosmic_server";
static String password = "snailshell";
static String reactorScriptPath = "../../scripts/reactor";
@@ -38,8 +38,8 @@ import java.io.*;
public class MapleSkillMakerFetcher {
static String host = "jdbc:mysql://localhost:3306/cosmic";
static String driver = "com.mysql.jdbc.Driver";
static String username = "snail";
static String password = "shell";
static String username = "cosmic_server";
static String password = "snailshell";
static String fileName = "../../wz/Etc.wz/ItemMake.img.xml";
static String newFile = "lib/MakerData.sql";
@@ -42,8 +42,8 @@ import java.util.List;
public class MapleSkillMakerReagentIndexer {
static String host = "jdbc:mysql://localhost:3306/cosmic";
static String driver = "com.mysql.jdbc.Driver";
static String username = "snail";
static String password = "shell";
static String username = "cosmic_server";
static String password = "snailshell";
static String fileName = "../../wz/Item.wz/Etc/0425.img.xml";
static String newFile = "lib/MakerReagentData.sql";
@@ -10,8 +10,8 @@ import java.sql.SQLException;
*/
public class DatabaseConnection {
private static String DB_URL = "jdbc:mysql://localhost:3306/cosmic";
private static String DB_USER = "snail";
private static String DB_PASS = "shell";
private static String DB_USER = "cosmic_server";
private static String DB_PASS = "snailshell";
public static final int RETURN_GENERATED_KEYS = 1;