Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

O SpringBoot não reconheceu meu CRUDRepository nem meu Entity.

Precisei declar com anotation os locais do repositório e JPA.

package br.com.alura.listavip.conf;

import javax.sql.DataSource;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.jdbc.datasource.DriverManagerDataSource;

import br.com.alura.listavip.controllers.HomeController;
import br.com.alura.listavip.models.Convidado;
import br.com.alura.listavip.repository.ConvidadoRepository;

@ComponentScan(basePackageClasses={HomeController.class})
@EnableJpaRepositories(basePackageClasses={ConvidadoRepository.class})
@EntityScan(basePackageClasses={Convidado.class})
@SpringBootApplication
public class AppWebConfiguration {

    public static void main(String[] args){
        SpringApplication.run(AppWebConfiguration.class, args);
    }

    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setUsername("root");
        dataSource.setPassword("cursoalura");
        dataSource.setUrl("jdbc:mysql://localhost:3306/listavip");
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        return dataSource;
    }

}

Existe outro jeito? Tenho certeza de seguir o passo a passo do professor e sem essas anotações não funciona!

7 respostas

Olá,

Nessa aula tem o zip com o projeto da aula 2.

Executei com sucesso esse projeto.

Lembre-se de verificar: 1) se o servidor mysql está no ar; 2) se o banco de dados existe; 3) se o usuário e senha do banco estão corretos.

Compare o seu projeto com o projeto dessa aula.

Para mim idem. Funcionou somente com as anotações

@ComponentScan(basePackageClasses={HomeController.class})
@EnableJpaRepositories(basePackageClasses={ConvidadoRepository.class})
@EntityScan(basePackageClasses={Convidado.class})

que o Silvio utilizou.

Olá,

Foi criado o BeanManager conforme citado na aula ?

Comparou o seu projeto com o projeto da aula ?

solução!

Acho que descobri o que aconteceu!

Eu criei a classe principal dentro de um pacote chamado config. (Como aprendi no curso de SpringI e SpringII). As classes ficaram todas dentro de um pacote:

br/com/alura/listavip/conf/Aplicacao.java

br/com/alura/listavip/daos/...

br/com/alura/listavip/controllers/...

Percebi que para o Spring Scannear automaticamente a classe Aplicação deve estar um nível acima das outras classes, então minha estrutura ficou:

br/com/alura/listavip/Aplicacao.java

br/com/alura/listavip/daos/...

br/com/alura/listavip/controllers/...

Perceba que a classe aplicação está na raiz de listavip.

Espero ter ajudado.

Abs;

Exatamente Silvio!

Movi a classe configuraçao de

br.com.alura.configuracao.listavip;

para

br.com.alura.listavip;

E tudo funciona perfeitamente agora sem ser necessario adicionar as annotations.

Obrigado!

Olá,

Vejam o seguinte, por favor:

Spring Boot Reference Guide 1.4.3.RELEASE, 14. Structuring your code :

14.Structuring your code

Spring Boot does not require any specific code layout to work, however, there are some best practices that help.

14.1 Using the “default” package

When a class doesn’t include a package declaration it is considered to be in the “default package”. The use of the “default package” is generally discouraged, and should be avoided. It can cause particular problems for Spring Boot applications that use @ComponentScan, @EntityScan or @SpringBootApplication annotations, since every class from every jar, will be read.

[Tip]

We recommend that you follow Java’s recommended package naming conventions and use a reversed domain name (for example, com.example.project).

14.2 Locating the main application class

We generally recommend that you locate your main application class in a root package above other classes. The @EnableAutoConfiguration annotation is often placed on your main class, and it implicitly defines a base “search package” for certain items. For example, if you are writing a JPA application, the package of the @EnableAutoConfiguration annotated class will be used to search for @Entity items.

Using a root package also allows the @ComponentScan annotation to be used without needing to specify a basePackage attribute. You can also use the @SpringBootApplication annotation if your main class is in the root package.

Here is a typical layout:

com
 +- example
     +- myproject
         +- Application.java
         |
         +- domain
         |   +- Customer.java
         |   +- CustomerRepository.java
         |
         +- service
         |   +- CustomerService.java
         |
         +- web
             +- CustomerController.java

Olá,

Sugiro que a minha informação anterior (em verdade, o trecho do guia de referência) seja incluída no curso de Spring Boot para facilitar para os próximos desenvolvedores que fizerem o curso.