Ich bin ein Frühlings-Noob und ich kämpfe mit ihm.Java Spring JPA Repository
Grundsätzlich vor meinem Server mit Frühling in Verbindung mit JPA entwickelt Start habe ich versucht, nur ein einfaches Beispiel zu starten, um zu diesem Rahmen zu gewöhnen. Es ist mir bereits gelungen, Spring mit einigen Frameworks wie Log4J, Swagger und anderen zu arbeiten. Jetzt versuche ich mit JPA zu arbeiten und es gibt einige Punkte, die ich herausfinden kann.
Ich habe ein paar Blogs gesehen, wie man damit entwickelt und aus allen Tausenden Optionen wähle ich mein Repository Interfece und extend Repository<T, ID>
.
package com.example.model;
@Entity
public class Person {
@Id
public Integer id;
public String name;
public Person(){}
}
package com.example.repository;
public interface PersonRepository extends Repository<Person, Integer> {
Collection<Person> findAll();
}
package com.example.controller;
@RestController
public class PersonController {
@Autowired
private PersonRepository repo;
@RequestMapping(value = "/persons", method = RequestMethod.GET)
public Collection<Person> getAll() {
return repo.findAll();
}
}
package com.example;
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
Und ich habe auch die Datei application.properties: Sie können meinen Code unten sehen
spring.datasource.platform=postgres
spring.datasource.url=jdbc:postgresql://localhost:5432/test_db
spring.datasource.username=test
spring.datasource.password=test
spring.datasource.driver-class-name=org.postgresql.Driver
Wenn ich den Server läuft ich die folgende Ausnahme erhalten setzen:
: Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'personController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.example.repository.PersonRepository com.example.controllers.PersonController.repo; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.example.repository.PersonRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations:
: Closing JPA EntityManagerFactory for persistence unit 'default'
: Stopping service Tomcat
: Application startup failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'personController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.example.repository.PersonRepository com.example.controllers.PersonController.repo; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.example.repository.PersonRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
Ich habe ein Github Repository erstellt, um den Code here zu teilen.
Jede Ahnung, was mache ich falsch?
Was sind die Pakete Ihrer Klassen? Ihr Repository wird nur automatisch erkannt, wenn es sich im gleichen oder in einem Unterpaket wie die App-Klasse befindet. – dunni
@dunni Ich habe nur zur Vereinfachung entfernt, aber hier sind sie: Paket com.example.controllers; Paket com.example.entities; Paket com.example.repository; Paket com.example; –
Angenommen, Sie haben alle Abhängigkeiten. In Ihrer App-Klasse können Sie dies unterhalb der @SpringBootApplication: @ComponentScan (basePackages = "com.example") setzen. Dann versuche es noch einmal. –