diff --git a/db-scheduler-boot-starter/src/main/java/com/github/kagkarlsson/scheduler/boot/autoconfigure/DbSchedulerAutoConfiguration.java b/db-scheduler-boot-starter/src/main/java/com/github/kagkarlsson/scheduler/boot/autoconfigure/DbSchedulerAutoConfiguration.java index 456159a9..73de1685 100644 --- a/db-scheduler-boot-starter/src/main/java/com/github/kagkarlsson/scheduler/boot/autoconfigure/DbSchedulerAutoConfiguration.java +++ b/db-scheduler-boot-starter/src/main/java/com/github/kagkarlsson/scheduler/boot/autoconfigure/DbSchedulerAutoConfiguration.java @@ -119,6 +119,9 @@ public Scheduler scheduler(DbSchedulerCustomizer customizer) { // Use custom executor service if provided customizer.executorService().ifPresent(builder::executorService); + // Use custom task repository if provided + customizer.taskRepository().ifPresent(builder::taskRepository); + builder.deleteUnresolvedAfter(config.getDeleteUnresolvedAfter()); // Add recurring jobs and jobs that implements OnStartup diff --git a/db-scheduler-boot-starter/src/main/java/com/github/kagkarlsson/scheduler/boot/config/DbSchedulerCustomizer.java b/db-scheduler-boot-starter/src/main/java/com/github/kagkarlsson/scheduler/boot/config/DbSchedulerCustomizer.java index 2477c7b7..7426a038 100644 --- a/db-scheduler-boot-starter/src/main/java/com/github/kagkarlsson/scheduler/boot/config/DbSchedulerCustomizer.java +++ b/db-scheduler-boot-starter/src/main/java/com/github/kagkarlsson/scheduler/boot/config/DbSchedulerCustomizer.java @@ -17,6 +17,8 @@ import com.github.kagkarlsson.scheduler.SchedulerName; import com.github.kagkarlsson.scheduler.Serializer; +import com.github.kagkarlsson.scheduler.TaskRepository; +import com.github.kagkarlsson.scheduler.TaskResolver; import java.util.Optional; import java.util.concurrent.ExecutorService; @@ -45,4 +47,12 @@ default Optional serializer() { default Optional executorService() { return Optional.empty(); } + + /** + * Provide a custom {@link TaskRepository} implementation. + */ + default Optional taskRepository() { + return Optional.empty(); + } + } diff --git a/db-scheduler/src/main/java/com/github/kagkarlsson/scheduler/SchedulerBuilder.java b/db-scheduler/src/main/java/com/github/kagkarlsson/scheduler/SchedulerBuilder.java index 3f319da4..07e7bbe2 100644 --- a/db-scheduler/src/main/java/com/github/kagkarlsson/scheduler/SchedulerBuilder.java +++ b/db-scheduler/src/main/java/com/github/kagkarlsson/scheduler/SchedulerBuilder.java @@ -53,6 +53,7 @@ public class SchedulerBuilder { protected boolean enableImmediateExecution = false; protected ExecutorService executorService; protected Duration deleteUnresolvedAfter = Duration.ofDays(14); + protected TaskRepository taskRepository; public SchedulerBuilder(DataSource dataSource, List> knownTasks) { this.dataSource = dataSource; @@ -138,12 +139,17 @@ public SchedulerBuilder deleteUnresolvedAfter(Duration deleteAfter) { return this; } + public SchedulerBuilder taskRepository(TaskRepository taskRepository) { + this.taskRepository = taskRepository; + return this; + } + public Scheduler build() { if (pollingLimit < executorThreads) { LOG.warn("Polling-limit is less than number of threads. Should be equal or higher."); } final TaskResolver taskResolver = new TaskResolver(statsRegistry, clock, knownTasks); - final JdbcTaskRepository taskRepository = new JdbcTaskRepository(dataSource, tableName, taskResolver, schedulerName, serializer); + final TaskRepository taskRepository = buildTaskRepository(taskResolver); ExecutorService candidateExecutorService = executorService; if (candidateExecutorService == null) { @@ -161,4 +167,12 @@ public Scheduler build() { schedulerName, waiter, heartbeatInterval, enableImmediateExecution, statsRegistry, pollingLimit, deleteUnresolvedAfter, startTasks); } + + private TaskRepository buildTaskRepository(TaskResolver taskResolver) { + if (taskRepository != null) { + return taskRepository; + } + + return new JdbcTaskRepository(dataSource, tableName, taskResolver, schedulerName, serializer); + } }