wie wählen Sie die spring batch job für die Ausführung nach Anwendungs-argument - spring boot java-config
Habe ich zwei unabhängige spring batch-jobs, die im selben Projekt weil ich möchte, dass die Verwendung der gleichen Infrastruktur-bezogene Kaffeebohnen. Alles konfiguriert ist, in Java. Ich würde gerne wissen, ob es eine richtige Art und Weise zu beginnen, die Arbeitsplätze unabhängig, die beispielsweise auf die ersten java-app-argument in der main-Methode zum Beispiel. Wenn ich SpringApplication.run
nur der zweite job wird ausgeführt durch Magie.
Die main-Methode sieht wie folgt aus:
@ComponentScan
@EnableAutoConfiguration
public class Application {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(Application.class);
app.setWebEnvironment(false);
ApplicationContext ctx= app.run(args);
}
}
und die beiden jobs sind so konfiguriert, wie Sie in der Spring Batch tutorial Erste Schritte auf Frühling.io. Hier ist die Konfigurationsdatei, der erste job, die zweite auf die gleiche Weise konfiguriert.
@Configuration
@EnableBatchProcessing
@Import({StandaloneInfrastructureConfiguration.class, ServicesConfiguration.class})
public class AddPodcastJobConfiguration {
@Autowired
private JobBuilderFactory jobs;
@Autowired
private StepBuilderFactory stepBuilderFactory;
//reader, writer, processor...
}
Aktivieren Modularisierung erstellte ich eine AppConfig Klasse, wo ich definieren Sie factories für die zwei jobs:
@Configuration
@EnableBatchProcessing(modular=true)
public class AppConfig {
@Bean
public ApplicationContextFactory addNewPodcastJobs(){
return new GenericApplicationContextFactory(AddPodcastJobConfiguration.class);
}
@Bean
public ApplicationContextFactory newEpisodesNotificationJobs(){
return new GenericApplicationContextFactory(NotifySubscribersJobConfiguration.class);
}
}
P. S. ich bin neu in Spring-Konfiguration in Java-Konfiguration von Spring Boot und Spring Batch...
- Dies ist nicht eine Spring-Boot-Anwendung. Wenn Sie etwas, das funktioniert mit Spring Boot, warum brauchen Sie Hilfe?
- Sorry Dave, für meine blöde Frage aber ich bin neu auf Spring Boot, Spring Batch und Java-Konfiguration. Was ich erreichen möchte ist, haben die beiden+ jobs in der gleichen code-Basis, so dass Sie teilen können die JPA-Entitäten zum Beispiel..., aber immer noch in der Lage sein, um Sie auszuführen separat irgendwie mit Spring Boot.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nur die "Feder.batch.job.Namen=myJob" - Eigenschaft. Man könnte es als SystemProperty beim starten der Anwendung (-Dspring.batch.job.Namen=myjob). Wenn Sie definiert haben, in dieser Eigenschaft, spring-batch-starter startet nur die jobs, die definiert sind durch diese Eigenschaft.
BatchAutoConfiguration
nicht deaktiviert wurde (es erstellt eineJobLauncherCommandLineRunner
an und übergibt den job-Namen ist).Laufen die jobs, die Sie aus der main-Methode, die Sie laden können, die die erforderliche job-Konfiguration-Bohne, und die JobLauncher aus dem Anwendungskontext und führen es dann aus:
Was verursacht wurde meiner viel Verwirrung war, dass Sie den zweiten Auftrag, die ausgeführt wurden, obwohl die erste Aufgabe schien zu sein, "abgeholt" von der runner... Gut das problem war, dass in beiden job-Konfigurationsdatei, die ich verwendet standard-Methodennamen
writer(), reader(), processor() and step()
und es verwendet die von dem zweiten job, der schien zu "überschreiben" der erste job ohne jede Warnung...Ich verwendet, wenn eine Anwendung config-Klasse mit
@EnableBatchProcessing(modular=true)
, dass ich dachte, dass würde verwendet werden magisch von Spring Boot :Schreibe ich einen blog-post darüber, wenn es fertig ist, aber bis dahin ist der code verfügbar ist, bei https://github.com/podcastpedia/podcastpedia-batch (arbeiten/lernen in der Arbeit)..
Gibt es die CommandLineJobRunner und vielleicht hilfreich sein kann.
Aus seiner javadoc