[JAVA] Erstellen Sie mit Spring Batch eine einfache On-Demand-Charge

Abstrakt

Erstellen Sie einen einfachen Spring Batch und starten Sie ihn im Batch von einer Webanforderung.

Umgebung

Detaillierte Vorgehensweise

Projekterstellung

Um SpringBatch zu verwenden, fügen Sie der Abhängigkeit "Spring-Boot-Starter-Batch" hinzu. Da DB für die Jobverwaltung verwendet wird, wird auch ein geeigneter JDBC hinzugefügt.

pom.xml


<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-batch</artifactId>
</dependency>
<dependency>
  <groupId>org.postgresql</groupId>
  <artifactId>postgresql</artifactId>
  <scope>runtime</scope>
</dependency>

Stapelerstellung

** Grundsätzlich erstellt unter Bezugnahme auf hier **

Batch-Ist-Verarbeitung

Erstellen Sie eine entsprechende Verarbeitungsklasse als "@ Service"

@Service
public class MyBatchService {

	public void execute(Long id, String name, Date reqDate) throws InterruptedException {
		//Angemessene Stapelverarbeitung
		Thread.sleep(5000);
	}
}

Chargeneinstellung

Das Herzstück der Stapelverarbeitung. Erstellen Sie dieses Mal ganz einfach einen Ein-Schritt-Job (Tasklet). In der Java-Konfigurationsklasse festlegen.

@Configuration
@EnableBatchProcessing //(1)
public class BatchConfig {

	@Autowired
	private JobBuilderFactory jobBuilderFactory; //(2)
	@Autowired
	private StepBuilderFactory stepBuilderFactory; //(2)

	@Autowired
	private MyBatchService service;

	@Bean
	public JobLauncher jobLauncher1(JobRepository jobRepository) { //(2),(3)
		ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
		//Die Anzahl der gleichzeitigen Ausführungen beträgt 3.Warten Sie auf weitere Warteschlangen.
		taskExecutor.setCorePoolSize(3); //(4)
		// java.lang.IllegalStateException: ThreadPoolTaskExecutor not initialized
		taskExecutor.initialize(); //(5)

		SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
		jobLauncher.setJobRepository(jobRepository);
		jobLauncher.setTaskExecutor(taskExecutor);

		return jobLauncher;
	}

	@Bean
	public Job job(Step step1) { //(6)
		return jobBuilderFactory.get("batchjob")
					.incrementer(new RunIdIncrementer())
					.start(step1)
					.build();
	}

	@Bean
	public Step step1(Tasklet tasklet1) { //(6)
		return stepBuilderFactory.get("step1")
					.tasklet(tasklet1)
					.build();
	}

	@Bean
	@StepScope //(7)
	public Tasklet tasklet1( //(6)
			@Value("#{jobParameters['id']}") Long id, //(8)
			@Value("#{jobParameters['name']}") String name,
			@Value("#{jobParameters['reqDate']}") Date reqDate
			) {
        //(9)
		MethodInvokingTaskletAdapter tasklet = new MethodInvokingTaskletAdapter();
		tasklet.setTargetObject(service);
		tasklet.setTargetMethod("execute");
		tasklet.setArguments(new Object[] {id, name, reqDate});

		return tasklet;
	}
}
(1) Zeigt an, dass es sich um eine Spring Batch-Einstellung handelt@EnableBatchProcessingZu@ConfigurationGrant mit.
(2) Einige Beans sind standardmäßig im Kontext enthalten und können automatisch verdrahtet werden.
(3) Einstellungen für die Jobausführungsumgebung.
(4) Anzahl der gleichzeitigen Ausführungen mit CorePoolSize(Anzahl der Themen)Einstellen. Wenn dies überschritten wird, wartet es auf eine Warteschlange und wird nacheinander ausgeführt, sobald Threads verfügbar werden.
(5) Ich muss initialisieren"java.lang.IllegalStateException: ThreadPoolTaskExecutor not initialized"Ausnahme tritt auf.
(6) Job, Step,Tasklet-Einstellungen.
(7) Wenn Sie die Parameter zur Laufzeit festlegen, können Sie beim Start keine Bean erstellen.@StepScopeSo ändern Sie den Zeitpunkt der Bean-Erstellung.
(8) Einstellungen zum Abrufen von Objekten aus jobParameters.
(9) Mit Invoke ausführen.

Batch-Anruf

@Service
public class MyServletService {

	@Autowired
	private JobLauncher jobLauncher1;
	@Autowired
	private Job job;

	public void request(Long id, String name) throws JobExecutionException {
		// (10)
		JobParameters params = new JobParametersBuilder()
								.addLong("id", id)
								.addString("name", name)
								.addDate("reqDate", Calendar.getInstance().getTime())
								.toJobParameters();

		jobLauncher1.run(job, params);
	}
}
(10) Die an Job zu übergebenden Parameter werden gemeinsam an JobParameters übergeben.

Starteinstellungen

Fügen Sie der application.yml Einstellungen hinzu.

application.yml


spring:
  datasource: # (11)
    url: jdbc:postgresql://localhost:5432/kurukuruz1
    username: u-s-e-r
    password: p-a-s-s
    driver-class-name: org.postgresql.Driver
  batch:
    initialize-schema: always # (12)
    job:
      enabled: false # (13)
(11) Legen Sie die Verbindungsinformationen der zu verwendenden Datenbank fest.
(12) Einstellungen zum Ausführen von DDL für die von Spring Batch verwendeten Tabellen. StandardmäßigembeddedWenn Sie PostgreSQL verwenden, wird DDL nicht ausgeführt. Ändern Sie es daher explizit.
(13) StandardmäßigtrueDer Job wird ausgeführt, wenn Spring gestartet wird, kann jedoch beim Start nicht ausgeführt werden, da beim Start keine Jobparameter vorhanden sind. Ändern Sie es daher explizit.

Referenzseite

Wiedereinführung von Spring Batch - Ich habe versucht, die Verwendung selbst zu organisieren - Qiita BLOG.IK.AM - Falsch missverstandene ThreadPoolTaskExecutor-Einstellungen Spring Batch-Beispielcode (Java / Gradle) - Qoosky [Spring Batch] Job nicht automatisch ausführen Steuermethode, wenn andere Jobs als der angegebene Job automatisch ausgeführt werden --Qiita Kojioniruku-Hallo Welt bei Spring Boot Batch

Recommended Posts

Erstellen Sie mit Spring Batch eine einfache On-Demand-Charge
Erstellen Sie mit Spring Boot eine einfache Such-App
Erstellen Sie mit Spring Security 2.1 eine einfache Demo-Site mit Spring Security
Erstellen Sie mit Dropwizard eine einfache Webanwendung
[Schienenentnahme] Erstellen Sie eine einfache Entnahmefunktion mit Schienen
Erstellen eines einfachen Balkendiagramms mit MPAndroidChart
Erstellen Sie mit Java + MySQL ein einfaches Bulletin Board
Erstellen Sie in Eclipse ein einfaches Stapelverarbeitungsframework.
Erstellen Sie einen Web-API-Server mit Spring Boot
Erstellen Sie mit Docker eine Spring Boot-Entwicklungsumgebung
Implementieren Sie eine einfache Rest-API mit Spring Security mit Spring Boot 2.0
Erstellen Sie einen Spielplatz mit Xcode 12
Erstellen Sie mit Spring Boot einen Mikrodienst
Erstellen Sie eine einfache CRUD mit SpringBoot + JPA + Thymeleaf ~ ~ Validierung hinzufügen ~
Erstellen Sie eine Hello World-Webanwendung mit Spring Framework + Jetty
Erstellen wir eine einfache API mit EC2 + RDS + Spring Boot ①
Implementieren Sie eine einfache Rest-API mit Spring Security & JWT mit Spring Boot 2.0
Erstellen Sie mit Docker eine Vue3-Umgebung!
Erstellen Sie eine App mit Spring Boot 2
Erstellen Sie eine App mit Spring Boot
Erstellen Sie Ausnahmen mit einer Fluid-Schnittstelle
Erstellen Sie ein Maven-Projekt mit Befehlen
Implementieren Sie einen einfachen Web-REST-API-Server mit Spring Boot + MySQL
Erstellen Sie einen einfachen Webserver mit der Java-Standardbibliothek com.sun.net.httpserver
Erstellen Sie eine einfache CRUD mit SpringBoot + JPA + Thymeleaf ④ ~ Fehlermeldung anpassen ~
Ich habe ein einfaches Suchformular mit Spring Boot + GitHub Search API erstellt.
Erstellen Sie mit dem Befehl eine JAR-Datei
[Rails6] Erstelle eine neue App mit Rails [Anfänger]
Erstellen Sie mit Docker eine Spring Boot-gradle-mysql-Entwicklungsumgebung
Erstellen Sie eine temporäre Klasse mit new Object () {}
[Docker] [Nginx] Erstellen Sie mit Nginx eine einfache ALB
[Rails 5] Erstelle eine neue App mit Rails [Anfänger]
Erstellen Sie mit dem Befehl cURL + tar ein Spring Boot-App-Entwicklungsprojekt
Erstellen Sie eine einfache CRUD mit SpringBoot + JPA + Thymeleaf ② ~ Bildschirm- und Funktionserstellung ~
Server mit Spring Gradle ausführbar So erstellen Sie JAR und WAR
Erstellen Sie einen einfachen Gateway-Server, indem Sie die Maskerade mit der Firewall-cmd von CentOS8 festlegen
Schritte zum Erstellen einer einfachen Kamel-App mit Apache Camel Spring Boot-Startern
[Memo] Erstellen Sie mit Docker ganz einfach eine CentOS 8-Umgebung
Erstellen Sie eine CSR mit erweiterten Informationen in Java
[Rails] Rails neu, um eine Datenbank mit PostgreSQL zu erstellen
[Windows] [IntelliJ] [Java] [Tomcat] Erstellen Sie mit IntelliJ eine Umgebung für Tomcat 9
Lassen Sie uns mit Javas Timer einen zeitgesteuerten Prozess erstellen! !!
[Tutorial] Spring Batch
Erstellen Sie eine Spring Boot-Anwendung mit IntelliJ IDEA
[Java] Erstellen Sie eine Sammlung mit nur einem Element
Erstellen Sie einen Team-Chat mit Rails Action Cable
Aktualisieren Sie die Datenbank regelmäßig mit Spring Batch und My Batis
Erstellen Sie eine CRUD-App mit Spring Boot 2 + Thymeleaf + MyBatis
Erstellen Sie ein SandBox-Konto mit Fastlane Spaces IP
Erstellen Sie eine Mehrschlüsselkarte mit einer Standardbibliothek
Erstellen Sie Ihr eigenes Dienstprogramm mit Thymeleaf mit Spring Boot
So erstellen Sie ein Excel-Formular mithilfe einer Vorlagendatei mit Spring MVC
Zeigen Sie eine einfache Hallo Welt mit SpringBoot + IntelliJ
Erstellen Sie eine Spring Boot-Umgebung mit Windows + VS-Code
Ein einfaches Stein-Papier-Scheren-Spiel mit JavaFX und SceneBuilder
Erstellen eines gemeinsamen Repositorys mit Spring Data JPA
Erstellen Sie ein WEB-System mit Spring + Doma + H2DB