Hi Scott,
Guess the one making the most sense is the named based option which is mainly exactly the same as the XML DSL one but in plain java (yeah :)).
If done then it also enables the define and run case thanks the operator but has the pitfall to almost quit the recurrent side of batches (to look like a one time job) which makes it leaving jbatch for me and more in a scheduler/plain java thing.
So overall it means it is just a matter of registering a job but not launching and if launch is desired it can be done already in one more line:
void launchAtStartup(@Observes JobRegistrationCallback cb, JobOperator op) {
// define
cb.defineJob("my-job")
.batchlet("exec", ....);
// start if needed - or let a scheduling trigger it elsewhere (quartz for ex)
final var id = op.start("my-job", null); // immediately launch the job
// optionally await somehow the end for "batch process" and not long running instances
JobOperatorAwaiterHelper.toCompletionStage(id).whenComplete((r, e) -> ...); // can be neat to support CompletionStage like that in the API somehow
}