Als ich untersucht habe, wie eine Konsolenanwendung mit Spring Boot erstellt wird, heißt es, dass beim Lesen des Referenzhandbuchs "CommandLineRunner" oder "ApplicationRunner" verwendet wird.
Übrigens, als ich irgendwie die Implementierungsklasse von "CommandLineRunner" untersuchte, gab es eine Klasse namens "JobLauncherCommandLineRunner", um Spring Batch mit Spring Boot auszuführen. Das Standardverhalten dieser Klasse besteht darin, alle `Job
in diesem Kontext auszuführen. Es wird jedoch geschrieben, dass ein bestimmter Job ausgeführt werden kann, indem ``
jobName``` angegeben wird. Ich habe mich gefragt, wie ich das umsetzen soll, also habe ich mir die Quelle des relevanten Teils angesehen.
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);
}
}
Nach dem Starten von Spring Boot wird die `run``` Methode von
CommandLineRunner``` ausgeführt. Der Job wird mit der Implementierung hier gestartet. Außerdem wird die Injektion von ``
setJbos alle` `Job
Sammlungen umfassen. Als nächstes wird die Methode `executeLocalJobs``` verwendet, um alle` `Job``` einzeln zu starten. Wenn zu diesem Zeitpunkt
`jobName``` angegeben wird, werden nur die übereinstimmenden Jobs gestartet und die anderen übersprungen.
Ich habe mich gefragt, wie man nur eine bestimmte Funktion mit einem Schlüssel in der Konsolenanwendung ausführt ~ Ich dachte, selbst wenn es mehrere `` `CommandLineRunner``` gibt, werden alle ausgeführt ~, aber wenn Sie es so machen gut aussehen.
Recommended Posts