This is a reactive task scheduler inspired by the db-scheduler project. Tasks are stored in persistent storage using R2DBC and Spring DatabaseClient.
Artifacts can be found in Maven Central:
<dependency>
<groupId>io.gitlab.klawru</groupId>
<artifactId>r2dbc-scheduler-spring-boot-starter</artifactId>
<version>${version}</version>
</dependency>
- Add maven dependency
<dependency>
<groupId>io.gitlab.klawru</groupId>
<artifactId>r2dbc-scheduler-spring-boot-starter</artifactId>
<version>${version}</version>
</dependency>
-
create table
scheduled_job
. See table definition for postgresql -
Create bean with task
@Configuration
public class TaskConfig {
@Bean
RecurringTask<Void> updateObjects(Service service, OneTimeTask<UUID> updateObject) {
return Tasks.recurring("updateObjects",
new CronScheduler("0 0 1 * * *", ZoneId.of("UTC")))
.execute(((taskInstance, executionContext) -> service.scheduleUpdateAll(executionContext, updateObject)));
}
@Bean
OneTimeTask<UUID> updateObject(Service service) {
return Tasks.oneTime("updateObject", UUID.class)
.execute(service::updateById);
}
}
- Add a dependency to the project
<dependency>
<groupId>io.gitlab.klawru</groupId>
<artifactId>r2dbc-scheduler</artifactId>
<version>${version}</version>
</dependency>
-
create table
scheduled_job
. See table definition for postgresql -
Create the necessary tasks
class Tasks {
OneTimeTask<String> task = new OneTimeTaskBuilder<>("taskName", String.class)
.execute((taskInstance, context) -> Mono.fromRunnable(() -> {
String data = taskInstance.getData();
log.info(data);
}));
}
- Create a task scheduler, and register task
class Scheduler {
SchedulerClient client = SchedulerBuilder.create(connectionFactory, task, everyHourTask)
.schedulerConfig(schedulerConfigBuilder -> schedulerConfigBuilder
.schedulerName("name")
.threads(2)
)
.build();
}
- Start the task scheduler
client.start();
- And then you can schedule the task via the SchedulerClient
scheduler.schedule(taskA.instance("1"));
Contributor names and contact info
- Klawru@gmail.com Amir
- 0.1.0
- Initial Release
This project is licensed under the Apache License Version 2.0 — see the LICENSE file for details
- db-scheduler by kagkarlsson