Quand j'ai étudié comment créer une application console avec Spring Boot, il est dit que CommandLineRunner
ou ApplicationRunner
est utilisé lors de la lecture du guide de référence.
À propos, lorsque j'ai étudié en quelque sorte la classe d'implémentation de CommandLineRunner '', il y avait une classe appelée
JobLauncherCommandLineRunner '' pour exécuter Spring Batch avec Spring Boot. Le comportement par défaut de cette classe est d'exécuter tous les Job` '' dans ce contexte. Cependant, il est écrit qu'un travail spécifique peut être exécuté en spécifiant
`` jobName```. Je me demandais comment mettre en œuvre cela, alors j'ai regardé la source de la partie pertinente.
JobLauncherCommandLineRunner
public class JobLauncherCommandLineRunner
implements CommandLineRunner, ApplicationEventPublisherAware {
@Autowired(required = false)
public void setJobs(Collection<Job> jobs) {
this.jobs = jobs;
}
@Override
public void run(String... args) throws JobExecutionException {
logger.info("Running default command line with: " + Arrays.asList(args));
launchJobFromProperties(StringUtils.splitArrayElementsIntoProperties(args, "="));
}
private void executeLocalJobs(JobParameters jobParameters)
throws JobExecutionException {
for (Job job : this.jobs) {
if (StringUtils.hasText(this.jobNames)) {
String[] jobsToRun = this.jobNames.split(",");
if (!PatternMatchUtils.simpleMatch(jobsToRun, job.getName())) {
logger.debug("Skipped job: " + job.getName());
continue;
}
}
execute(job, jobParameters);
}
}
Après le démarrage de Spring Boot, la méthode
run de` `` CommandLineRunner
est exécutée. Le travail commence avec la mise en œuvre ici. De plus, l'injection de
setJbos inclura toutes les collections `` Job
. Ensuite, la méthode executeLocalJobs
est utilisée pour démarrer tous les
Jobun par un. À ce moment-là, si
jobName '' est spécifié, seuls les travaux correspondants sont démarrés et les autres sont ignorés.
Je me suis demandé comment exécuter uniquement une fonction spécifique avec une touche dans l'application console ~ Je pensais que même s'il y avait plusieurs CommandLineRunner ''
, ils seront tous exécutés ~, mais si vous le faites comme ça regardez bien.
Recommended Posts