Dieser Artikel wurde von Zhang Jian aus der Huawei Cloud Community „ Concurrency Control of Database Operations in Java “ geteilt.
In der modernen Anwendungscodierung wird es aus der Datenbank gefunden, führt einige Geschäftslogikoperationen aus und speichert es schließlich wieder. Im Augenblick:
Person person = personRepo.findById(id); person.setAge(18); personRepo.save(person);
Wenn jedoch in einem solchen Geschäftsvorgang ein Thread das Alter ändert, ein anderer Thread den Spitznamen ändert und ihn schließlich wieder speichert, kann dies dazu führen, dass die Änderung eines Alters/Spitznamens überschrieben wird.
Es gibt zwei gängige Lösungen
Fügen Sie vor der Ausführung eine pessimistische Sperre hinzu
Durch verteilte Sperren und andere Methoden wird sichergestellt, dass nur ein Thread gleichzeitig die Daten ändern kann.
Optimistische Umsetzung der Schließidee
Die Versionskontrolle ist eine weitere beliebte Methode zur Bewältigung von Parallelitätsproblemen. Es stellt die Datenkonsistenz sicher, indem die Versionsnummer bei jeder Aktualisierung eines Datensatzes erhöht wird.
In JPA kann dies @Version
durch Hinzufügen von Anmerkungen zum Feld erreicht werden. Dies erfordert jedoch auch, dass ① ein Versionsfeld in der Datenbank vorhanden sein muss und ② für Aktualisierungsvorgänge nach der Suche die Speichermethode von JPA zum Aktualisieren verwendet werden muss.
Natürlich können Sie auch update_time
eine optimistische Sperrimplementierung simulieren, bei der Sie beim Aktualisieren möglicherweise Bedingungen hinzufügen müssen update_time
. update_time
In extremen Szenarien ist die theoretische Korrektheit nicht so streng.
Broadcom kündigt die Beendigung des bestehenden Deepin-IDE-Versionsupdates des VMware-Partnerprogramms an und ersetzt das alte Erscheinungsbild durch ein neues Erscheinungsbild Zhou Hongyi: Der gebürtige Hongmeng wird definitiv erfolgreich sein WAVE SUMMIT begrüßt seine zehnte Sitzung, Wen Xinyiyan wird die neueste Enthüllung haben! Yakult Company bestätigt, dass 95 G-Daten durchgesickert sind Die beliebteste Lizenz unter den Programmiersprachen im Jahr 2023 „2023 China Open Source Developer Report“ offiziell veröffentlicht Julia 1.10 offiziell veröffentlicht Fedora 40 plant die Vereinheitlichung von /usr/bin und /usr/sbin Rust 1.75 .0-Version