はい、プライベートメソッドで@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を使用できるようになります。
このアプローチの1つの注意点:AspectJを認識するようにIDEを構成する必要があります。そうでない場合、たとえばEclipse経由でアプリを実行する場合、機能しない可能性があります。健全性チェックとして、Mavenの直接ビルドに対してテストしてください。