mirror of
https://github.com/amalthea-mc/ShopChest.git
synced 2024-11-22 18:32:24 +00:00
Added configurable ping interval to MySQL
This commit is contained in:
parent
51584a3d04
commit
aa2051e9cc
@ -219,6 +219,16 @@ public class ShopChest extends JavaPlugin {
|
|||||||
debug("Using database type: MySQL");
|
debug("Using database type: MySQL");
|
||||||
getLogger().info("Using MySQL");
|
getLogger().info("Using MySQL");
|
||||||
database = new MySQL(this);
|
database = new MySQL(this);
|
||||||
|
if (config.database_mysql_ping_interval > 0) {
|
||||||
|
Bukkit.getScheduler().runTaskTimer(this, new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
if (database instanceof MySQL) {
|
||||||
|
((MySQL) database).ping();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, config.database_mysql_ping_interval * 20L, config.database_mysql_ping_interval * 20L);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config.auto_reload_time > 0) {
|
if (config.auto_reload_time > 0) {
|
||||||
|
@ -40,6 +40,9 @@ public class Config {
|
|||||||
/** The database type used for ShopChest. **/
|
/** The database type used for ShopChest. **/
|
||||||
public Database.DatabaseType database_type;
|
public Database.DatabaseType database_type;
|
||||||
|
|
||||||
|
/** The interval in seconds, a ping is sent to the MySQL server **/
|
||||||
|
public int database_mysql_ping_interval;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>The minimum prices for certain items</p>
|
* <p>The minimum prices for certain items</p>
|
||||||
* This returns a key set, which contains e.g "STONE", "STONE:1", of the <i>minimum-prices</i> section in ShopChest's config.
|
* This returns a key set, which contains e.g "STONE", "STONE:1", of the <i>minimum-prices</i> section in ShopChest's config.
|
||||||
@ -264,6 +267,7 @@ public class Config {
|
|||||||
* Reload the configuration values from config.yml
|
* Reload the configuration values from config.yml
|
||||||
*/
|
*/
|
||||||
public void reload(boolean firstLoad, boolean langReload) {
|
public void reload(boolean firstLoad, boolean langReload) {
|
||||||
|
database_mysql_ping_interval = plugin.getConfig().getInt("database.mysql.ping-interval");
|
||||||
database_mysql_host = plugin.getConfig().getString("database.mysql.hostname");
|
database_mysql_host = plugin.getConfig().getString("database.mysql.hostname");
|
||||||
database_mysql_port = plugin.getConfig().getInt("database.mysql.port");
|
database_mysql_port = plugin.getConfig().getInt("database.mysql.port");
|
||||||
database_mysql_database = plugin.getConfig().getString("database.mysql.database");
|
database_mysql_database = plugin.getConfig().getString("database.mysql.database");
|
||||||
@ -271,7 +275,7 @@ public class Config {
|
|||||||
database_mysql_password = plugin.getConfig().getString("database.mysql.password");
|
database_mysql_password = plugin.getConfig().getString("database.mysql.password");
|
||||||
database_type = Database.DatabaseType.valueOf(plugin.getConfig().getString("database.type"));
|
database_type = Database.DatabaseType.valueOf(plugin.getConfig().getString("database.type"));
|
||||||
minimum_prices = (plugin.getConfig().getConfigurationSection("minimum-prices") == null) ? new HashSet<String>() : plugin.getConfig().getConfigurationSection("minimum-prices").getKeys(true);
|
minimum_prices = (plugin.getConfig().getConfigurationSection("minimum-prices") == null) ? new HashSet<String>() : plugin.getConfig().getConfigurationSection("minimum-prices").getKeys(true);
|
||||||
allow_broken_items = (plugin.getConfig().getBoolean("allow-broken-items"));
|
allow_broken_items = plugin.getConfig().getBoolean("allow-broken-items");
|
||||||
shopLimits_group = (plugin.getConfig().getConfigurationSection("shop-limits.group") == null) ? new HashSet<String>() : plugin.getConfig().getConfigurationSection("shop-limits.group").getKeys(true);
|
shopLimits_group = (plugin.getConfig().getConfigurationSection("shop-limits.group") == null) ? new HashSet<String>() : plugin.getConfig().getConfigurationSection("shop-limits.group").getKeys(true);
|
||||||
shopLimits_player = (plugin.getConfig().getConfigurationSection("shop-limits.player") == null) ? new HashSet<String>() : plugin.getConfig().getConfigurationSection("shop-limits.player").getKeys(true);
|
shopLimits_player = (plugin.getConfig().getConfigurationSection("shop-limits.player") == null) ? new HashSet<String>() : plugin.getConfig().getConfigurationSection("shop-limits.player").getKeys(true);
|
||||||
blacklist = (plugin.getConfig().getStringList("blacklist") == null) ? new ArrayList<String>() : plugin.getConfig().getStringList("blacklist");
|
blacklist = (plugin.getConfig().getStringList("blacklist") == null) ? new ArrayList<String>() : plugin.getConfig().getStringList("blacklist");
|
||||||
|
@ -4,6 +4,8 @@ import de.epiceric.shopchest.ShopChest;
|
|||||||
|
|
||||||
import java.sql.Connection;
|
import java.sql.Connection;
|
||||||
import java.sql.DriverManager;
|
import java.sql.DriverManager;
|
||||||
|
import java.sql.PreparedStatement;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
|
||||||
public class MySQL extends Database {
|
public class MySQL extends Database {
|
||||||
|
|
||||||
@ -20,7 +22,7 @@ public class MySQL extends Database {
|
|||||||
|
|
||||||
Class.forName("com.mysql.jdbc.Driver");
|
Class.forName("com.mysql.jdbc.Driver");
|
||||||
|
|
||||||
String connectUrl = "jdbc:mysql://" + plugin.getShopChestConfig().database_mysql_host + ":" + plugin.getShopChestConfig().database_mysql_port + "/" + plugin.getShopChestConfig().database_mysql_database + "?autoReconnect=true";
|
String connectUrl = "jdbc:mysql://" + plugin.getShopChestConfig().database_mysql_host + ":" + plugin.getShopChestConfig().database_mysql_port + "/" + plugin.getShopChestConfig().database_mysql_database;
|
||||||
plugin.debug("Connecting to MySQL Server \"" + connectUrl + "\" as user \"" + plugin.getShopChestConfig().database_mysql_username + "\"");
|
plugin.debug("Connecting to MySQL Server \"" + connectUrl + "\" as user \"" + plugin.getShopChestConfig().database_mysql_username + "\"");
|
||||||
|
|
||||||
connection = DriverManager.getConnection(connectUrl, plugin.getShopChestConfig().database_mysql_username, plugin.getShopChestConfig().database_mysql_password);
|
connection = DriverManager.getConnection(connectUrl, plugin.getShopChestConfig().database_mysql_username, plugin.getShopChestConfig().database_mysql_password);
|
||||||
@ -34,4 +36,15 @@ public class MySQL extends Database {
|
|||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void ping() {
|
||||||
|
try (PreparedStatement ps = connection.prepareStatement("/* ping */ SELECT 1")) {
|
||||||
|
plugin.debug("Pinging to MySQL server...");
|
||||||
|
ps.executeQuery();
|
||||||
|
} catch (SQLException ex) {
|
||||||
|
plugin.getLogger().severe("Failed to ping to MySQL server. Trying to reconnect...");
|
||||||
|
plugin.debug("Failed to ping to MySQL server. Trying to reconnect...");
|
||||||
|
connect();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -98,6 +98,11 @@ database:
|
|||||||
# (You can leave this empty if you're using SQLite)
|
# (You can leave this empty if you're using SQLite)
|
||||||
mysql:
|
mysql:
|
||||||
|
|
||||||
|
# ...interval in seconds, when the database should be pinged, to keep the connection alive
|
||||||
|
# This should be lower than the 'connect_timeout' variable in your MySQL server
|
||||||
|
# You can set this to '0' to disable the ping interval
|
||||||
|
ping-interval: 3600
|
||||||
|
|
||||||
# ...hostname where the database is accessible
|
# ...hostname where the database is accessible
|
||||||
hostname: ""
|
hostname: ""
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user