diff --git a/backend/src/main/java/com/alttd/altitudeweb/controllers/login/LoginController.java b/backend/src/main/java/com/alttd/altitudeweb/controllers/login/LoginController.java index 9a30e7a..18f1389 100644 --- a/backend/src/main/java/com/alttd/altitudeweb/controllers/login/LoginController.java +++ b/backend/src/main/java/com/alttd/altitudeweb/controllers/login/LoginController.java @@ -50,7 +50,7 @@ public class LoginController implements LoginApi { private static final ConcurrentMap cache = new ConcurrentHashMap<>(); @Scheduled(fixedRate = 300000) // 5 minutes in milliseconds - private void clearExpiredCacheEntries() { + protected void clearExpiredCacheEntries() { Instant now = Instant.now(); int initialCacheSize = cache.size(); cache.entrySet().removeIf(entry -> entry.getValue().expiry().isBefore(now)); diff --git a/database/src/main/java/com/alttd/altitudeweb/setup/Connection.java b/database/src/main/java/com/alttd/altitudeweb/setup/Connection.java index 4ef04a4..aba2fda 100644 --- a/database/src/main/java/com/alttd/altitudeweb/setup/Connection.java +++ b/database/src/main/java/com/alttd/altitudeweb/setup/Connection.java @@ -163,10 +163,24 @@ public class Connection { private static @NotNull Configuration getConfiguration(DatabaseSettings settings) { PooledDataSource dataSource = new PooledDataSource(); dataSource.setDriver("com.mysql.cj.jdbc.Driver"); - dataSource.setUrl(String.format("jdbc:mysql://%s:%d/%s", settings.host(), - settings.port(), settings.name())); + + String url = String.format( + "jdbc:mysql://%s:%d/%s?useSSL=true&tcpKeepAlive=true&socketTimeout=60000&connectTimeout=10000&autoReconnect=false&useUnicode=true&characterEncoding=utf8", + settings.host(), + settings.port(), + settings.name() + ); + dataSource.setUrl(url); dataSource.setUsername(settings.username()); dataSource.setPassword(settings.password()); + + dataSource.setPoolMaximumActiveConnections(10); + dataSource.setPoolMaximumIdleConnections(5); + dataSource.setPoolTimeToWait(20000); + dataSource.setPoolPingEnabled(true); + dataSource.setPoolPingQuery("SELECT 1"); + dataSource.setPoolPingConnectionsNotUsedFor(300000); // 5 min + Environment environment = new Environment("production", new JdbcTransactionFactory(), dataSource); return new Configuration(environment); }