use dropwizard built-in executor service facilities

This commit is contained in:
Athou
2014-10-22 15:36:21 +02:00
parent 7e158ed9b9
commit b71434acf6
5 changed files with 38 additions and 65 deletions

View File

@@ -10,11 +10,10 @@ import lombok.RequiredArgsConstructor;
import com.commafeed.CommaFeedConfiguration;
import com.commafeed.backend.service.DatabaseCleaningService;
import com.commafeed.backend.task.SchedulingService.ScheduledTask;
@RequiredArgsConstructor(onConstructor = @__({ @Inject }))
@Singleton
public class OldStatusesCleanupTask implements ScheduledTask {
public class OldStatusesCleanupTask extends ScheduledTask {
private final CommaFeedConfiguration config;
private final DatabaseCleaningService cleaner;

View File

@@ -8,11 +8,10 @@ import javax.inject.Singleton;
import lombok.RequiredArgsConstructor;
import com.commafeed.backend.service.DatabaseCleaningService;
import com.commafeed.backend.task.SchedulingService.ScheduledTask;
@RequiredArgsConstructor(onConstructor = @__({ @Inject }))
@Singleton
public class OrphansCleanupTask implements ScheduledTask {
public class OrphansCleanupTask extends ScheduledTask {
private final DatabaseCleaningService cleaner;

View File

@@ -0,0 +1,32 @@
package com.commafeed.backend.task;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public abstract class ScheduledTask {
protected abstract void run();
protected abstract long getInitialDelay();
protected abstract long getPeriod();
protected abstract TimeUnit getTimeUnit();
public void register(ScheduledExecutorService executor) {
Runnable runnable = new Runnable() {
@Override
public void run() {
try {
ScheduledTask.this.run();
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}
};
executor.scheduleWithFixedDelay(runnable, getInitialDelay(), getPeriod(), getTimeUnit());
}
}

View File

@@ -1,56 +0,0 @@
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);
}
}