Buduję system, w którym każde żądanie ze strony klienta spawnuje wiele wątków po stronie serwera. Każdy wątek używa jednego lub więcej DAO (niektóre DAO mogą być używane przez więcej niż jeden wątek w tym czasie). Wszystkie DAO są wstrzykiwane (@Autowired
) do moich klas wątków wiosną. Każdy DAO otrzymuje również iniekcję SessionFactory
.Zarządzanie sesją Spring + Hibernate przez wiele wątków
Jaki byłby właściwy sposób zarządzania sesjami Hibernate w tych wielu obiektach DAO, aby nie napotkać problemów z powodu środowiska wielowątkowego (np. Kilka DAO z różnych wątków próbuje używać tej samej sesji w tym samym czasie)?
Czy wystarczy podać hibernate.current_session_context_class=thread
w konfiguracji hibernacji, a następnie za każdym razem w DAO po prostu użyć SessionFactory.getCurrentSession()
do wykonania pracy? Czy odpowiednio wykrywa i tworzy sesje na wątek?
Co zrobić z zamknięciem sesji po zakończeniu pracy, czy odbywa się to automatycznie? – MounirReg
Kiedy jesteś w Hibernacji ze Spring 3 lub nowszym, powinieneś unikać ustawiania tej właściwości, ponieważ Spring ma własną implementację tego, co jest potrzebne Springowi do zarządzania sesjami Hibernate. http://stackoverflow.com/a/18842593/3826713 – UCJava