Tôi đang xây dựng một hệ thống, trong đó mỗi yêu cầu từ phía khách hàng sinh ra nhiều luồng trên phía máy chủ. Mỗi thread sau đó được sử dụng một hoặc nhiều DAO (một số DAO có thể được sử dụng bởi nhiều hơn một thread tại thời điểm đó). Tất cả các DAO được tiêm (@Autowired
) vào các lớp chủ đề của tôi trước mùa xuân. Mỗi DAO cũng nhận được SessionFactory
tiêm.Quản lý phiên Spring + Hibernate qua nhiều chủ đề
Điều gì sẽ là cách thích hợp để quản lý các phiên Hibernate trên nhiều DAO này vì vậy tôi sẽ không gặp sự cố vì môi trường đa luồng (ví dụ: DAO từ nhiều chủ đề khác nhau đang cố gắng sử dụng cùng một phiên tại cùng một thời điểm)?
Đủ để tôi chỉ định hibernate.current_session_context_class=thread
trong cấu hình Hibernate và sau đó mọi lúc trong DAO chỉ cần sử dụng SessionFactory.getCurrentSession()
để thực hiện công việc? Nó sẽ phát hiện đúng và tạo các phiên cho mỗi luồng khi cần thiết?
Điều gì về việc kết thúc phiên khi công việc được thực hiện, nó có được thực hiện tự động không? – MounirReg
Khi bạn đang Hibernate với Spring 3 hoặc mới hơn, bạn nên tránh thiết lập thuộc tính này vì Spring đã thực hiện riêng của nó về điều này cần thiết cho Spring để quản lý các phiên Hibernate. http://stackoverflow.com/a/18842593/3826713 – UCJava