2016-10-18 1 views
1

Je reçois une exception quand je commence ma demande, où le printemps se plaignent de UnsatisfiedDependencyException:printemps dépôt JPA pas la mise en œuvre/Autowiring malgré annotation @EnableJpaRepositories

Exception in thread "main" org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'applicationConfig': Unsatisfied dependency expressed through field 'controlRepository'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean found for dependency [com.oak.api.finance.repository.ControlRepository]: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:569) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) 

Ma demande est organisée dans ce format:

  1. Je déclare mes interfaces référentiel, avec les annotations appropriées printemps JPA:

    @RepositoryRestResource(collectionResourceRel = "exchange", path = "exchanges") 
    public interface ControlRepository extends PagingAndSortingRepository<Control, Long> { 
    } 
    
  2. I annotées la classe EntryPoint qui contient la méthode main

    @SpringBootApplication 
    @EntityScan(basePackages = {"com.oak.api.finance.model.dto"}) 
    @EnableJpaRepositories(basePackages = {"com.oak.api.finance.repository"}) 
    public class EntryPoint { 
        public static void main(String[] args) { 
         Logger logger = LogManager.getLogger(EntryPoint.class); 
         logger.info("Starting application"); 
    
         ApplicationContext ctx = new AnnotationConfigApplicationContext(ApplicationConfig.class); 
    //  SpringApplication.run(EntryPoint.class, args); 
    
         ctx.getBean(ApplicationServer.class).start(); 
        } 
    
  3. I utilisé @Autowired pour injecter mon dépôt dans ma config de ressort classe (Java) ApplicationConfig:

    @Autowired 
    private ControlRepository controlRepository; 
    @Autowired 
    private CompanyRepository companyRepository; 
    @Autowired 
    private SectorRepository sectorRepository; 
    

Essentiellement Je veux contrôler la dépendance sur Spring et la limiter à quelques paquets, (les dépôts, la config java, et le programme ent point de Ry - EntryPoint)

Je suppose que, en spécifiant @EnableJpaRepositories avec le paquet où se trouvent mes dépôts, le printemps créerait un proxy pour mon dépôt et instancier une instance de cela, et que le temps que j'appeler:

ApplicationContext ctx = new AnnotationConfigApplicationContext(ApplicationConfig.class) 

les instances de référentiels seraient présents dans les fèves et poole serait possible de les lier automatiquement dans mon ApplicationConfig contexte, puis de les injecter dans mon contrôleur.

Cela ne se produit manifestement pas, et Spring se plaint du manque de Bean à autowire, mais je ne suis pas sûr de ce qui me manque. Ci-dessous un aperçu de mes paquets: enter image description here Des idées?

+0

Dans quel paquet est la classe Control. Vous définissez l'analyse d'entité faire le modèle.dto qui me semble étrange. –

+0

La classe Control ainsi que le reste des classes Entity sont dans: com.oak.api.finance.model.dto, dto est où je mets toutes mes classes d'entité. – Charbel

+0

Ajouter SpringApplication.run (EntryPoint.class); après la journalisation et supprimez la partie ApplicationContext. Assurez-vous que votre classe ApplicationConfig est annotée avec @Configuration –

Répondre

1

Je suppose que vos dépôts ne sont pas analysés, de sorte que les beans ne sont pas créés. Pouvez-vous essayer de supprimer ces 2 annotations

@EntityScan(basePackages = {"com.oak.api.finance.model.dto"}) 
@EnableJpaRepositories(basePackages = {"com.oak.api.finance.repository"}) 

et ne garder que @SpringBootApplication. Si cela ne fonctionne pas, vous pourriez avoir besoin de vérifier la structure du package (si possible coller une capture d'écran ici)

Modifier 1

remplacer @SpringBootApplication avec

@Configuration 
@EnableAutoConfiguration 
@ComponentScan("com.oak") 

Edit2

utilisation

new SpringApplicationBuilder() 
     .sources(SpringBootApp.class) 
     .web(false) 
     .run(args); 

Ou utilisez CommandLineRunner après avoir modifié ComponentSc un chemin vers "com.oak" comme mh-dev a suggéré

+0

Malheureusement, cela n'a pas résolu le problème. J'essaye de mettre tout en github, si cela s'avère compliqué je vais essayer avec une capture d'écran. (Je pensais que c'était déjà sur github, mais on dirait que j'ai créé une branche locale - je ne sais pas comment mettre cela sur github, je verrai) – Charbel

+0

OK Je ne pouvais pas trier github maintenant, j'ai ajouté une capture d'écran – Charbel

+1

I pense que c'est le problème. http://stackoverflow.com/questions/33619532/configuration-using-annotation-springbootapplication –