Удаление старых буферов
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
package im.rosetta.service.services;
|
||||
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import im.rosetta.database.repository.BufferRepository;
|
||||
import im.rosetta.logger.Logger;
|
||||
import im.rosetta.logger.enums.Color;
|
||||
|
||||
public class BufferCleanupService {
|
||||
|
||||
private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
|
||||
private final BufferRepository bufferRepository = new BufferRepository();
|
||||
private final int cleanupEveryDays;
|
||||
private final Logger logger;
|
||||
|
||||
public BufferCleanupService(int cleanupEveryDays, Logger logger) {
|
||||
this.cleanupEveryDays = cleanupEveryDays;
|
||||
this.logger = logger;
|
||||
}
|
||||
|
||||
/**
|
||||
* Запускает планировщик, который будет каждые 24 часа удалять из буфера
|
||||
* пакеты старше чем cleanupEveryDays дней
|
||||
*/
|
||||
public void start() {
|
||||
this.logger.info(Color.CYAN + "Sheduled cleanup buffer every " + this.cleanupEveryDays + " days");
|
||||
scheduler.scheduleAtFixedRate(
|
||||
this::cleanupOldPackets,
|
||||
0, //стартовая задержка 0, то есть сразу при запуске сервиса будет выполнена очистка буфера
|
||||
24,
|
||||
TimeUnit.HOURS
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Функция планировщика, которая удаляет из буфера пакеты старше чем cleanupEveryDays дней
|
||||
*/
|
||||
private void cleanupOldPackets() {
|
||||
try {
|
||||
long sevenDaysAgo = System.currentTimeMillis() - TimeUnit.DAYS.toMillis(this.cleanupEveryDays);
|
||||
bufferRepository.deleteOlderThan(sevenDaysAgo);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public void stop() {
|
||||
scheduler.shutdown();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user