Mon application est basée sur Spring Boot, Hibernate, MySQL en utilisant Spring Data JPA pour les assembler.
Le cas d'utilisation est d'utiliser le nœud de base de données esclave pour effectuer des opérations de lecture lourdes afin d'éviter que tout le trafic soit servi par le nœud mysql maître. Une façon d'y parvenir est d'avoir plusieurs gestionnaires d'entités pointant vers des sources de données distinctes (une vers le nœud maître et une autre vers le nœud esclave). Cette méthode a été très bien expliquée dans les questions et blogs de SO ci-dessous.
Spring Boot, Spring Data JPA avec plusieurs DataSources
https://scattercode.co.uk/2016/01/05/multiple-databases-with-spring-boot-and-spring-data-jpa/
Là où je suis bloqué, c'est de comprendre s'il existe un moyen d'injecter différents gestionnaires d'entités pour différents cas d'utilisation dans mon interface annotée de référentiel.
La seule façon de le faire est d'étendre le référentiel avec une implémentation personnalisée qui utilise un gestionnaire d'entité personnalisé annoté avec le contexte de persistance approprié comme ci-dessous.
public interface CustomerRepository extends JpaRepository<Customer, Integer>, MyCustomCustomerRepository{
}
public class MyCustomCustomerRepositoryImpl implements MyCustomCustomerRepository {
@PersistenceContext(unitName = "entityManagerFactoryTwo")
EntityManager entityManager;
}
Je voudrais éviter de faire cette mise en œuvre personnalisée. Toute aide pour résoudre ce cas d'utilisation (qui devrait être très courant) serait appréciée.
NOTE : Les entités sont les mêmes dans les deux bases de données, donc donner des paquets séparés pour l'analyse des entités et des solutions similaires pourrait ne pas fonctionner.