Nie rozumiem różnicy w zachowaniu między zasadami PROPAGATION_REQUIRES_NEW
i PROPAGATION_NESTED
zasadami rozpowszechniania. Wydaje mi się, że w obu przypadkach wycofywany jest obecny proces, ale nie cała transakcja. Jakaś wskazówka?
Nie rozumiem różnicy w zachowaniu między zasadami PROPAGATION_REQUIRES_NEW
i PROPAGATION_NESTED
zasadami rozpowszechniania. Wydaje mi się, że w obu przypadkach wycofywany jest obecny proces, ale nie cała transakcja. Jakaś wskazówka?
Odpowiedzi:
Zobacz ten link: PROPAGATION_NESTED kontra PROPAGATION_REQUIRES_NEW? Juergen Hoeller wyjaśnia to bardzo dobrze. - Forum Spring Source działa całkowicie offline 28 lutego 2019 r., ale odpowiednią część artykułu możesz przeczytać w poniższym cytacie
PROPAGATION_REQUIRES_NEW rozpoczyna nową, niezależną transakcję „wewnętrzną” dla danego zakresu. Ta transakcja zostanie zatwierdzona lub wycofana całkowicie niezależnie od transakcji zewnętrznej, mając własny zakres izolacji, własny zestaw blokad itp. Transakcja zewnętrzna zostanie zawieszona na początku transakcji wewnętrznej i wznowiona, gdy transakcja wewnętrzna zostanie zakończony. ...
Z drugiej strony PROPAGATION_NESTED rozpoczyna transakcję „zagnieżdżoną”, która jest prawdziwą transakcją podrzędną istniejącej. Co się stanie, to punkt zapisu zostanie przyjęty na początku zagnieżdżonej transakcji. Jeśli zagnieżdżona transakcja się nie powiedzie, cofniemy się do tego punktu zapisu. Zagnieżdżona transakcja jest częścią transakcji zewnętrznej, więc zostanie zatwierdzona dopiero na końcu transakcji zewnętrznej. ...
PROPAGATION_REQUIRES_NEW: używa całkowicie niezależnej transakcji dla każdego zakresu transakcji, na którą ma to wpływ. W takim przypadku podstawowe transakcje fizyczne są różne i dlatego mogą niezależnie zatwierdzać lub wycofywać, przy czym status wycofania transakcji wewnętrznej nie ma wpływu na transakcję zewnętrzną.
PROPAGATION_NESTED: używa pojedynczej fizycznej transakcji z wieloma punktami zapisu, do których może się cofnąć. Takie częściowe wycofania pozwalają wewnętrznemu zakresowi transakcji wyzwolić wycofanie dla swojego zakresu, przy czym zewnętrzna transakcja może kontynuować fizyczną transakcję pomimo wycofania niektórych operacji. To ustawienie jest zwykle mapowane na punkty zapisu JDBC, więc będzie działać tylko z transakcjami zasobów JDBC.
sprawdź dokumentację sprężyny
PROPAGATION_REQUIRES_NEW
: Transakcja zewnętrzna zostanie zawieszona na początku transakcji wewnętrznej i wznowiona po zakończeniu transakcji wewnętrznej. Każda transakcja wewnętrzna zatwierdzona / wycofana po zakończeniu. PROPAGATION_NESTED
: Zagnieżdżona transakcja jest częścią transakcji zewnętrznej, więc zostanie zatwierdzona dopiero na końcu transakcji zewnętrznej.
Proszę znaleźć różnicę
1.) Use of NESTED Transaction
Wykonaj w ramach zagnieżdżonej transakcji, jeśli istnieje bieżąca transakcja, zachowuj się jak PROPAGATION_REQUIRED w innym przypadku. Zagnieżdżona transakcja jest obsługiwana przez Spring
2.) Korzystanie z WYMAGANEJ transakcji Wspieraj bieżącą transakcję, utwórz nową, jeśli żadna nie istnieje. . Oznacza to dla domeny bankowej, takiej jak wypłata, wpłata, aktualizacja transakcji
3.) Użycie REQUIRES_NEW Transakcja Utwórz nową transakcję i zawieś bieżącą transakcję, jeśli taka istnieje.