Spring Jersey Mybatis Aop 트 랜 잭 션 실효 솔 루 션 SpringManaged Transaction 은 Spring 에 의 해 관리 되 지 않 습 니 다.

38052 단어 jersey사무.aop
전체 프로젝트 의 프레임 워 크 는 Spring + Jersey + Mybatis 입 니 다. 사 무 는 Aop 으로 하 는 것 입 니 다. 주해 형식 이 아니 라 이런 오 류 를 계속 보고 합 니 다.
DEBUG: org.mybatis.spring.transaction.SpringManagedTransaction - JDBC Connection [ConnectionHandle{url=jdbc:postgresql://localhost/mypro, user=mypro, debugHandle=null, lastResetAgoInSec=92, lastUsedAgoInSec=92, creationTimeAgoInSec=92}] will not be managed by Spring

인터넷 에서 많은 방안 을 찾 았 는데 나의 업무 문 제 를 해결 하지 못 한 것 을 발견 했다.http://www.codingpedia.org/ama/restful-web-services-example-in-java-with-jersey-spring-and-mybatis/
http://powertech.iteye.com/blog/2312452
https://www.cnblogs.com/dingchenghong/p/4858552.html
위의 자 료 를 모두 시험 해 보 았 습 니 다. 주해 형식 으로 첫 번 째 프로젝트 를 단독으로 뛰 어 넘 으 면 됩 니 다. 하지만 저 는 지금 원래 의 프로젝트 를 유지 하고 있 습 니 다. 만약 에 예전 의 프로젝트 를 주해 형식 으로 바 꾸 면 작업량 도 많 기 때문에 Aop 사무 로 처리 해 야 합 니 다. 제 프로젝트 의 대체적인 구 조 는 service 인터페이스 serviceImpl 인터페이스 실현 류, 인 터 페 이 스 를 실현 하 는 것 입 니 다.모든 클래스 에 @ Servcie 와 @ Path 의 주석 dao 인터페이스 application. xml 파일 스 캔 모든 클래스 spring - mybatis. xml 데이터 원본 트 랜 잭 션 설정 이 추가 되 어 있 습 니 다.
    <aop:config>
        <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.xxxx.xx.service.*.*(..))" />

    aop:config>

처음에 설정 파일 이 이 랬 는데 아무리 시도 해 봐 도 안 되 고 괜 찮 더 라 고요.
type="annotation" expression="org.springframework.stereotype.Service"/>

이것 은 service 의 중복 스 캔 문 제 를 제외 하고 @ Component 를 사용 해 야 하 며 @ Service 를 사용 할 수 없다 고 시도 하 였 습 니 다. 출처:https://stackoverflow.com/questions/21104567/springjersey-transactional-annotation/24554236#24554236 그러나 문 제 를 해결 하지 못 했 습 니 다. my batis - spering 의 소스 코드 를 보 았 습 니 다.
SpringManagedTransaction.java:
  private void openConnection() throws SQLException {
    this.connection = DataSourceUtils.getConnection(this.dataSource);
    this.autoCommit = this.connection.getAutoCommit();
    this.isConnectionTransactional = isConnectionTransactional(this.connection, this.dataSource);

    if (this.logger.isDebugEnabled()) {
      this.logger.debug(
          "JDBC Connection ["
              + this.connection
              + "] will"
              + (this.isConnectionTransactional ? " " : " not ")
              + "be managed by Spring");
    }
  }

DataSourceUtils.java:
    public static boolean isConnectionTransactional(Connection con, DataSource dataSource) {
        if (dataSource == null) {
            return false;
        }
        ConnectionHolder conHolder = (ConnectionHolder) TransactionSynchronizationManager.getResource(dataSource);
        return (conHolder != null && connectionEquals(conHolder, con));
    }

TransactionSynchronizationManager.java
    public static Object getResource(Object key) {
        Object actualKey = TransactionSynchronizationUtils.unwrapResourceIfNecessary(key);
        Object value = doGetResource(actualKey);
        if (value != null && logger.isTraceEnabled()) {
            logger.trace("Retrieved value [" + value + "] for key [" + actualKey + "] bound to thread [" +
                    Thread.currentThread().getName() + "]");
        }
        return value;
    }

Key 를 통 해 value 를 찾 지 못 한 것 을 발견 하고 예전 의 프로필 을 자세히 보 니 모든 업무 가 인터페이스 에 연결 되 어 있 습 니 다. 제 가 있 는 업 무 는 인터페이스 실현 류 에 연결 되 어야 하기 때문에 다음 과 같이 바 뀌 었 습 니 다.

    



테스트 를 한 후에 안 되 는 것 을 발 견 했 습 니 다. 위의 생각 에 따라 다른 프로젝트 를 단독으로 테스트 하 는 것 은 모든 serviceImpl 의 실현 인터페이스 계승 관 계 를 없 애 는 것 입 니 다. 바로 이러한 serviceImpl 만 실현 되 고 기적 이 성공 한 것 을 발 견 했 습 니 다. 그래서 예전 에 proxy - target - class 라 는 속성 을 접 한 적 이 있다 는 것 을 생각 했 습 니 다. 그 당시 에 잘 기억 하지 못 했 습 니 다. 바로 인터페이스 나 유형의 대리 입 니 다.그래서 자 료 를 보면 proxy - target - class 속성 값 은 인 터 페 이 스 를 기반 으로 하 는 것 인지, 클래스 를 기반 으로 하 는 프 록 시 를 만 드 는 것 인지 결정 합 니 다.먼저 proxy - target - class = "true" 와 proxy - target - class = "false" 의 차 이 를 설명 합 니 다. true 는 클래스 기반 프 록 시가 역할 을 합 니 다 (cglib 라 이브 러 리 가 필요 합 니 다). false 또는 이 속성 을 생략 하면 표준 JDK 는 인터페이스 기반 프 록 시가 역할 을 합 니 다. proxy - target - class 는 spring 사무, op, 캐 시 등 몇 개 에 설정 되 어 있 습 니 다.그 역할 은 똑 같 습 니 다. 그래서 설정 파일 을 다음 과 같이 바 꿉 니 다.
    <aop:config proxy-target-class="true">
        <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.xxxx.xx.service.impl.*.*(..))" />

    aop:config>

뜻밖에도 큰 성 과 를 거 두 었 으 니, 먼저 정리 하고, 계속 해결 방안 을 보완 할 것 이다!
트 랜 잭 션 정 보 는 다음 과 같 습 니 다.
2018-01-03 22:12:12,144 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - 
2018-01-03 22:12:12,144 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - 
2018-01-03 22:12:12,145 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - 
2018-01-03 22:12:12,144 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - 
2018-01-03 22:12:12,145 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - 
2018-01-03 22:12:12,144 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - 
2018-01-03 22:12:12,145 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - @930981891 wrapping com.mysql.jdbc.JDBC4Connection@6d8a1a40]>
2018-01-03 22:12:12,145 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - @930981891 wrapping com.mysql.jdbc.JDBC4Connection@6d8a1a40]>
2018-01-03 22:12:12,145 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - 
2018-01-03 22:12:12,145 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - 
2018-01-03 22:12:12,145 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - 
2018-01-03 22:12:12,145 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - 
2018-01-03 22:12:12,145 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - 
2018-01-03 22:12:12,145 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - 
2018-01-03 22:12:12,145 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - 
2018-01-03 22:12:12,145 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - 
2018-01-03 22:12:12,145 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - @1838470215 wrapping com.mysql.jdbc.JDBC4Connection@2cb7107b]>
2018-01-03 22:12:12,145 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - 
2018-01-03 22:12:12,145 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - 
2018-01-03 22:12:12,145 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - 
2018-01-03 22:12:12,145 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - 
2018-01-03 22:12:12,145 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - 
2018-01-03 22:12:12,146 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - @1092608611 wrapping com.mysql.jdbc.JDBC4Connection@615fb0b7]>
2018-01-03 22:12:12,146 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - @1092608611 wrapping com.mysql.jdbc.JDBC4Connection@615fb0b7]>
2018-01-03 22:12:12,146 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - @1974184653 wrapping com.mysql.jdbc.JDBC4Connection@5c2d12c4]>
2018-01-03 22:12:12,146 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - @1974184653 wrapping com.mysql.jdbc.JDBC4Connection@5c2d12c4]>
2018-01-03 22:12:12,146 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - 
2018-01-03 22:12:12,146 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - 
2018-01-03 22:12:12,146 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - 
2018-01-03 22:12:12,146 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - 
2018-01-03 22:12:12,146 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - 
2018-01-03 22:12:12,146 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - 
2018-01-03 22:12:12,145 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - 
2018-01-03 22:12:12,145 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - @1838470215 wrapping com.mysql.jdbc.JDBC4Connection@2cb7107b]>
2018-01-03 22:12:12,146 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - 
2018-01-03 22:12:12,146 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - 
2018-01-03 22:12:12,146 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - 
2018-01-03 22:12:12,146 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - 
2018-01-03 22:12:12,146 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - 
2018-01-03 22:12:12,146 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - 
2018-01-03 22:12:12,209 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - @930981891 wrapping com.mysql.jdbc.JDBC4Connection@6d8a1a40] after transaction>
2018-01-03 22:12:12,209 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - @930981891 wrapping com.mysql.jdbc.JDBC4Connection@6d8a1a40] after transaction>
2018-01-03 22:12:12,219 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - @1974184653 wrapping com.mysql.jdbc.JDBC4Connection@5c2d12c4] after transaction>
2018-01-03 22:12:12,219 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - @1974184653 wrapping com.mysql.jdbc.JDBC4Connection@5c2d12c4] after transaction>
2018-01-03 22:12:12,223 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - @1092608611 wrapping com.mysql.jdbc.JDBC4Connection@615fb0b7] after transaction>
2018-01-03 22:12:12,223 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - @1092608611 wrapping com.mysql.jdbc.JDBC4Connection@615fb0b7] after transaction>
2018-01-03 22:12:12,225 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - @1838470215 wrapping com.mysql.jdbc.JDBC4Connection@2cb7107b] after transaction>
2018-01-03 22:12:12,225 DEBUG [org.springframework.jdbc.datasource.DataSourceTransactionManager] - @1838470215 wrapping com.mysql.jdbc.JDBC4Connection@2cb7107b] after transaction>

좋은 웹페이지 즐겨찾기