diff --git a/src/main/java/io/ebean/BackgroundExecutor.java b/src/main/java/io/ebean/BackgroundExecutor.java
index f6439773e..9ffa4b62b 100644
--- a/src/main/java/io/ebean/BackgroundExecutor.java
+++ b/src/main/java/io/ebean/BackgroundExecutor.java
@@ -31,15 +31,18 @@ public interface BackgroundExecutor {
* Execute a task periodically with a fixed delay between each execution.
*
* For example, execute a runnable every minute.
- *
*
* The delay is the time between executions no matter how long the task took.
* That is, this method has the same behaviour characteristics as
* {@link ScheduledExecutorService#scheduleWithFixedDelay(Runnable, long, long, TimeUnit)}
- *
*/
void executePeriodically(Runnable r, long delay, TimeUnit unit);
+ /**
+ * Execute a task periodically additionally with an initial delay different from delay.
+ */
+ void executePeriodically(Runnable r, long initialDelay, long delay, TimeUnit unit);
+
/**
* Schedules a Runnable for one-shot action that becomes enabled after the given delay.
*
diff --git a/src/main/java/io/ebeaninternal/server/core/DefaultBackgroundExecutor.java b/src/main/java/io/ebeaninternal/server/core/DefaultBackgroundExecutor.java
index e48d7463d..89f6aa333 100644
--- a/src/main/java/io/ebeaninternal/server/core/DefaultBackgroundExecutor.java
+++ b/src/main/java/io/ebeaninternal/server/core/DefaultBackgroundExecutor.java
@@ -33,7 +33,6 @@ public class DefaultBackgroundExecutor implements SpiBackgroundExecutor {
@Override
public void execute(Runnable r) {
final Map map = MDC.getCopyOfContextMap();
-
if (map == null) {
pool.execute(r);
} else {
@@ -50,10 +49,14 @@ public class DefaultBackgroundExecutor implements SpiBackgroundExecutor {
@Override
public void executePeriodically(Runnable r, long delay, TimeUnit unit) {
- final Map map = MDC.getCopyOfContextMap();
+ executePeriodically(r, delay, delay, unit);
+ }
+ @Override
+ public void executePeriodically(Runnable r, long initialDelay, long delay, TimeUnit unit) {
+ final Map map = MDC.getCopyOfContextMap();
if (map == null) {
- schedulePool.scheduleWithFixedDelay(r, delay, delay, unit);
+ schedulePool.scheduleWithFixedDelay(r, initialDelay, delay, unit);
} else {
schedulePool.scheduleWithFixedDelay(() -> {
MDC.setContextMap(map);
@@ -62,14 +65,13 @@ public class DefaultBackgroundExecutor implements SpiBackgroundExecutor {
} finally {
MDC.clear();
}
- }, delay, delay, unit);
+ }, initialDelay, delay, unit);
}
}
@Override
public ScheduledFuture> schedule(Runnable r, long delay, TimeUnit unit) {
final Map map = MDC.getCopyOfContextMap();
-
if (map == null) {
return schedulePool.schedule(r, delay, unit);
} else {
@@ -87,7 +89,6 @@ public class DefaultBackgroundExecutor implements SpiBackgroundExecutor {
@Override
public ScheduledFuture schedule(Callable c, long delay, TimeUnit unit) {
final Map map = MDC.getCopyOfContextMap();
-
if (map == null) {
return schedulePool.schedule(c, delay, unit);
} else {
diff --git a/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorManager.java b/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorManager.java
index 724c2507b..3ab92c5b1 100644
--- a/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorManager.java
+++ b/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorManager.java
@@ -245,7 +245,7 @@ public class BeanDescriptorManager implements BeanDescriptorMap {
* Run periodic trim of query plans.
*/
public void scheduleBackgroundTrim() {
- backgroundExecutor.executePeriodically(this::trimQueryPlans, 60L, TimeUnit.SECONDS);
+ backgroundExecutor.executePeriodically(this::trimQueryPlans, 117L, 60L, TimeUnit.SECONDS);
}
private void trimQueryPlans() {