From bc7cac92660deaf914e34659f64d76eb7b105b8a Mon Sep 17 00:00:00 2001 From: Martin Date: Mon, 19 Aug 2024 00:09:21 +0200 Subject: [PATCH] Add DatabaseManager closure on shutdown --- .../java/com/eternalcode/discordapp/DiscordApp.java | 10 +++++++++- .../discordapp/database/DatabaseManager.java | 11 +++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/eternalcode/discordapp/DiscordApp.java b/src/main/java/com/eternalcode/discordapp/DiscordApp.java index b6a295a..a1c1883 100644 --- a/src/main/java/com/eternalcode/discordapp/DiscordApp.java +++ b/src/main/java/com/eternalcode/discordapp/DiscordApp.java @@ -68,6 +68,7 @@ public class DiscordApp { private static ExperienceService experienceService; private static LevelService levelService; private static GitHubReviewService gitHubReviewService; + private static DatabaseManager databaseManager; public static void main(String... args) throws InterruptedException { Runtime.getRuntime().addShutdownHook(new Thread(DiscordApp::shutdown)); @@ -90,7 +91,7 @@ public static void main(String... args) throws InterruptedException { } try { - DatabaseManager databaseManager = new DatabaseManager(databaseConfig, new File("database")); + databaseManager = new DatabaseManager(databaseConfig, new File("database")); databaseManager.connect(); UserRepositoryImpl.create(databaseManager); GitHubReviewMentionRepository gitHubReviewMentionRepository = @@ -200,6 +201,13 @@ public static void main(String... args) throws InterruptedException { } private static void shutdown() { + try { + databaseManager.close(); + } + catch (Exception exception) { + throw new RuntimeException(exception); + } + try { LOGGER.info("Shutting down executor service..."); EXECUTOR_SERVICE.shutdown(); diff --git a/src/main/java/com/eternalcode/discordapp/database/DatabaseManager.java b/src/main/java/com/eternalcode/discordapp/database/DatabaseManager.java index b704dfe..5ff2bf9 100644 --- a/src/main/java/com/eternalcode/discordapp/database/DatabaseManager.java +++ b/src/main/java/com/eternalcode/discordapp/database/DatabaseManager.java @@ -58,6 +58,17 @@ public ConnectionSource getConnectionSource() { return this.connectionSource; } + public void close() throws Exception { + try { + this.connectionSource.close(); + this.hikariDataSource.close(); + } + catch (SQLException sqlException) { + Sentry.captureException(sqlException); + throw new DataAccessException("Failed to close connection", sqlException); + } + } + @SuppressWarnings("unchecked") public Dao getDao(Class clazz) { Dao dao = this.daoCache.computeIfAbsent(clazz, key -> {