diff --git a/src/main/java/com/commafeed/CommaFeedApplication.java b/src/main/java/com/commafeed/CommaFeedApplication.java index d5c9410d..5369dd73 100644 --- a/src/main/java/com/commafeed/CommaFeedApplication.java +++ b/src/main/java/com/commafeed/CommaFeedApplication.java @@ -13,6 +13,7 @@ import io.dropwizard.setup.Environment; import java.io.IOException; import java.util.Date; import java.util.EnumSet; +import java.util.Set; import java.util.concurrent.ScheduledExecutorService; import javax.servlet.DispatcherType; @@ -42,8 +43,7 @@ import com.commafeed.backend.model.UserRole; import com.commafeed.backend.model.UserSettings; import com.commafeed.backend.service.StartupService; import com.commafeed.backend.service.UserService; -import com.commafeed.backend.task.OldStatusesCleanupTask; -import com.commafeed.backend.task.OrphansCleanupTask; +import com.commafeed.backend.task.ScheduledTask; import com.commafeed.frontend.auth.SecurityCheckFactoryProvider; import com.commafeed.frontend.resource.AdminREST; import com.commafeed.frontend.resource.CategoryREST; @@ -59,6 +59,8 @@ import com.commafeed.frontend.servlet.NextUnreadServlet; import com.commafeed.frontend.session.SessionHelperFactoryProvider; import com.google.inject.Guice; import com.google.inject.Injector; +import com.google.inject.Key; +import com.google.inject.TypeLiteral; import com.wordnik.swagger.config.ConfigFactory; import com.wordnik.swagger.config.ScannerFactory; import com.wordnik.swagger.config.SwaggerConfig; @@ -142,9 +144,13 @@ public class CommaFeedApplication extends Application { environment.servlets().addServlet("analytics.js", injector.getInstance(AnalyticsServlet.class)).addMapping("/analytics.js"); // Scheduled tasks - ScheduledExecutorService executor = environment.lifecycle().scheduledExecutorService("task-scheduler", true).build(); - injector.getInstance(OldStatusesCleanupTask.class).register(executor); - injector.getInstance(OrphansCleanupTask.class).register(executor); + Set tasks = injector.getInstance(Key.get(new TypeLiteral>() { + })); + ScheduledExecutorService executor = environment.lifecycle().scheduledExecutorService("task-scheduler", true).threads(tasks.size()) + .build(); + for (ScheduledTask task : tasks) { + task.register(executor); + } // database init/changelogs environment.lifecycle().manage(injector.getInstance(StartupService.class)); diff --git a/src/main/java/com/commafeed/CommaFeedModule.java b/src/main/java/com/commafeed/CommaFeedModule.java index d290f68f..5edd9feb 100644 --- a/src/main/java/com/commafeed/CommaFeedModule.java +++ b/src/main/java/com/commafeed/CommaFeedModule.java @@ -15,6 +15,9 @@ import com.commafeed.backend.favicon.AbstractFaviconFetcher; import com.commafeed.backend.favicon.DefaultFaviconFetcher; import com.commafeed.backend.favicon.FacebookFaviconFetcher; import com.commafeed.backend.favicon.YoutubeFaviconFetcher; +import com.commafeed.backend.task.OldStatusesCleanupTask; +import com.commafeed.backend.task.OrphansCleanupTask; +import com.commafeed.backend.task.ScheduledTask; import com.google.inject.AbstractModule; import com.google.inject.Provides; import com.google.inject.multibindings.Multibinder; @@ -39,9 +42,13 @@ public class CommaFeedModule extends AbstractModule { log.info("using cache {}", cacheService.getClass()); bind(CacheService.class).toInstance(cacheService); - Multibinder multibinder = Multibinder.newSetBinder(binder(), AbstractFaviconFetcher.class); - multibinder.addBinding().to(YoutubeFaviconFetcher.class); - multibinder.addBinding().to(FacebookFaviconFetcher.class); - multibinder.addBinding().to(DefaultFaviconFetcher.class); + Multibinder faviconMultibinder = Multibinder.newSetBinder(binder(), AbstractFaviconFetcher.class); + faviconMultibinder.addBinding().to(YoutubeFaviconFetcher.class); + faviconMultibinder.addBinding().to(FacebookFaviconFetcher.class); + faviconMultibinder.addBinding().to(DefaultFaviconFetcher.class); + + Multibinder taskMultibinder = Multibinder.newSetBinder(binder(), ScheduledTask.class); + taskMultibinder.addBinding().to(OldStatusesCleanupTask.class); + taskMultibinder.addBinding().to(OrphansCleanupTask.class); } } diff --git a/src/main/java/com/commafeed/backend/task/ScheduledTask.java b/src/main/java/com/commafeed/backend/task/ScheduledTask.java index bed7c5b5..7976194b 100644 --- a/src/main/java/com/commafeed/backend/task/ScheduledTask.java +++ b/src/main/java/com/commafeed/backend/task/ScheduledTask.java @@ -26,7 +26,8 @@ public abstract class ScheduledTask { } } }; + log.info("registering task {} for execution every {} {}, starting in {} {}", getClass().getSimpleName(), getPeriod(), + getTimeUnit(), getInitialDelay(), getTimeUnit()); executor.scheduleWithFixedDelay(runnable, getInitialDelay(), getPeriod(), getTimeUnit()); } - }