복붙노트

[SPRING] Spring + Hibernate 세션 라이프 사이클

SPRING

Spring + Hibernate 세션 라이프 사이클

Spring에서 Hibernate 세션의 "lifecycle"이 어떻게 제대로 수행되어야 하는가?

SessionFactory는 Spring에 의해 자동으로 생성되고 Glassfish 연결 풀에서 DB 연결을 사용합니다. 지금은 SessionFactory.getCurrentSession ()을 통해 Hibernate 세션을 얻고있다. 그런 다음 트랜잭션을 시작하고 작업을 수행 한 다음 끝에 커밋 () 또는 롤백 ()을 수행합니다. disconnect (), close (), flush () 또는 다른 어떤 작업을 언제든지해야 할 필요가 있습니까? 연결이 제대로 풀로 되돌아 가거나 Spring에서 이미 자동으로 수행 한 모든 작업이 있습니까?

이러한 방법을 많이 사용하면 무엇을해야하는지, 누군가 올바른 방향을 가리킬 수 있는지를 이해하는 것이 지금 당분간 다소 혼란 스럽습니다.

해결법

  1. ==============================

    1.SessionFactory는 Spring에 의해 자동으로 생성되기 때문에, Spring 프레임 워크는 연결을 종료 할 것입니다. 스프링 리소스 관리 확인

    SessionFactory는 Spring에 의해 자동으로 생성되기 때문에, Spring 프레임 워크는 연결을 종료 할 것입니다. 스프링 리소스 관리 확인

    확인하고 싶으면. 앱용 로깅을 사용하는 경우 로그를 확인할 수 있습니다. 그것은 다음과 같을 것이다.

    나는이 링크에서 다음 행을 얻는다.

  2. ==============================

    2.커넥션 풀로의 연결 해제 방법에 관한 정책은 Spring과 아무런 관계가 없다. Hibernate 자체가 hibernate.connection.release_mode 구성 매개 변수를 통해 구성된다. 이것은 org.hibernate.ConnectionReleaseMode의 enum으로 식별된다.

    커넥션 풀로의 연결 해제 방법에 관한 정책은 Spring과 아무런 관계가 없다. Hibernate 자체가 hibernate.connection.release_mode 구성 매개 변수를 통해 구성된다. 이것은 org.hibernate.ConnectionReleaseMode의 enum으로 식별된다.

    버전 3.1 이상부터 시작하면 hibernate.connection.release_mode의 기본값은 auto이며 해당 ConnectionReleaseMode 값은 JTA 또는 JDBC 트랜잭션 사용 여부에 따라 다릅니다. JDBC 트랜잭션이 사용될 경우 ConnectionReleaseMode.AFTER_TRANSACTION (예 : after_transaction)으로 설정됩니다.

    ConnectionReleaseMode.AFTER_TRANSACTION의 동작은 다음과 같습니다. transaction.commit () 또는 transaction.rollback ()을 호출하고 session.close () 및 session을 호출하여 연결이 각 트랜잭션이 끝난 후 연결 풀로 반환됩니다. .disconnect ()

    최대 절전 모드 설명서 11.5 절에서이 동작을 확인할 수 있습니다.

  3. ==============================

    3.희망이 링크는 세션 및 거래에 대해 안내합니다.

    희망이 링크는 세션 및 거래에 대해 안내합니다.

    Transaction에서 commit ()을 호출하면 자동으로 세션이 닫히고, 결국 연결시 close 메소드가 호출되어 해당 풀로 돌아갑니다.

  4. ==============================

    4.SessionFactory.getCurrentSession ()을 통해 최대 절전 쿼리를 실행하면 Spring은 연결을 열고 닫는 데 필요한 작업을 수행합니다. Spring 설정에서 사용중인 SessionFactory는 내부적으로 config.buildSessionFactory 메소드도 호출합니다.

    SessionFactory.getCurrentSession ()을 통해 최대 절전 쿼리를 실행하면 Spring은 연결을 열고 닫는 데 필요한 작업을 수행합니다. Spring 설정에서 사용중인 SessionFactory는 내부적으로 config.buildSessionFactory 메소드도 호출합니다.

    이것의 대부분은 AbstractSessionFactoryBean의 구현에서 발생합니다. 커넥션의 종료는 settings.getConnectionProvider (). close (); 문을 사용하여 SessionFactoryImpl 클래스의 hibernate에 의해 수행된다. . 즉, 최대 절전 모드는 모든 것을 처리합니다. Spring은 필요할 때 도움을 줄뿐입니다.

  5. from https://stackoverflow.com/questions/8724259/spring-hibernate-session-lifecycle by cc-by-sa and MIT license