예, 개인 메소드에서 @Transactional을 사용할 수는 있지만 다른 사람들이 언급했듯이 즉시 사용할 수는 없습니다. AspectJ를 사용해야합니다. 작동 방법을 알아내는 데 시간이 걸렸습니다. 결과를 공유하겠습니다.
로드 타임 직조 대신 컴파일 타임 직조를 사용하기로 결정했습니다. 왜냐하면 그것이 전반적으로 더 나은 옵션이라고 생각하기 때문입니다. 또한 Java 8을 사용하고 있으므로 일부 매개 변수를 조정해야 할 수도 있습니다.
먼저 aspectjrt에 대한 종속성을 추가하십시오.
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.8.8</version>
</dependency>
그런 다음 AspectJ 플러그인을 추가하여 Maven에서 실제 바이트 코드 직조를 수행하십시오 (최소한의 예는 아님).
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.8</version>
<configuration>
<complianceLevel>1.8</complianceLevel>
<source>1.8</source>
<target>1.8</target>
<aspectLibraries>
<aspectLibrary>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</aspectLibrary>
</aspectLibraries>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
</plugin>
마지막으로 이것을 구성 클래스에 추가하십시오.
@EnableTransactionManagement(mode = AdviceMode.ASPECTJ)
이제 개인 메소드에서 @Transactional을 사용할 수 있습니다.
이 접근 방식의 한 가지주의 사항 : Eclipse를 통해 앱을 실행하는 경우 작동하지 않을 수있는 경우 AspectJ를 인식하도록 IDE를 구성해야합니다. 위생 검사로 직접 Maven 빌드에 대해 테스트하십시오.