mirror of
https://github.com/traccar/traccar.git
synced 2026-04-24 17:17:50 -04:00
Migrate keys and remove database cleanup
This commit is contained in:
@@ -63,14 +63,6 @@
|
||||
SELECT * FROM tc_events WHERE deviceId = :deviceId AND serverTime BETWEEN :from AND :to ORDER BY serverTime
|
||||
</entry>
|
||||
|
||||
<entry key='database.deletePositions'>
|
||||
DELETE FROM tc_positions WHERE serverTime < :serverTime AND id NOT IN (SELECT positionId FROM tc_devices WHERE positionId IS NOT NULL)
|
||||
</entry>
|
||||
|
||||
<entry key='database.deleteEvents'>
|
||||
DELETE FROM tc_events WHERE serverTime < :serverTime
|
||||
</entry>
|
||||
|
||||
<entry key='database.selectStatistics'>
|
||||
SELECT * FROM tc_statistics WHERE captureTime BETWEEN :from AND :to ORDER BY captureTime
|
||||
</entry>
|
||||
|
||||
@@ -119,19 +119,6 @@ public final class Main {
|
||||
}
|
||||
}
|
||||
|
||||
private static void scheduleDatabaseCleanup() {
|
||||
new Timer().scheduleAtFixedRate(new TimerTask() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
Context.getDataManager().clearHistory();
|
||||
} catch (SQLException error) {
|
||||
LOGGER.warn("Clear history error", error);
|
||||
}
|
||||
}
|
||||
}, 0, CLEAN_PERIOD);
|
||||
}
|
||||
|
||||
public static void run(String configFile) {
|
||||
try {
|
||||
Context.init(configFile);
|
||||
@@ -147,7 +134,6 @@ public final class Main {
|
||||
Context.getScheduleManager().start();
|
||||
|
||||
scheduleHealthCheck();
|
||||
scheduleDatabaseCleanup();
|
||||
|
||||
Thread.setDefaultUncaughtExceptionHandler((t, e) -> LOGGER.error("Thread exception", e));
|
||||
|
||||
|
||||
@@ -161,13 +161,28 @@ public final class Keys {
|
||||
"database.changelog",
|
||||
Collections.singletonList(KeyType.GLOBAL));
|
||||
|
||||
/**
|
||||
* Automatically generate SQL database queries when possible.
|
||||
*/
|
||||
public static final ConfigKey<Boolean> DATABASE_GENERATE_QUERIES = new ConfigKey<>(
|
||||
"database.generateQueries",
|
||||
Collections.singletonList(KeyType.GLOBAL));
|
||||
|
||||
/**
|
||||
* Database connection pool size. Default value is defined by the HikariCP library.
|
||||
*/
|
||||
public static final ConfigKey<Integer> DATABASE_MAX_POOL_SIZE = new ConfigKey<>(
|
||||
"database.maxPoolSize",
|
||||
Collections.singletonList(KeyType.GLOBAL));
|
||||
|
||||
/**
|
||||
* SQL query to check connection status. Default value is 'SELECT 1'. For Oracle database you can use
|
||||
* 'SELECT 1 FROM DUAL'.
|
||||
*/
|
||||
public static final ConfigKey<String> DATABASE_CHECK_CONNECTION = new ConfigKey<>(
|
||||
"database.checkConnection",
|
||||
Collections.singletonList(KeyType.GLOBAL));
|
||||
Collections.singletonList(KeyType.GLOBAL),
|
||||
"SELECT 1");
|
||||
|
||||
/**
|
||||
* Store original HEX or string data as "raw" attribute in the corresponding position.
|
||||
@@ -320,6 +335,13 @@ public final class Keys {
|
||||
Collections.singletonList(KeyType.GLOBAL),
|
||||
60000L);
|
||||
|
||||
/**
|
||||
* Authentication sessions timeout in seconds. By default no timeout.
|
||||
*/
|
||||
public static final ConfigKey<Integer> WEB_SESSION_TIMEOUT = new ConfigKey<>(
|
||||
"web.sessionTimeout",
|
||||
Collections.singletonList(KeyType.GLOBAL));
|
||||
|
||||
/**
|
||||
* Enable positions forwarding to other web server.
|
||||
*/
|
||||
|
||||
@@ -114,16 +114,15 @@ public class DataManager {
|
||||
hikariConfig.setJdbcUrl(config.getString(Keys.DATABASE_URL));
|
||||
hikariConfig.setUsername(config.getString(Keys.DATABASE_USER));
|
||||
hikariConfig.setPassword(config.getString(Keys.DATABASE_PASSWORD));
|
||||
hikariConfig.setConnectionInitSql(config.getString(Keys.DATABASE_CHECK_CONNECTION, "SELECT 1"));
|
||||
hikariConfig.setConnectionInitSql(config.getString(Keys.DATABASE_CHECK_CONNECTION));
|
||||
hikariConfig.setIdleTimeout(600000);
|
||||
|
||||
int maxPoolSize = config.getInteger("database.maxPoolSize");
|
||||
|
||||
int maxPoolSize = config.getInteger(Keys.DATABASE_MAX_POOL_SIZE);
|
||||
if (maxPoolSize != 0) {
|
||||
hikariConfig.setMaximumPoolSize(maxPoolSize);
|
||||
}
|
||||
|
||||
generateQueries = config.getBoolean("database.generateQueries");
|
||||
generateQueries = config.getBoolean(Keys.DATABASE_GENERATE_QUERIES);
|
||||
|
||||
dataSource = new HikariDataSource(hikariConfig);
|
||||
}
|
||||
@@ -342,20 +341,6 @@ public class DataManager {
|
||||
.executeQuery(Position.class);
|
||||
}
|
||||
|
||||
public void clearHistory() throws SQLException {
|
||||
long historyDays = config.getInteger("database.historyDays");
|
||||
if (historyDays != 0) {
|
||||
Date timeLimit = new Date(System.currentTimeMillis() - historyDays * 24 * 3600 * 1000);
|
||||
LOGGER.info("Clearing history earlier than " + DateUtil.formatDate(timeLimit, false));
|
||||
QueryBuilder.create(dataSource, getQuery("database.deletePositions"))
|
||||
.setDate("serverTime", timeLimit)
|
||||
.executeUpdate();
|
||||
QueryBuilder.create(dataSource, getQuery("database.deleteEvents"))
|
||||
.setDate("serverTime", timeLimit)
|
||||
.executeUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
public Server getServer() throws SQLException {
|
||||
return QueryBuilder.create(dataSource, getQuery(ACTION_SELECT_ALL, Server.class))
|
||||
.executeQuerySingle(Server.class);
|
||||
|
||||
@@ -168,7 +168,7 @@ public class WebServer {
|
||||
}
|
||||
|
||||
private void initSessionConfig(Config config, ServletContextHandler servletHandler) {
|
||||
int sessionTimeout = config.getInteger("web.sessionTimeout");
|
||||
int sessionTimeout = config.getInteger(Keys.WEB_SESSION_TIMEOUT);
|
||||
if (sessionTimeout > 0) {
|
||||
servletHandler.getSessionHandler().setMaxInactiveInterval(sessionTimeout);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user