[JAVA] Ich habe Spring Batch ausprobiert

Überblick

Ich werde ein Memorandum aufbewahren, wenn ich Spring Batch mit STS verwende. Hauptsächlich für mich. Spring Batch ist ein Batch-Anwendungsframework, das auf dem Spring Framework basiert.

Die Entwicklungsumgebung ist wie folgt. OS : Windows 7 Home Edition 64bit Java : JavaSE 8 update 181 Spring Boot : 2.3.4 STS : 4.6.1

STS-Setup

Für das STS-Setup habe ich auf [Mein Memorandum] verwiesen (https://qiita.com/harayoshi/items/fca60e68087640b26292).

Ein Projekt erstellen

Klicken Sie unten auf Neues Spring Starter-Projekt erstellen. createProject.PNG

Stellen Sie das Projekt ein. NewSpringStarterProject.PNG

Legen Sie eine Bibliotheksreferenz fest. dependencies.PNG

Site-Informationen sind festgelegt, keine Änderung. siteInfo.PNG

Das Projekt ist fertig. ProjectExplorer.PNG

Vorsichtsmaßnahmen

Über Lombok

Nur Lombok lädt das Glas herunter und Wählen Sie das im Installationsprogramm verwendete STS aus und installieren Sie es. Das Installationsprogramm kann von Lombok Official heruntergeladen werden. Weil Lombok auf das Projekt verweist Die Verwendung von Anmerkungen verursacht keinen Kompilierungsfehler. Getter / Setter, Konstruktor wird nicht automatisch generiert, Der Versuch, sie aufzurufen, führt zu einem Kompilierungsfehler. Da Getter / Setter etc. automatisch von der IDE generiert werden müssen, Sie müssen es auch auf STS installieren.

Installieren des Oracle-Treibers

DB wird in diesem Artikel nicht verwendet. Die Konfiguration von Spring Boot + Spring Batch setzt die Verwendung von DB voraus. Daher in application.properties und application.yml DB-Verbindungsinformationen werden nicht beschrieben. Erstens gibt es keinen Oracle-Treiber Wenn Sie die Anwendung ausführen Kann nicht mit dem Fehler ausgeführt werden, dass __datasource erforderlich ist. __ __ Daher an Oracle, das auf dem PC eingerichtet wurde, dessen Funktion bestätigt wurde Ich verweise auf die Bibliothek, damit ich eine Verbindung herstellen kann. Es kann auch ausgeführt werden, ohne __DB zum Zeitpunkt der Ausführung __ zu starten. Wenn Sie über eine Bibliothek verfügen und über eine Konfiguration und Einstellungen verfügen, die versuchen, eine Verbindung zum DB-Schema herzustellen Das ist ok.

Erstellen einer Stapelanwendung

Der offizielle Start von Spring Batch ist hier. Im obigen Fall ist es eine Spezifikation, das erstellte JAR auszuführen und die CSV-Daten in die DB-Tabelle zu laden.

In diesem Artikel werde ich versuchen, die Stapelverarbeitung ohne Verwendung von cron zu planen. Ich habe auf [Spring Batch Scheduling Tasks] verwiesen (https://spring.io/guides/gs/scheduling-tasks/). @ Geplante Dokumentation.

Als Beispiel erstellen wir eine Bean und implementieren einen Prozess, um deren Inhalt zu protokollieren. Unter Lombok können Variablendeklarationen für die Protokollausgabe und Kesselplatten für Bean-Klassen weggelassen werden.

Die implementierten Klassen sind wie folgt.

Zuerst die Klasse mit @SpringBootApplication, Diese Klasse wird zur Laufzeit angegeben.

BatchSampleApplication.java


package jp.co.illmatics;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class BatchSampleApplication {

	public static void main(String[] args) {
		SpringApplication.run(BatchSampleApplication.class, args);
	}

}

Dies ist die Hauptroutine für die Stapelverarbeitung. Durch Angabe von @EnableScheduling Die Stapelplanung ist jetzt möglich Die Methode, die @Scheduled angegeben hat cron = "${cron.pattern1}" Es wird zu dem unter angegebenen Zeitpunkt ausgeführt.

Batch.java


package jp.co.illmatics;

import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;

import jp.co.illmatics.bean.Member;
import jp.co.illmatics.enumeration.VoicePart;
import lombok.extern.slf4j.Slf4j;

@Configuration
@EnableScheduling
@Slf4j
public class Batch {

	private String firstName = "Dummy";
	private String familyName = "Family";
	private String part = VoicePart.LEAD_VOCAL.toString();
	private String birthday = "1991/01/01";

	@Scheduled(cron = "${cron.pattern1}")
	public void execute() {
		Member member = new Member(firstName, familyName, part, birthday);
		log.info("member = " + member.toString());
	}

}

Es ist eine Ressourcendatei. Verwenden Sie den Schlüssel cron.pattern1, um den Ausführungszeitpunkt der Stapelverarbeitung festzulegen Es wird jede Minute und alle 0 Sekunden angegeben. Das Format finden Sie im Offiziellen API-Dokument.

application.properties


spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:XE
spring.datasource.username=xxxxxx
spring.datasource.password=xxxxxx
spring.jpa.database-platform=org.hibernate.dialect.Oracle10gDialect
spring.jpa.show-sql=true

cron.pattern1: 0 * * * * *

Bean für Testdaten. Wir validieren mit Bean Validation. Unter anderem haben wir @ExistsInVoicePrat als benutzerdefinierte Validierung implementiert.

Member.java


package jp.co.illmatics.bean;

import javax.validation.constraints.NotEmpty;

import org.springframework.format.annotation.DateTimeFormat;

import jp.co.illmatics.validator.annotation.ExistsInVoicePart;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;

@Data
@AllArgsConstructor
public class Member {

	@NotEmpty(message = "Input first name.")
	private String firstName;

	@NotEmpty(message = "Input family name.")
	private String familyName;

	@ExistsInVoicePart
	private String part;

	@DateTimeFormat(pattern = "yyyy/MM/dd")
	private String birthday;

}

Eine Anmerkung zur benutzerdefinierten Validierung.

ExistsInVoicePart.java


package jp.co.illmatics.validator.annotation;

import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import javax.validation.Constraint;
import javax.validation.Payload;

import jp.co.illmatics.validator.VoicePartValidator;

@Constraint(validatedBy = {VoicePartValidator.class})
@Target({FIELD})
@Retention(RUNTIME)
public @interface ExistsInVoicePart {

	String message() default "Input voice part.";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
    
    @Target({FIELD})
    @Retention(RUNTIME)
    public @interface List {
        ExistsInVoicePart[] value();
    }

}

Aufzählung für benutzerdefinierte Validatoren.

VoicePart.java


package jp.co.illmatics.enumeration;

public enum VoicePart {

	LEAD_VOCAL("lead vocal"),
	BEATBOXER("beatboxer"),
	BASS("bass"),
	OTHERS("others");

    @SuppressWarnings("unused")
	private final String name;
 
    private VoicePart(String name) {
        this.name = name;
    }
}

Benutzerdefinierter Validator.

VoicePartValidator.java


package jp.co.illmatics.validator;

import java.util.Arrays;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

import jp.co.illmatics.enumeration.VoicePart;
import jp.co.illmatics.validator.annotation.ExistsInVoicePart;

public class VoicePartValidator implements ConstraintValidator<ExistsInVoicePart, String> {

	public void initialize(ExistsInVoicePart annotation) {
	}

	@Override
	public boolean isValid(String value, ConstraintValidatorContext context) {
		return Arrays.stream(VoicePart.values()).filter(part -> part.name().equals(value)).findFirst().isPresent();
	}
}

Funktionsprüfung

Klicken Sie mit der rechten Maustaste auf BatchSampleApplication.java. Als Spring Boot-Anwendung ausführen.

Es läuft alle 0 Sekunden jede Minute. 実行結果.PNG

das ist alles. Bis zum Ende Danke fürs Lesen.

Recommended Posts

Ich habe Spring Batch ausprobiert
Ich habe es mit Spring versucht.
Ich habe Spring State Machine ausprobiert
Ich habe versucht, Spring + Mybatis + DbUnit zu verwenden
Ich habe GraphQL mit Spring Boot ausprobiert
Ich habe Flyway mit Spring Boot ausprobiert
[Tutorial] Spring Batch
Ich habe versucht, Tomcat zu setzen
Ich habe youtubeDataApi ausprobiert.
Ich habe versucht, ① umzugestalten
Ich habe FizzBuzz ausprobiert.
Ich habe JHipster 5.1 ausprobiert
Ich habe Lazy Initialization mit Spring Boot 2.2.0 ausprobiert
Ich habe Spring Data JDBC 1.0.0.BUILD-SNAPSHOT ausprobiert (-> 1.0.0.RELEASE)
Ich habe versucht, Autoware auszuführen
Ich habe versucht, Gson zu benutzen
Ich habe sofort QUARKUS ausprobiert
Ich habe versucht, TestNG zu verwenden
Ich habe versucht, Galasa zu benutzen
Ich habe versucht, node-jt400 (Programme)
Ich habe versucht, JavaFX und Spring Framework zu verknüpfen.
Ich habe versucht, node-jt400 (ausführen)
Zusammenfassung dessen, was ich in Spring Batch gelernt habe
Ich habe versucht, node-jt400 (Transaktionen)
05. Ich habe versucht, die Quelle von Spring Boot zu löschen
Ich habe versucht, die Kapazität von Spring Boot zu reduzieren
Ich habe versucht, mit Spring Data JPA zu beginnen
Startparameter für Spring Batch-Jobs
Ich habe versucht, node-jt400 (Umgebungskonstruktion)
Ich habe DI mit Ruby versucht
Ich habe versucht, node-jt400 (IFS schreiben)
Ich habe versucht, node-jt400 (SQL Update)
Ich habe versucht, Azure Cloud-Init zu verwenden
Ich habe Drools (Java, InputStream) ausprobiert.
Ich habe Rails Anfänger ausprobiert [Kapitel 1]
Ich habe versucht, Apache Wicket zu verwenden
Ich habe versucht, node-jt400 (SQL-Abfrage)
Ich habe versucht, Java REPL zu verwenden
Ich habe versucht, den Quellcode zu analysieren
Ich habe das FizzBuzz-Problem ausprobiert
Ich habe versucht, node-jt400 (SQL-Stream)
Ich habe versucht, node-jt400 (IFS lesen)
Ich habe Rails Anfänger ausprobiert [Kapitel 2]
Ich habe UPSERT mit PostgreSQL ausprobiert.
Ich habe BIND mit Docker ausprobiert
Ich habe versucht, yum-cron zu verifizieren
Schleifenschritt mit Spring Batch
Ich habe versucht, Metaprogrammierung mit Java
Ich habe das Spring Boot-Einführungshandbuch [Zugriff auf Daten mit JPA] ausprobiert.
Ich habe versucht, dies und das von Spring @ Transactional zu überprüfen
[Rails] Ich habe versucht, die Stapelverarbeitung mit der Rake-Task zu implementieren
Ich habe versucht, mit Swagger mit Spring Boot zu beginnen
Ich habe jetzt versucht, Anakia + Jing zu verwenden
Ich habe versucht, ein Formular mit Spring MVC und Jasper Reports 1/3 (Jasper Reports-Einstellungen) zu drucken.
Ich habe Angular Tutorial + SpringBoot + PostgreSQL ausprobiert
Ich habe versucht, ein Formular mit Spring MVC und Jasper Reports 3/3 (Spring MVC-Steuerung) zu drucken.
Ich habe versucht, C # (Indexer) zu kauen.