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?
java
spring
transactions
propagation
Alexis Dufrenoy
źródło
źródło
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
źródło
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
źródło
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.
źródło