TransactionSynchronizationManager.ActualTransactionActive()를 사용하는 것보다 Spring DB 트랜잭션이 활성 상태인지 탐지하는 더 나은 방법이 있습니까?
나는 지금 스프링에서 다시 사용하려고 하는 레거시 코드가 있습니다.이 코드는 다른 코드에 깊게 내포되어 있기 때문에 재설계하는 것은 실용적이지 않으며 많은 상황에서 호출되며, 그 중 일부만이 스프링을 통해 실행됩니다.제가 하고 싶은 일은 스프링 트랜잭션이 시작된 경우 스프링 트랜잭션을 사용하는 것이고, 그렇지 않은 경우 기존 (레거시) db 연결 메커니즘을 계속 사용하는 것입니다.우리의 첫번째 생각은 우리의 레거시 클래스를 콩으로 만들어서 주사를 사용하는 것이었습니다.TransactionPlatformManager, 하지만 그것은 우리 상황에 유리한 방법이 없는 것 같습니다.몇몇 조사에 따르면 봄에는 다음과 같은 수업이 있습니다.TransactionSynchronizationManager정적인 방법을 가지고 있는isActualTransactionActive(). 테스트 결과, 이 방법이 Spring 트랜잭션이 활성화되어 있는지 여부를 신뢰할 수 있는 감지 방법인 것으로 나타났습니다.
- 스프링 서비스를 통해 호출되는 경우
@Transactional주석, 거짓을 반환합니다. - 스프링 서비스를 통해 호출되는 경우
@Transactional, 그것은 사실로 돌아옵니다 - 기존 방식이라 불리는 나의 레거시 방식에서는 거짓을 반환합니다.
질문:트랜잭션이 활성화되어 있는지 더 잘 탐지할 수 있는 방법이 있습니까?
그것보다 더 좋은 방법은 없습니다.봄이 거래를 처리하기 위해 사용하는 유틸리티 방식입니다.코드 내에서 사용하는 것은 권장되지 않지만, 일부 특정한 경우에는 사용해야 합니다. 그래서 공개되는 것입니다.
엔티티 관리자/세션/연결을 사용하여 기존 트랜잭션이 있는지 확인하는 것도 방법이지만, 동기화 관리자를 선호합니다.
언급URL : https://stackoverflow.com/questions/7083095/is-there-a-better-way-of-detecting-if-a-spring-db-transaction-is-active-than-usi
'programing' 카테고리의 다른 글
| ASP의 루트 디렉터리를 가져오려면 어떻게 해야 합니까?NET 서버 애플리케이션? (0) | 2023.10.01 |
|---|---|
| mariadb 서버에서 .csv 파일 형식의 리눅스 서버로 데이터베이스 테이블 자동 내보내기 (0) | 2023.10.01 |
| 여러 조건을 가진 XPath (0) | 2023.10.01 |
| "true" 및 "false" 문자열을 부울에 입력합니다. (0) | 2023.10.01 |
| c에서 여러 문자열을 연결하는 더 나은 방법? (0) | 2023.10.01 |