문제

얼마 전 나는 사용한 응용 프로그램을 썼습니다 봄 AOP 트랜잭션이 어떤 방법을 정의하기 위해. 나는 지금 이것이 얼마나 좋은 아이디어인지에 대한 두 번째 생각을하고 있습니다. 사소한 리팩터 (변경 방법 서명 등) 후 몇 번이나 타격을 받았으며, 실제로 무언가 잘못되기 전까지는 명백하지 않습니다 (그리고 논리적으로 일관성이없는 데이터베이스가 있습니다).

그래서 나는 몇 가지에 관심이 있습니다.

  1. 다른 사람들이 명시 적 거래 관리로 되돌리기로 결정했습니다 (예 : @Transactional 주석)?
  2. 빌드 프로세스의 일부로 사용할 수있는 유용한 도구가 있습니까?
  3. 사람들이 AOP를 사용하여 거래를 관리하는 경우, 내가 한 실수를 피하기 위해 어떤 단계를 밟고 있습니까?

나는 당신이 장식 된 방법을 탐색 할 수 있고 Spring을 리팩터링 할 수있는 Intellij 아이디어를 사용하고 있습니다. XML 메소드 이름 변경과 함께 구성하지만 항상 충분하지는 않습니다 (잘못된 위치에있는 메소드에 매개 변수를 추가하면 측면이 발사되는지 여부에 영향을 줄 수 있습니다).

도움이 되었습니까?

해결책

나는 현재 내가 작업하는 두 개의 Java 프로젝트에서 선언 트랜잭션 관리를 사용하고 있으며 트랜잭션 범위가 필요한 방법을 지정하고 있습니다. @Transactional 주석. 제 생각에는 유연성과 견고성이 잘 혼합되어 있습니다. 간단한 텍스트 검색을 통해 트랜잭션 동작을 갖는 방법을 볼 수 있고 필요한 경우 손으로 격리 및 전파 속성을 조정할 수 있으며 추가 타이핑량은 실질적으로 과실입니다. .

이러한 프로젝트 중 하나에서는 측면을 통해 보안/로깅이 구현되어 있으며 방법을 바꾸거나 서명을 변경할 때 때때로 동일한 장애물을 우연히 발견했습니다. 최악의 경우 사용자 액세스 계약에 대한 로깅 데이터를 잃어 버렸고 한 번의 릴리스에서 일부 사용자 역할은 모든 응용 프로그램 기능에 액세스 할 수 없었습니다. 중요하지는 않지만 데이터베이스 트랜잭션이 진행되는 한 그만한 가치가 없다고 생각합니다. @Transactional 자신을 물었다. 봄은 어쨌든 어려운 부분을합니다.

다른 팁

(1)과 관련하여 : @Transactonal이 지난 몇 년 동안 수행 된 모든 프로젝트에서보다 실용적인 솔루션을 발견했습니다. 그러나 매우 구체적인 경우에는 @transaction이 단일 트랜잭션 관리자에 연결되어 있기 때문에 Spring AOP를 사용하여 둘 이상의 JDBC Connection / TransactionManager를 사용할 수 있어야했습니다.

(2)와 관련하여 : 혼합 시나리오에서, 나는 클로르가 깨진 코드를 찾기 위해 많은 자동 테스트를 수행한다고 말했습니다. Spring의 AbstractTransactionAljunit4SpringContextTests / AbstractTransactionAltestngspringContextTests를 사용하여 테스트를 작성합니다. 지금까지 매우 효과적인 솔루션이었습니다.

나는 더 순수한 경향이 있지만 데이터베이스 자체 내부의 간단한 자동 커밋을 넘어서 모든 트랜잭션 관리를 유지하려고 노력합니다. 대부분의 데이터베이스는 트랜잭션 관리를 처리하는 데 적합합니다. 결국 데이터베이스가해야 할 일의 주요 구성 요소 중 하나입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top