Oui, il est possible d'utiliser @Transactional sur des méthodes privées, mais comme d'autres l'ont mentionné, cela ne marchera pas. Vous devez utiliser AspectJ. Il m'a fallu du temps pour comprendre comment le faire fonctionner. Je partagerai mes résultats. J'ai choisi d'utiliser le tissage à la compilation au lieu du tissage à temps de chargement parce que je pense que c'est une meilleure option globale. En outre, j'utilise Java 8, vous devrez peut-être ajuster certains paramètres.
D'abord, ajoutez la dépendance pour aspectjrt.
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.8.8</version>
</dependency>
Ensuite, ajoutez le plugin AspectJ pour faire le tissage bytecode réelle Maven (ce ne peut pas être un exemple minimal).
<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>
Enfin ajouter à votre classe de configuration
@EnableTransactionManagement(mode = AdviceMode.ASPECTJ)
Maintenant, vous devriez être en mesure d'utiliser @Transactional sur les méthodes privées. Une mise en garde à cette approche: Vous devrez configurer votre IDE pour être conscient de AspectJ sinon, si vous exécutez l'application via Eclipse par exemple, il peut ne pas fonctionner. Assurez-vous de tester par rapport à une construction Maven directe comme une vérification de santé mentale.
Êtes-vous sûr de cela? Je ne m'attendrais pas à ce que cela fasse une différence. – willcodejavaforfood
Cela fonctionnera avec mode = "aspectj" cependant. – waxwing
@willcodejavaforfood: Voir la citation – skaffman