[JAVA] Fügen Sie die Spring Batch-Testmethode unter die Spring-Test-Transaktion ein

Bei Transaktionen im Frühjahrstest wird grundsätzlich nach der Testmethode ein Rollback durchgeführt. Bei einer Testmethode, die Spring Batch verwendet, tritt jedoch ein Laufzeitfehler auf. Die Ursache hierfür wird etwas später erläutert. Wenn Sie jedoch eine Transaktion verwenden, die außerhalb von Spring Batch intern gestartet wurde, und wenn Sie ein Commit durchführen oder ein Rollback durchführen, ohne Spring Batch zu kennen, kann die Statusverwaltung des Batches merkwürdig werden. Es scheint so als.

Das Verhalten dieses Spring Batch stört jedoch beim Laufen mit Spring-Test. Gehen Sie wie folgt vor, um dies schnell zu lösen.

MapJobRepositoryFactoryBean b = new MapJobRepositoryFactoryBean();
b.setValidateTransactionState(false);

Wenn Sie setValidateTransactionState auf false setzen, wird die oben genannte Prüfung der Transaktionsexistenz nicht durchgeführt. Das Javadoc der Methode hat die folgende Beschreibung.

	 * Flag to determine whether to check for an existing transaction when a
	 * JobExecution is created. Defaults to true because it is usually a
	 * mistake, and leads to problems with restartability and also to deadlocks
	 * in multi-threaded steps.

Die Verwendung von Transaktionen außerhalb von Spring Batch ist im Grunde genommen ein Fehler, der die Neustartfähigkeit beeinträchtigen und auch zu Deadlocks in Multithread-Schritten führen kann. ein. Ich denke nicht, dass es ein Problem bei Unit-Tests ist.

Abgesehen davon denke ich, dass es in Ordnung ist, es jedes Mal mit DBUnit oder DbSetup zu löschen. Natürlich ist es in Bezug auf die Geschwindigkeit nachteilig.

Recommended Posts

Fügen Sie die Spring Batch-Testmethode unter die Spring-Test-Transaktion ein
Führen Sie einen Transaktionsbestätigungstest mit Spring Boot durch
[Tutorial] Spring Batch