Spring Jersey Mybatis Aop 트 랜 잭 션 실효 솔 루 션 SpringManaged Transaction 은 Spring 에 의 해 관리 되 지 않 습 니 다.
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>
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Jersey가 보이지 않는 예외를 기록해 주세요.Jersey에서 내부 오류가 발생하면 상태 500에서 오류 메시지와 함께 응답이 반환됩니다. 응답에 자세한 오류 메시지가 없습니다! 서버 로그에도 정보가 없습니다! 이런 움직임에는 500개의 리베이트가 있을 수 있고...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.