복붙노트

[SPRING] 첫 로그인시 트랜잭션을 위해 Hibernate Session을 열 수 없음

SPRING

첫 로그인시 트랜잭션을 위해 Hibernate Session을 열 수 없음

나는 전체 운영 봄 Mvc 응용 프로그램을 스프링 보안과 함께 실행하고 있지만 서버가 잠시 동안 활성화되어 있지 않고 누군가가 로그인을 시도 할 때마다 다음 오류가 발생합니다.

HTTP 상태 500 - 요청 처리가 실패했습니다. 중첩 예외는 org.springframework.transaction.CannotCreateTransactionException : 트랜잭션을 위해 Hibernate Session을 열 수 없습니다. 중첩 예외는 org.hibernate.TransactionException : JDBC begin transaction failed이다.

때로는 (약 5 초 후) 정상적으로 작동하기 시작합니다.

나는이 연결을 수색하고 발견했다 : http://forum.spring.io/forum/spring-projects/data/13298-could-not-open-hibernate-session-for-transaction-jdbc-begin-failed 하지만 "연결 풀 구성에서 연결 테스트를 구성하는 방법"을 모르겠습니다.

어떤 충고?

편집하다:

구성 풀을 설정하기 위해 다음 링크를 찾았습니다.

http://www.codingpedia.org/ama/tomcat-jdbc-connection-pool-configuration-for-production-and-development/

그래서 그것을 내 데이터 소스에 구현하려고 :

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">

        <property name="driverClassName" value="com.mysql.jdbc.Driver" />

        <property name="url" value="jdbc:mysql://192.168.254.45:3306/7jogos" />
        <property name="password" value="..." />
        <property name="username" value="..." />


<!--      Configuration pool -->
        <property name="validationQuery" value="SELECT 1" />
        <property name="validationInterval" value="34000" />
        <property name="testOnBorrow" value="true" />
        <property name="removeAbandoned" value="true" />
        <property name="removeAbandonedTimeout" value="55" />


    </bean>

하지만 결국 validationInterval에 오류가 발생합니다.

다음 행에 여러 개의 주석이 있습니다.     - 'org.apache.commons.dbcp.BasicDataSource'클래스의 'validationInterval'속성에 대한 설정 도구가 없습니다.

해결법

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

    1.stacktrace가 없으면 확실하게 말할 수 없지만 만료 된 DB 연결을 처리 할 가능성이 큽니다. Hibernate는 실행을 시도하는 첫 번째 문장 ( "START TRANSACTION - JDBC를 통해)이 실패하기 때문에 트랜잭션을 시작하지 못합니다. 다시 한번, 기본 DB 연결이 무효화 되었기 때문에 다시 생각합니다.

    stacktrace가 없으면 확실하게 말할 수 없지만 만료 된 DB 연결을 처리 할 가능성이 큽니다. Hibernate는 실행을 시도하는 첫 번째 문장 ( "START TRANSACTION - JDBC를 통해)이 실패하기 때문에 트랜잭션을 시작하지 못합니다. 다시 한번, 기본 DB 연결이 무효화 되었기 때문에 다시 생각합니다.

    이는 여러 가지 이유로 인해 발생할 수 있습니다.

    소스가 무엇이든 관계없이이 문제가 발생하지 않도록 선택할 수 있습니다. Tomcat JDBC 풀과 같은 JDBC 풀을 사용하는 경우 필요에 따라 연결을 테스트하고 다시 열도록 풀을 구성 할 수 있습니다. 예를 들어 testOnBorrow 설정은 실제로 응용 프로그램에 사용하기 전에 db 연결을 지속적으로 테스트하도록 풀에 지시합니다. 성능 관련 문제를 제거하기 위해 이러한 설정을 미세 조정할 수 있습니다.

    추가 정보

    풀링을 구현하려고 시도했지만 변수 이름이 잘못되었습니다 : validationInterval wrong.

    BasicDataSource에 그런 이름의 변수가 없으므로 Spring이 속성을 설정하지 못하기 때문에 오류가 발생합니다. BasicDataSource (링크)의 javadoc을보고 어떤 구성 변수가 사용 가능한지 확인하십시오. validationInterval 변수는 Tomcat 풀링 구현 (위에 제안한 내용)에 적용 할 수 있습니다. 선택하는 것은이 기능을 가지고 있지 않습니다.

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

    2.바꾸다

    바꾸다

    <property name="validationQuery" value="SELECT 1" />
    <property name="validationInterval" value="34000" />
    <property name="testOnBorrow" value="true" />
    <property name="removeAbandoned" value="true" />
    <property name="removeAbandonedTimeout" value="55" />
    

    이것으로 :

    <property name="initialSize" value="10" />
    <property name="maxActive" value="5" />
    <property name="maxWait" value="5000" />
    
  3. ==============================

    3.답은 나의 편집에서 연결 데이터가있는 bean에 다음을 추가하는 것입니다.

    답은 나의 편집에서 연결 데이터가있는 bean에 다음을 추가하는 것입니다.

    <!--      Configuration pool -->
            <property name="validationQuery" value="SELECT 1" />
            <property name="validationInterval" value="34000" />
            <property name="testOnBorrow" value="true" />
            <property name="removeAbandoned" value="true" />
            <property name="removeAbandonedTimeout" value="55" />
    

    왜 그런지 모르겠지만 @ Paweł Głowacz의 대답은 나를 위해 작동하지 않았다. 도와 줘서 고마워.

  4. from https://stackoverflow.com/questions/31476782/could-not-open-hibernate-session-for-transaction-on-first-login by cc-by-sa and MIT license