Provides an ExecutorService-based JobRunner that also handles transactions. Depends on jdbc module.
By default, Jobs use DB locks to ensure only one instance is running at a time.
You can enable parallel runs by overriding allowParallelRun
property.
Usage example:
use<JobRunner>().apply {
scheduleDaily(require<SomeJobImplementation>(), at = LocalTime.of(7, 0))
}