added scheduler

This commit is contained in:
Athou
2014-08-09 22:18:14 +02:00
parent 3d8c0ca663
commit f9e7958e8b
4 changed files with 165 additions and 0 deletions

View File

@@ -0,0 +1,51 @@
package com.commafeed.backend.task;
import java.util.Date;
import java.util.concurrent.TimeUnit;
import lombok.RequiredArgsConstructor;
import org.hibernate.SessionFactory;
import com.commafeed.CommaFeedConfiguration;
import com.commafeed.backend.dao.UnitOfWork;
import com.commafeed.backend.service.DatabaseCleaningService;
import com.commafeed.backend.task.SchedulingService.ScheduledTask;
@RequiredArgsConstructor
public class OldStatusesCleanupTask implements ScheduledTask {
private final SessionFactory sessionFactory;
private final CommaFeedConfiguration config;
private final DatabaseCleaningService cleaner;
@Override
public void run() {
new UnitOfWork<Void>(sessionFactory) {
@Override
protected Void runInSession() throws Exception {
Date threshold = config.getApplicationSettings().getUnreadThreshold();
if (threshold != null) {
cleaner.cleanStatusesOlderThan(threshold);
}
return null;
}
}.run();
}
@Override
public long getInitialDelay() {
return 5;
}
@Override
public long getPeriod() {
return 60;
}
@Override
public TimeUnit getTimeUnit() {
return TimeUnit.MINUTES;
}
}

View File

@@ -0,0 +1,47 @@
package com.commafeed.backend.task;
import java.util.concurrent.TimeUnit;
import lombok.RequiredArgsConstructor;
import org.hibernate.SessionFactory;
import com.commafeed.backend.dao.UnitOfWork;
import com.commafeed.backend.service.DatabaseCleaningService;
import com.commafeed.backend.task.SchedulingService.ScheduledTask;
@RequiredArgsConstructor
public class OrphansCleanupTask implements ScheduledTask {
private final SessionFactory sessionFactory;
private final DatabaseCleaningService cleaner;
@Override
public void run() {
new UnitOfWork<Void>(sessionFactory) {
@Override
protected Void runInSession() throws Exception {
cleaner.cleanEntriesWithoutSubscriptions();
cleaner.cleanFeedsWithoutSubscriptions();
cleaner.cleanContentsWithoutEntries();
return null;
}
}.run();
}
@Override
public long getInitialDelay() {
return 30;
}
@Override
public long getPeriod() {
return 60;
}
@Override
public TimeUnit getTimeUnit() {
return TimeUnit.MINUTES;
}
}

View File

@@ -0,0 +1,56 @@
package com.commafeed.backend.task;
import io.dropwizard.lifecycle.Managed;
import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import lombok.extern.slf4j.Slf4j;
import com.google.common.collect.Lists;
@Slf4j
public class SchedulingService implements Managed {
public static interface ScheduledTask {
void run();
long getInitialDelay();
long getPeriod();
TimeUnit getTimeUnit();
}
private List<ScheduledTask> tasks = Lists.newArrayList();
private ScheduledExecutorService executor;
@Override
public void start() throws Exception {
executor = Executors.newScheduledThreadPool(tasks.size());
for (final ScheduledTask task : tasks) {
Runnable runnable = new Runnable() {
@Override
public void run() {
try {
task.run();
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}
};
executor.scheduleWithFixedDelay(runnable, task.getInitialDelay(), task.getPeriod(), task.getTimeUnit());
}
}
@Override
public void stop() throws Exception {
executor.shutdown();
}
public void register(ScheduledTask task) {
tasks.add(task);
}
}