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
Für das STS-Setup habe ich auf [Mein Memorandum] verwiesen (https://qiita.com/harayoshi/items/fca60e68087640b26292).
Klicken Sie unten auf Neues Spring Starter-Projekt erstellen.
Stellen Sie das Projekt ein.
Legen Sie eine Bibliotheksreferenz fest.
Site-Informationen sind festgelegt, keine Änderung.
Das Projekt ist fertig.
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.
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.
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();
}
}
Klicken Sie mit der rechten Maustaste auf BatchSampleApplication.java. Als Spring Boot-Anwendung ausführen.
Es läuft alle 0 Sekunden jede Minute.
das ist alles. Bis zum Ende Danke fürs Lesen.
Recommended Posts