2016-04-09 13 views
0

Ich lese mehrere ähnliche Fragen und Antworten zu autowire und BeanCreationException und es scheint, dass die Hauptquelle des Problems ist in der Regel ComponentScan Annotation und der Projektbaum.Spring Boot, Autowire Mongo Repo generiert BeanCreationException

Aber ich kann immer noch nicht verstehen, warum meine Anwendung diese Ausnahme auslöst. Hier ist die pom.xml

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.test.game</groupId> 
    <artifactId>gameP</artifactId> 
    <version>0.1.0</version> 
    <packaging>jar</packaging> 
    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.3.3.RELEASE</version> 
    </parent> 
    <dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.12</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.mockito</groupId> 
      <artifactId>mockito-all</artifactId> 
      <version>2.0.2-beta</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-actuator</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-databind</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-data-mongodb</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.commons</groupId> 
      <artifactId>commons-lang3</artifactId> 
      <version>3.0</version> 
     </dependency> 
    </dependencies> 
    <properties> 
     <java.version>1.8</java.version> 
    </properties> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

Die Anwendung Läufer mit der SpringBootApplication Anmerkung

package core.main.exec; 

@SpringBootApplication 
@Configuration 
@ComponentScan("core.main") 
public class ApplicationRunner implements CommandLineRunner { 
    @Autowired 
    GameEntityRepository repo; 

    public static void main(String[] args) { 
     ApplicationContext ctx = SpringApplication.run(ApplicationRunner.class, args); 
    } 

    @Override 
    public void run(String... args) throws Exception { 
     Game newGame = new Game(); 
     newGame.setId(1213123L); 
     newGame.setName("halo 123"); 
     newGame.setDeck("Duck"); 
     newGame.setMedium_url("url"); 
     repo.save(newGame); 
    } 
} 

Und das Repository definiert ist als Gebrüll

package core.main.controller; 

public interface GameEntityRepository extends MongoRepository { 
} 

Und die Mongo Einheit Game benannt ist als unter

package core.main.mongoentity; 

@Document 
public class Game { 
    @Id 
    private Long id; 
    private String deck; 
    private String name; 
    private String medium_url; 

    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

    public String getDeck() { 
     return deck; 
    } 

    public void setDeck(String deck) { 
     this.deck = deck; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getMedium_url() { 
     return medium_url; 
    } 

    public void setMedium_url(String medium_url) { 
     this.medium_url = medium_url; 
    } 
} 

Sobald ich die Anwendung ausführen bekomme ich ein BeanCreationException mit der folgenden Fehlermeldung

kann nicht autowire Feld: core.main.controller.GameEntityRepository core.main.exec.ApplicationRunner.repo

Antwort

0

ich denke, dieser Fehler durch Paket-Scanning verursacht

refactor diese

@SpringBootApplication 
@Configuration 
@ComponentScan("core.main") 
public class ApplicationRunner implements CommandLineRunner {} 

wie diese

@SpringBootApplication 
@EntityScan({"core.main.mongoentity"}) 
@EnableJpaRepositories(basePackages = {"core.main.controller"}) 
public class ApplicationRunner implements CommandLineRunner {} 

und nicht auch @ComponentScan("core.main") verwenden, da @SpringBootApplication die Attribute @EnableAutoConfiguration und @ComponentScan

und auch Ihr Repository falsche Sie Einheit für MongoRepository

Refactoring Ihr Repository

erklären bietet nicht
public interface GameEntityRepository extends MongoRepository {} 

wie diese

public interface GameEntityRepository extends MongoRepository<Game,Long>{} 

und diese Abhängigkeit in pom.xml hinzufügen

 <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter</artifactId> 
     </dependency> 
+0

Ich bin nicht sicher, warum Sie die @EnableJpaRepositories Anmerkung hinzugefügt. Aber wenn ich nur den Entity-Scan hinzufüge, bekomme ich einen neuen Fehler, der besagt, dass Fehler beim Erstellen von Bean mit dem Namen 'embeddedServletContainerCustomizerBeanPostProcessor' aufgetreten ist. – Salman9

+0

dieser Kater Fehler Ihr jetzt Ihre Bohnen erstellt erfolgreich –

+0

Es gibt keine Tomcat Abhängigkeit in der Pom. vielleicht vermisse ich da etwas ?! – Salman9

Verwandte Themen