diff --git a/ebean-api/src/main/java/io/ebean/BackgroundExecutor.java b/ebean-api/src/main/java/io/ebean/BackgroundExecutor.java index 94900c249..537fb7f36 100644 --- a/ebean-api/src/main/java/io/ebean/BackgroundExecutor.java +++ b/ebean-api/src/main/java/io/ebean/BackgroundExecutor.java @@ -37,6 +37,7 @@ public interface BackgroundExecutor { void execute(Runnable task); /** + * Deprecated - migrate to scheduleWithFixedDelay(). * Execute a task periodically with a fixed delay between each execution. *
* For example, execute a runnable every minute. @@ -45,18 +46,56 @@ public interface BackgroundExecutor { * That is, this method has the same behaviour characteristics as * {@link ScheduledExecutorService#scheduleWithFixedDelay(Runnable, long, long, TimeUnit)} */ + @Deprecated void executePeriodically(Runnable task, long delay, TimeUnit unit); /** + * Deprecated - migrate to scheduleWithFixedDelay(). * Execute a task periodically additionally with an initial delay different from delay. */ + @Deprecated void executePeriodically(Runnable task, long initialDelay, long delay, TimeUnit unit); + /** + * Execute a task periodically with a given delay. + * + * @param task the task to execute + * @param initialDelay the time to delay first execution + * @param delay the delay between the termination of one + * execution and the commencement of the next + * @param unit the time unit of the initialDelay and delay parameters + * @return a ScheduledFuture representing pending completion of + * the series of repeated tasks. The future's {@link + * Future#get() get()} method will never return normally, + * and will throw an exception upon task cancellation or + * abnormal termination of a task execution. + */ + ScheduledFuture> scheduleWithFixedDelay(Runnable task, long initialDelay, long delay, TimeUnit unit); + + /** + * Execute a task periodically with a given period. + * + *
If any execution of this task takes longer than its period, then + * subsequent executions may start late, but will not concurrently + * execute. + * + * @param task the task to execute + * @param initialDelay the time to delay first execution + * @param period the period between successive executions + * @param unit the time unit of the initialDelay and period parameters + * @return a ScheduledFuture representing pending completion of + * the series of repeated tasks. The future's {@link + * Future#get() get()} method will never return normally, + * and will throw an exception upon task cancellation or + * abnormal termination of a task execution. + */ + ScheduledFuture> scheduleAtFixedRate(Runnable task, long initialDelay, long period, TimeUnit unit); + /** * Schedules a Runnable for one-shot action that becomes enabled after the given delay. * * @return a ScheduledFuture representing pending completion of the task and - * whose get() method will return null upon completion + * whose get() method will return null upon completion */ ScheduledFuture> schedule(Runnable task, long delay, TimeUnit unit); diff --git a/ebean-autotune/src/main/java/io/ebeaninternal/server/autotune/service/DefaultAutoTuneService.java b/ebean-autotune/src/main/java/io/ebeaninternal/server/autotune/service/DefaultAutoTuneService.java index 9856e59da..be2033695 100644 --- a/ebean-autotune/src/main/java/io/ebeaninternal/server/autotune/service/DefaultAutoTuneService.java +++ b/ebean-autotune/src/main/java/io/ebeaninternal/server/autotune/service/DefaultAutoTuneService.java @@ -77,7 +77,7 @@ public class DefaultAutoTuneService implements AutoTuneService { loadTuningFile(); if (isRuntimeTuningUpdates()) { // periodically gather and update query tuning - server.getBackgroundExecutor().executePeriodically(new ProfilingUpdate(), profilingUpdateFrequency, TimeUnit.SECONDS); + server.getBackgroundExecutor().scheduleWithFixedDelay(new ProfilingUpdate(), profilingUpdateFrequency, profilingUpdateFrequency, TimeUnit.SECONDS); } } } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCache.java b/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCache.java index d0c44de1e..41ec3e2c9 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCache.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCache.java @@ -86,7 +86,7 @@ public class DefaultServerCache implements ServerCache { // default to trimming the cache every 60 seconds long trimFreqSecs = (trimFrequency == 0) ? 60 : trimFrequency; - executor.executePeriodically(trim, trimFreqSecs, TimeUnit.SECONDS); + executor.scheduleWithFixedDelay(trim, trimFreqSecs, trimFreqSecs, TimeUnit.SECONDS); } @Override diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorManager.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorManager.java index 77b3c6c04..0cb5deeaa 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorManager.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorManager.java @@ -203,7 +203,7 @@ public class BeanDescriptorManager implements BeanDescriptorMap { * Run periodic trim of query plans. */ public void scheduleBackgroundTrim() { - backgroundExecutor.executePeriodically(this::trimQueryPlans, 117L, 60L, TimeUnit.SECONDS); + backgroundExecutor.scheduleWithFixedDelay(this::trimQueryPlans, 117L, 60L, TimeUnit.SECONDS); } private void trimQueryPlans() { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/executor/DefaultBackgroundExecutor.java b/ebean-core/src/main/java/io/ebeaninternal/server/executor/DefaultBackgroundExecutor.java index c93cbfac7..28bb50765 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/executor/DefaultBackgroundExecutor.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/executor/DefaultBackgroundExecutor.java @@ -82,7 +82,7 @@ public class DefaultBackgroundExecutor implements SpiBackgroundExecutor { @Override public void executePeriodically(Runnable task, long delay, TimeUnit unit) { - executePeriodically(task, delay, delay, unit); + executor.scheduleWithFixedDelay(wrapMDC(task), delay, delay, unit); } @Override @@ -90,6 +90,16 @@ public class DefaultBackgroundExecutor implements SpiBackgroundExecutor { executor.scheduleWithFixedDelay(wrapMDC(task), initialDelay, delay, unit); } + @Override + public ScheduledFuture> scheduleWithFixedDelay(Runnable task, long initialDelay, long delay, TimeUnit unit) { + return executor.scheduleWithFixedDelay(wrapMDC(task), initialDelay, delay, unit); + } + + @Override + public ScheduledFuture> scheduleAtFixedRate(Runnable task, long initialDelay, long delay, TimeUnit unit) { + return executor.scheduleAtFixedRate(wrapMDC(task), initialDelay, delay, unit); + } + @Override public ScheduledFuture> schedule(Runnable task, long delay, TimeUnit unit) { return executor.schedule(wrapMDC(task), delay, unit);