From 598fc2e31a10ea504628bbc74a24fb9ed98bfa24 Mon Sep 17 00:00:00 2001 From: tobias <thinkdifferent055@gmail.com> Date: Tue, 30 Jul 2019 20:36:21 +0200 Subject: [PATCH] Add sql background runner to keep connection open --- pom.xml | 5 ++++ .../tobias/playpad/server/PlayPadServer.scala | 12 +++++++++- .../playpad/server/json/JsonSerializer.scala | 1 - .../server/settings/SettingsSaver.scala | 2 +- .../server/sql/SqlBackgroundRunner.scala | 24 +++++++++++++++++++ 5 files changed, 41 insertions(+), 3 deletions(-) create mode 100644 src/main/scala/de/tobias/playpad/server/sql/SqlBackgroundRunner.scala diff --git a/pom.xml b/pom.xml index a961df3..c99a878 100644 --- a/pom.xml +++ b/pom.xml @@ -131,6 +131,11 @@ </goals> </execution> </executions> + <configuration> + <args> + <arg>-deprecation</arg> + </args> + </configuration> </plugin> <plugin> diff --git a/src/main/scala/de/tobias/playpad/server/PlayPadServer.scala b/src/main/scala/de/tobias/playpad/server/PlayPadServer.scala index 32c3405..5436a00 100644 --- a/src/main/scala/de/tobias/playpad/server/PlayPadServer.scala +++ b/src/main/scala/de/tobias/playpad/server/PlayPadServer.scala @@ -17,6 +17,7 @@ import de.tobias.playpad.server.server.plugin.{PluginGet, PluginList} import de.tobias.playpad.server.server.project._ import de.tobias.playpad.server.server.project.sync.ProjectSyncHandler import de.tobias.playpad.server.settings.{Settings, SettingsHandler, SettingsLoader} +import de.tobias.playpad.server.sql.SqlBackgroundRunner import de.tobias.playpad.server.transformer.JsonTransformer import spark.Spark._ @@ -30,8 +31,9 @@ object PlayPadServer extends App { private var settings: Settings = _ private var databaseUrl: String = _ - var connectionSource: JdbcConnectionSource = _ + private var connectionSource: JdbcConnectionSource = _ private var databaseConnection: Connection = _ + private var databaseBackgroundThread: Thread = _ try { val app = ApplicationUtils.registerMainApplication(getClass) @@ -71,6 +73,11 @@ object PlayPadServer extends App { TableUtils.createTableIfNotExists(connectionSource, classOf[Session]) SqlHelper.createTables(databaseConnection) + val runner = new SqlBackgroundRunner(databaseConnection) + databaseBackgroundThread = new Thread(runner) + databaseBackgroundThread.start() + + // Setup Http Server port(8090) threadPool(8, 2, 60 * 60 * 1000) @@ -106,8 +113,11 @@ object PlayPadServer extends App { SettingsHandler.saver.save(settings, settingsPath) Runtime.getRuntime.addShutdownHook(new Thread(() => { + databaseBackgroundThread.interrupt() + databaseConnection.close() connectionSource.close() + stop() })) } catch { diff --git a/src/main/scala/de/tobias/playpad/server/json/JsonSerializer.scala b/src/main/scala/de/tobias/playpad/server/json/JsonSerializer.scala index 5683dde..13a3e9d 100644 --- a/src/main/scala/de/tobias/playpad/server/json/JsonSerializer.scala +++ b/src/main/scala/de/tobias/playpad/server/json/JsonSerializer.scala @@ -54,7 +54,6 @@ class JsonSerializer { clazz.getDeclaredFields .filter(f => f.isAnnotationPresent(classOf[JsonName])) .foreach(f => { - println(clazz + "\t" + f.getName) f.setAccessible(true) val annotation = f.getAnnotation(classOf[JsonName]) val value = jsonObject.get(annotation.value()) diff --git a/src/main/scala/de/tobias/playpad/server/settings/SettingsSaver.scala b/src/main/scala/de/tobias/playpad/server/settings/SettingsSaver.scala index 27d37c3..d631702 100644 --- a/src/main/scala/de/tobias/playpad/server/settings/SettingsSaver.scala +++ b/src/main/scala/de/tobias/playpad/server/settings/SettingsSaver.scala @@ -9,7 +9,7 @@ import java.nio.file.Path trait SettingsSaver { @throws[IOException] - def save(settings: Settings, path: Path) + def save(settings: Settings, path: Path): Unit def default(path: Path): Unit = save(new Settings(), path) } diff --git a/src/main/scala/de/tobias/playpad/server/sql/SqlBackgroundRunner.scala b/src/main/scala/de/tobias/playpad/server/sql/SqlBackgroundRunner.scala new file mode 100644 index 0000000..0e5c75f --- /dev/null +++ b/src/main/scala/de/tobias/playpad/server/sql/SqlBackgroundRunner.scala @@ -0,0 +1,24 @@ +package de.tobias.playpad.server.sql + +import java.sql.Connection + +class SqlBackgroundRunner(connection: Connection) extends Runnable { + + private val SLEEP = 5 * 60 * 1000 + + override def run(): Unit = { + while (!Thread.interrupted()) { + val statement = connection.prepareStatement("SHOW TABLES;") + val resultSet = statement.executeQuery() + + resultSet.close() + statement.close() + + try { + Thread.sleep(SLEEP) + } catch { + case _: InterruptedException => return + } + } + } +} -- GitLab