- Verschifft
- 2. September 2026 um 02:43 UTC
- Autor
- Kamo
- Ausschuss
- 6906043
deleteByArticleUidAndLocale ist eine @Modifying-Abfrage und JPA weigert sich, eine laufen außerhalb einer Transaktion. Nichts auf diesem Weg jemals eröffnet ein, so jeder Ort von jedem Artikel warf TransactionRequiredException -- "Ausführen eines update/löschen Abfrage" -- welche die Schleife per Locale gefangen, bei WARN angemeldet, und vorbeigezogen. Die Wissensdatenbank dient seit jedem Ort Englisch die Funktion ausgeliefert, und die zehn-minütige Sweep wurde wieder versucht, die ganzen Korpus für immer, weil nichts, was es jemals stecken. Gefunden durch das Beobachten der Protokolle während eines Imports: 21 Ausfälle pro Artikel, jeder Artikel, jeder Versuch. Jeder Locale läuft jetzt in seiner eigenen Transaktion, über TransactionTemplate statt als @Transactional auf der Methode. Die Grenze muss pro Ort sein -- eins Transaktion rund um alle 21 bedeutet eine einzige fehlgeschlagene Locale rollt die zwanzig das funktionierte -- und ein selbstbeschwurter Helfer würde den Proxy in genau der Weg, der den @Async-Fehler in dieser Datei produziert hat. Der Überruf selbst bleibt außerhalb der Transaktion. Es ist eine HTTP-Anfrage zu einem anderen Dienst mit einer 120-Sekunden-Sektion Timeout, und mit einer Datenbank Die Verbindung darüber würde den Pool für die Dauer binden. Außerdem: Der async-Ausführende fällt auf die Sättigung, anstatt auf den Anrufer zu laufen. CallerRunsPolicy ist in der Regel richtig, aber der Anrufer hier ist der Tomcat Thread dass nur einen Artikel gespeichert, und die Übergabe es 21 HTTP-Anrufe ist die genaue Stand Diese Arbeit wurde vom Anfrage-Thread verschoben, um zu vermeiden. Der Sweep ist ein echter Erholungspfad, keine Hoffnung -- sich darauf zu beschränken ist nicht dasselbe wie fallen zu lassen Arbeit auf dem Boden.