diff --git a/pom.xml b/pom.xml index a961df36ef58589da8ad0ba9ad48907817adb521..c99a87879ff8a619d5be68f7acdc754b0de8fd16 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 32c3405948b3859cbbe205f8401dbd5eec7ec6a8..5436a008e619624f093f8a206d8a58be0b11826d 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 5683ddecad638f5740c569df06c1c2713397f7c0..13a3e9d5943a4c9ddc246361e1a13cc7ef8af89c 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 27d37c3e1981264ccae53bc75c61b23e9f511d73..d631702baa497acb88ff9f4320119d997a03307c 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 0000000000000000000000000000000000000000..0e5c75f36dd98545353752b26852c58491c00dad --- /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 + } + } + } +}