mirror of
https://github.com/Athou/commafeed.git
synced 2026-03-21 21:37:29 +00:00
use dropwizard built-in executor service facilities
This commit is contained in:
@@ -11,6 +11,7 @@ import io.dropwizard.setup.Environment;
|
|||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.EnumSet;
|
import java.util.EnumSet;
|
||||||
|
import java.util.concurrent.ScheduledExecutorService;
|
||||||
|
|
||||||
import javax.servlet.DispatcherType;
|
import javax.servlet.DispatcherType;
|
||||||
|
|
||||||
@@ -34,7 +35,6 @@ import com.commafeed.backend.service.StartupService;
|
|||||||
import com.commafeed.backend.service.UserService;
|
import com.commafeed.backend.service.UserService;
|
||||||
import com.commafeed.backend.task.OldStatusesCleanupTask;
|
import com.commafeed.backend.task.OldStatusesCleanupTask;
|
||||||
import com.commafeed.backend.task.OrphansCleanupTask;
|
import com.commafeed.backend.task.OrphansCleanupTask;
|
||||||
import com.commafeed.backend.task.SchedulingService;
|
|
||||||
import com.commafeed.frontend.auth.SecurityCheckProvider;
|
import com.commafeed.frontend.auth.SecurityCheckProvider;
|
||||||
import com.commafeed.frontend.auth.SecurityCheckProvider.SecurityCheckUserServiceProvider;
|
import com.commafeed.frontend.auth.SecurityCheckProvider.SecurityCheckUserServiceProvider;
|
||||||
import com.commafeed.frontend.resource.AdminREST;
|
import com.commafeed.frontend.resource.AdminREST;
|
||||||
@@ -127,10 +127,9 @@ public class CommaFeedApplication extends Application<CommaFeedConfiguration> {
|
|||||||
environment.servlets().addServlet("analytics.js", injector.getInstance(AnalyticsServlet.class)).addMapping("/analytics.js");
|
environment.servlets().addServlet("analytics.js", injector.getInstance(AnalyticsServlet.class)).addMapping("/analytics.js");
|
||||||
|
|
||||||
// Scheduled tasks
|
// Scheduled tasks
|
||||||
SchedulingService schedulingService = new SchedulingService();
|
ScheduledExecutorService executor = environment.lifecycle().scheduledExecutorService("task-scheduler").build();
|
||||||
schedulingService.register(injector.getInstance(OldStatusesCleanupTask.class));
|
injector.getInstance(OldStatusesCleanupTask.class).register(executor);
|
||||||
schedulingService.register(injector.getInstance(OrphansCleanupTask.class));
|
injector.getInstance(OrphansCleanupTask.class).register(executor);
|
||||||
environment.lifecycle().manage(schedulingService);
|
|
||||||
|
|
||||||
// database init/changelogs
|
// database init/changelogs
|
||||||
environment.lifecycle().manage(injector.getInstance(StartupService.class));
|
environment.lifecycle().manage(injector.getInstance(StartupService.class));
|
||||||
|
|||||||
@@ -10,11 +10,10 @@ import lombok.RequiredArgsConstructor;
|
|||||||
|
|
||||||
import com.commafeed.CommaFeedConfiguration;
|
import com.commafeed.CommaFeedConfiguration;
|
||||||
import com.commafeed.backend.service.DatabaseCleaningService;
|
import com.commafeed.backend.service.DatabaseCleaningService;
|
||||||
import com.commafeed.backend.task.SchedulingService.ScheduledTask;
|
|
||||||
|
|
||||||
@RequiredArgsConstructor(onConstructor = @__({ @Inject }))
|
@RequiredArgsConstructor(onConstructor = @__({ @Inject }))
|
||||||
@Singleton
|
@Singleton
|
||||||
public class OldStatusesCleanupTask implements ScheduledTask {
|
public class OldStatusesCleanupTask extends ScheduledTask {
|
||||||
|
|
||||||
private final CommaFeedConfiguration config;
|
private final CommaFeedConfiguration config;
|
||||||
private final DatabaseCleaningService cleaner;
|
private final DatabaseCleaningService cleaner;
|
||||||
|
|||||||
@@ -8,11 +8,10 @@ import javax.inject.Singleton;
|
|||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
|
||||||
import com.commafeed.backend.service.DatabaseCleaningService;
|
import com.commafeed.backend.service.DatabaseCleaningService;
|
||||||
import com.commafeed.backend.task.SchedulingService.ScheduledTask;
|
|
||||||
|
|
||||||
@RequiredArgsConstructor(onConstructor = @__({ @Inject }))
|
@RequiredArgsConstructor(onConstructor = @__({ @Inject }))
|
||||||
@Singleton
|
@Singleton
|
||||||
public class OrphansCleanupTask implements ScheduledTask {
|
public class OrphansCleanupTask extends ScheduledTask {
|
||||||
|
|
||||||
private final DatabaseCleaningService cleaner;
|
private final DatabaseCleaningService cleaner;
|
||||||
|
|
||||||
|
|||||||
32
src/main/java/com/commafeed/backend/task/ScheduledTask.java
Normal file
32
src/main/java/com/commafeed/backend/task/ScheduledTask.java
Normal 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());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user