[JAVA] Erste Schritte mit Doma-Transaktionen

Einführung

Hier einige Punkte zur Transaktionsfunktion, die für den Datenbankzugriff unverzichtbar sind.

Dieser Artikel geht von Doma 2.44.0 aus.

Bitte lesen Sie auch Einführung in Doma, um eine Einführung in andere Funktionen von Doma zu erhalten.

Das erste, was zu beachten ist

Das erste, was bei Transaktionen zu beachten ist. Dies ist der Fall, wenn das von Ihnen verwendete Framework (z. B. Spring Framework) Transaktionsfunktionen bietet. Wenn Sie dies tun, sollten Sie es zuerst verwenden.

Bei Verwendung von Spring Framework

Das Spring Framework bietet Transaktionsfunktionen.

Legen Sie in der Methode "getDataSource" der Implementierungsklasse "org.seasar.doma.jdbc.Config" fest, dass die mit "org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy" umschlossene "DataSource" zurückgegeben wird. ** Dies ist sehr wichtig **.

Lesen Sie nach dem Ergreifen der oben genannten Maßnahmen dieses Handbuch und fügen Sie der Klasse oder Methode der Spring-Komponente "@ Transactional" hinzu, um die Transaktion auszuführen. verfügbar.

Wenn Sie doma-spring-boot verwenden, wird der obige "DataSource" -Wrapping automatisch durchgeführt. Es gibt spring-boot-jpetstore als Beispielanwendung, die die Transaktionsfunktion von Spring Framework unter Verwendung von doma-spring-boot verwendet.

Bei Verwendung von Quarkus

Quarkus bietet Transaktionsfunktionen.

In der Methode "getDataSource" der Implementierungsklasse "org.seasar.doma.jdbc.Config" ist die von Agroal verwaltete "DataSource" die Verbindungspoolimplementierung von Quarkus. Bitte senden Sie `zurück.

Nachdem Sie die oben genannten Maßnahmen ergriffen haben, können Sie Transaktionen verwenden, indem Sie den Klassen und Methoden von CDI-Komponenten "@ Transactional" hinzufügen, wie in diesem Dokument beschrieben.

Wenn Sie Quarkus Extension for Doma verwenden, wird die obige Einstellung "DataSource" automatisch vorgenommen. Quarkus-sample ist eine Beispiel-App, die die Transaktionsfunktion von Quarkus mit Quarkus Extension for Doma verwendet.

Wenn Sie kein Framework verwenden, das Transaktionsfunktionen bereitstellt

Erwägen Sie die Verwendung der lokalen Transaktionen von Doma.

Die Merkmale der lokalen Transaktionen von Doma sind wie folgt.

Wie man es benutzt, wird im nächsten Abschnitt beschrieben.

Domas lokale Transaktion

Der Arbeitscode befindet sich in Erste Schritte, aber hier sind einige wichtige Auszüge.

Main.java


public class Main {

  public static void main(String[] args) {
    var config = createConfig();
    var tm = config.getTransactionManager();

    // setup database
    var appDao = new AppDaoImpl(config);
    tm.required(appDao::create);

    // read and update
    //④ Übergeben Sie den Lambda-Ausdruck an die Transaktionsmanager-Methode
    tm.required(
        () -> {
          var repository = new EmployeeRepository(config);
          var employee = repository.selectById(1);
          employee.age += 1;
          repository.update(employee);
        });
  }

  private static Config createConfig() {
    var dialect = new H2Dialect();
    //① Erstellen Sie eine transaktionsfähige Datenquelle
    var dataSource =
        new LocalTransactionDataSource("jdbc:h2:mem:tutorial;DB_CLOSE_DELAY=-1", "sa", null);
    var jdbcLogger = new Slf4jJdbcLogger();
    //② Erstellen Sie einen Transaktionsmanager
    var transactionManager = new LocalTransactionManager(dataSource, jdbcLogger);
    //(3) Ermöglichen Sie die Rückgabe der in (1) und (2) oben erstellten Instanz aus der Implementierungsklasse Config.
    return new DbConfig(dialect, dataSource, jdbcLogger, transactionManager); 
  }
}

① Erstellen Sie eine transaktionsfähige Datenquelle

Instanziieren Sie "LocalTransactionDataSource". In diesem Beispiel wird die Verbindungs-URL usw. vom Konstruktor empfangen, es gibt jedoch auch einen Konstruktor, der die Instanz "DataSource" empfängt.

② Erstellen Sie einen Transaktionsmanager

Übergeben Sie die oben in ① erstellte Instanz von LocalTransactionDataSource an den Konstruktor, um LocalTransactionManager zu instanziieren.

(3) Ermöglichen Sie die Rückgabe der in (1) und (2) oben erstellten Instanz aus der Implementierungsklasse Config.

Übergeben Sie die in ① und ② erstellte Instanz an den Konstruktor von DbConfig, der Implementierungsklasse von Config, und instanziieren Sie sie.

④ Übergeben Sie den Lambda-Ausdruck an die Transaktionsmanager-Methode

Das tm hier ist eine Instanz des LocalTransactionManager, der in ② erstellt wurde. Sie können eine Transaktion ausführen, indem Sie den Prozess, den Sie in der Transaktion behandeln möchten, als Lambda-Ausdruck an die "erforderliche" Methode von "tm" übergeben.

Die Methode "required" ist eine Methode, die gestartet wird, wenn die Transaktion noch nicht gestartet wurde, und es gibt andere Methoden wie die Methode "requireNew", mit der immer eine neue Transaktion gestartet wird, und die Methode "notSupported", mit der die Transaktion vorübergehend gestoppt wird. Diese Methoden können verschachtelt werden.

Die Transaktion wird zurückgesetzt, wenn Sie eine Ausnahme vom Lambda-Ausdruck auslösen oder die Methode "setRollbackOnly" aufrufen. Andernfalls wird es festgeschrieben.

Eine Einschränkung ist, dass beim Einrichten einer lokalen Transaktion der gesamte Datenbankzugriff von Doma grundsätzlich über den TransactionManager erfolgen sollte. Andernfalls erhalten Sie eine Ausnahme.

abschließend

Ich habe die Punkte der Verwendung von Transaktionen in Doma vorgestellt.

Wenn Sie Doma verwenden und der Meinung sind, dass die Transaktion nicht gut funktioniert, lesen Sie bitte diesen Artikel und die verknüpften Artikel und Beispiele.

Recommended Posts

Erste Schritte mit Doma-Transaktionen
Erste Schritte mit DBUnit
Erste Schritte mit Ruby
Erste Schritte mit Swift
Erste Schritte mit der Verarbeitung von Doma-Annotationen
Erste Schritte mit Java Collection
Erste Schritte mit JSP & Servlet
Erste Schritte mit Java Basics
Erste Schritte mit Spring Boot
Erste Schritte mit Ruby-Modulen
Erste Schritte mit Java_Kapitel 5_Praktische Übungen 5_4
[Google Cloud] Erste Schritte mit Docker
Erste Schritte mit Docker mit VS-Code
Erste Schritte mit Ruby für Java-Ingenieure
Erste Schritte mit Docker für Mac (Installation)
Einführung in den Parametrisierungstest in JUnit
Einführung in Java ab 0 Teil 1
Erste Schritte mit Ratpack (4) -Routing & Static Content
Beginnen Sie mit der Funktionsweise von JVM GC
Erste Schritte mit dem Language Server Protocol mit LSP4J
Erste Schritte mit dem Erstellen von Ressourcenpaketen mit ListResoueceBundle
Erste Schritte mit Java_Kapitel 8_Über "Instanzen" und "Klassen"
Links & Memos für den Einstieg in Java (für mich)
Erste Schritte mit der Doma-Projektion mit der Criteira-API
Erste Schritte mit Java 1 Ähnliche Dinge zusammenstellen
Erste Schritte mit Kotlin zum Senden an Java-Entwickler
Erste Schritte mit Doma-Using Joins mit der Criteira-API
Erste Schritte mit Doma-Einführung in die Kriterien-API
Beginnen Sie mit Gradle
Ich habe versucht, mit Gradle auf Heroku zu beginnen
Erste Schritte mit Java-Programmen mit Visual Studio Code
Erste Schritte mit älteren Java-Ingenieuren (Stream + Lambda)
Beginnen Sie mit Spring Boot
Abschließende Zukunft Erste Schritte (Erste Zukunft)
Erste Schritte mit Java und Erstellen eines Ascii Doc-Editors mit JavaFX
Erste Schritte mit Doma-Dynamic Erstellen von WHERE-Klauseln mit der Kriterien-API
Erste Schritte mit Reactive Streams und der JDK 9 Flow API
Erste Schritte mit der Git Hub Container Registry anstelle von Docker Hub
Beginnen wir mit der parallelen Programmierung
Zurück zum Anfang, Erste Schritte mit Java ② Steueranweisungen, Schleifenanweisungen
Wie fange ich mit schlank an?
Fassen Sie die wichtigsten Punkte für den Einstieg in JPA zusammen, die Sie mit Hibernate gelernt haben
Einführung in Swift / C Bridge mit der Geschichte der Portierung von Echo Server mit libuv
CompletableFuture Erste Schritte 2 (Versuchen Sie, CompletableFuture zu erstellen)
Die Nachrichtenkooperation begann mit Spring Boot
Erste Schritte mit Micronaut 2.x ~ Native Build und Bereitstellung für AWS Lambda ~
Erste Schritte mit maschinellem Lernen mit Spark "Preisschätzung" # 1 Laden von Datensätzen mit Apache Spark (Java)
Ich habe versucht, mit Web Assembly zu beginnen
[Veraltet] Erste Schritte mit GC und Speicherverwaltung für JVMs, die ich nicht verstanden habe
Teil 2 Teil II. So fahren Sie mit den ersten Schritten fort Spring Referenzhandbuch Note Hinweis ①