Spring Data JPA - Plusieurs EnableJpaRepositories
Mon application dispose de plusieurs sources de données , j'ai donc créé deux données de configuration de la source de classes à partir de cette URL .
Mais lors de l'exécution du printemps de démarrage de l'application obtiens l'erreur
Description:
Champ userDataRepo dans com.cavion.services.UserDataService requis un bean nommé "entityManagerFactory" qui n'a pas pu être trouvé.
Action:
Envisager de définir un bean nommé "entityManagerFactory" dans votre configuration.
De cette Question sur StackOverflow m'a aidé à comprendre la question.j'ai besoin de spécifier le entityManagerFactoryRef sur mon JPA dépôts .
Mais j'ai beaucoup de classes du référentiel certains d'entre eux utilise l'Entitymanager " A "et certains d'entre eux utilise des "B". mon printemps application de démarrage de la classe, c'est comme cela
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class,
DataSourceTransactionManagerAutoConfiguration.class })
@EnableTransactionManagement
@EntityScan("com.info.entity")
@ComponentScan({"com.info.services","com.info.restcontroller"})
@EnableJpaRepositories("com.info.repositories")
public class CavionApplication {
public static void main(String[] args) {
SpringApplication.run(CavionApplication.class, args);
}
@Bean
public CommandLineRunner commandLineRunner(ApplicationContext ctx) {
return args -> {
System.out.println("Let's inspect the beans provided by Spring Boot:");
String[] beanNames = ctx.getBeanDefinitionNames();
Arrays.sort(beanNames);
for (String beanName : beanNames) {
System.out.println(beanName);
}
};
}}
J'ai donné le EnableJpaRepositories sur le ressort de démarrage de classe , alors comment puis-je configurer plusieurs EnableJpaRepositories afin que je puisse configurer plusieurs entityManagerFactory ?
S'il vous plaît suggérer la meilleure façon pour l'installation de sources multiples de données .
OriginalL'auteur Ansar Samad | 2017-08-13
Vous devez vous connecter pour publier un commentaire.
Afin de laisser le printemps sait ce
DataSource
est liée à ce queRepository
vous devez définir à l'@EnableJpaRepositories
annotation. Supposons que nous avons deux entités, laServers
entité et laDomains
entité et chacun a ses propres Pensions de chaque Référentiel a son propre JpaDataSource de configuration.1. Groupe de tous les référentiels basés sur la Source de Données à laquelle elles sont reliées. Par exemple
Référentiel pour
Domains
entités (forfait:org.springdemo.multiple.datasources.repository.domains
):Référentiel pour
Servers
entités (forfait:org.springdemo.multiple.datasources.repository.servers
)2. Pour chaque JPA Données Soruce vous avez besoin de définir une configuration, dans cet exemple, je vous montrer comment configurer deux différentes Sources de données
Domains
Configuration Jpa: la relation entre la Source de Données et le référentiel est défini dans lebasePackages
valeur, c'est pourquoi il est nécessaire de regrouper les dépôts de paquets différents selon que l'entité gestionnaire de chaque repo à utiliser.Servers
Configuration de Source de données: comme vous pouvez le voir le basePackages valeur est le nom du package de laServers
Référentiel , et aussi les valeurs deentityManagerFactoryRef
ettransactionManagerRef
sont différentes afin de laisser le printemps séparés chaque entityManager.3. Définir une source de données primaires
Afin d'éviter le message d'erreur:
Parameter 0 of constructor in org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration required a single bean, but 2 were found:
juste mis un de la source de données que @Primaire, dans cet exemple, sélectionnez laServers
source de données primaires:Si vous avez besoin de plus d'informations, veuillez voir l'exemple complet pour chaque configuration:
Servers
Configuration JPADomains
Configuration JPAAfin de séparer chaque source de données, j'ai mis la configuration dans le
application.properties
fichier, comme ceci:Si vous avez besoin de plus d'informations, veuillez consulter les documents suivants:
Le printemps de la Documentation: howto-les deux sources de données
Un autre exemple de la façon de configurer deux bases de données différentes: github exemple
j'ai été en mesure de résoudre le problème ci-dessus, par la suppression de l'exclure de HibernateJpaAutoConfiguration de classe Principale . mais je reçois des nouvelles d'erreur lors de l'initialisation entitymanagers Description: Méthode requestMappingHandlerMapping dans org.springframework.de démarrage.auto-configurer.web.WebMvcAutoConfiguration$EnableWebMvcConfiguration requis un seul grain, mais 2 ont été trouvés: - ibDemoEntityManager: défini par la méthode 'getIBDemoEntityManager" dans IBDemoConfig - mwDemoEntityManager: défini par la méthode 'getServersEntityManager" dans MWDemoConfig
j'ai été en mesure de résoudre le problème en faisant de l'entitymanager d'une de la classe primaire
Ok, j'ai également ajouté que l'observation pour faire une de la source de données primaire.
Je reçois "et Non gérée du type' pour mes classes d'entité lors de l'exécution de la springboot projet. Des idées?
OriginalL'auteur Daniel C.