Hogyan befolyásolja a @Transactional jelöléssel ellátott nyilvános metódus hívása, amely egy @Transactional és REQUIRES_NEW paraméterrel ellátott privát metódust hív meg?
sobes.tech MI
Válasz az MI-től
Springben az @Transactional annotáció proxy-kon keresztül működik, amelyek elfogják a metódushívásokat. Amikor egy nyilvános, @Transactional-nal ellátott metódus hívódik meg, a tranzakció a beállítások szerint jön létre vagy használódik.
Azonban, ha ezen a metóduson belül egy @Transactional(propagation = REQUIRES_NEW) jelölt privát metódus hívódik meg, akkor a privát metóduson lévő annotáció nem fog működni, mert a hívás közvetlenül ugyanabban az osztályban történik, proxy nélkül.
Ezért a REQUIRES_NEW paraméter a privát metóduson nem fog új tranzakciót létrehozni, és az összes kód egyetlen tranzakció keretében fog végrehajtódni, amely a nyilvános metódus számára nyitva van.
Ha azt szeretné, hogy a REQUIRES_NEW működjön, a privát metódust proxy-n keresztül kell meghívni, például egy másik bean-ből vagy ön-injektálással.