web-dev-qa-db-fra.com

Exécution d'une application MVC utilisant Spring Boot + Hibernate + MySql

Je suis nouveau dans l'environnement printanier. J'essayais de développer une application MVC de base en utilisant SpringBoot avec Hibernate en tant qu'ORM et MYSQL en tant que base de données. J'ai rencontré beaucoup de problèmes lors de la configuration des dépendances et des configurations. À l’heure actuelle, j’ai été frappé par l’erreur suivante et j’ai été incapable de trouver le moyen de la surmonter.

org.springframework.beans.factory.BeanCreationException: Cannot determine embedded database driver class for database type NONE. If you want an embedded database please put a supported one on the classpath.

Ceci est la configuration que j'ai dans ma demande. Il n'a pas de pages de couche de service et jsp pour éviter l'encombrement

BASE DE DONNÉES:

MySql - Une base de données appelée Utilisateurs est déjà présente et contient un tableau appelé Utilisateurs avec une liste exemple d'utilisateurs.

User.Java (Modèle)

@Entity
@Table(name = "Users")
public class User {

    @Id
    @GeneratedValue
    public String id;

    public String username;

    public String firstname;

    public String lastname;

    public String password;
}

UserRepository:

@Repository
@Table(name = "Users")
public interface UserRepository extends JpaRepository<User, String> {
}

UserController:

@RestController
public class UserController {

    private UserRepository userRepository;

    @Autowired
    public UserController(UserRepository userRepository)
    {
        this.userRepository = userRepository;
    }

    @RequestMapping("user")
    public void getUser(@RequestParam("id") String id) {
         User user = userRepository.findOne(id);
    }

}  

Application.properties:

serveur.port: 9000

spring.datasource.url: jdbc: mysql: // localhost/Users

spring.datasource.driverClassName: com.mysql.jdbc.Driver

spring.datasource.username: root

spring.datasource.password:

POM.xml

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.1.3.RELEASE</version>
</parent>

<dependencies>

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

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-entitymanager</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <!-- HIBERNATE -->

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>4.3.0.Final</version>
    </dependency>

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>4.3.0.Final</version>
        <scope>runtime</scope>
    </dependency>

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <optional>true</optional>
    </dependency>

    <dependency>
        <groupId>org.hibernate.javax.persistence</groupId>
        <artifactId>hibernate-jpa-2.0-api</artifactId>
        <optional>true</optional>
    </dependency>

    <!-- Spring ORM, works with Hibernate -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-orm</artifactId>
    </dependency>

    <!-- MYSQL -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-Java</artifactId>
    </dependency>

</dependencies>

EDIT: Ajouter la classe principale

CLASSE PRINCIPALE

@ComponentScan
@Configuration
@EnableAutoConfiguration
public class ApplicationStart {
    public static void main(String[] args)
    {
        SpringApplication.run(ApplicationStart.class, args);
    }
}

Ceci est la configuration actuelle de mon application. Je ne semble même pas savoir où chercher les erreurs et les tutoriels sur Internet n'ont pas aidé ma cause. Donc, toute aide sur la façon de résoudre l'exception est très appréciée.

Veuillez commenter si plus d'informations sont requises.

Merci- 

11
Balasubramanian

Assurez-vous que votre application.properties se trouve dans l’un des emplacements pris en charge

  1. Un sous-répertoire/config du répertoire en cours.
  2. Le répertoire courant
  3. Un paquet classpath/config
  4. La racine du chemin de classe

La liste est triée par ordre de priorité (les emplacements plus élevés dans la liste remplacent les éléments inférieurs).

Bien que la séparation de vos paires clé/valeur dans un fichier de propriétés avec un : devrait fonctionner, je vous suggère de vous en tenir au séparateur = plus généralement utilisé. 

Votre pom contient de l'encombrement inutile que je vous suggère de déplacer. Vous ne devriez avoir besoin que de la dépendance sur le mysql-connector-Java tout le reste est encombré (les autres dépendances sont fournies par les projets de démarrage dont vous dépendez).

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

    <!-- MYSQL -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-Java</artifactId>
    </dependency>
</dependencies>

Celles-ci doivent contenir tout ce dont vous avez besoin, les versions et les dépendances transitives sont gérées par le fichier spring-boot-dependency pom.xml. (Le grand-parent du parent starter).

Lors de l'utilisation de l'annotation @EnableAutoConfiguration , la classe avec l'annotation sera également utilisée pour déterminer à partir de quel paquet lancer l'analyse. En général, vous mettrez cette annotation sur votre classe de départ. Il est conseillé de placer cette classe d'application dans un package de niveau supérieur (c'est-à-dire your.package.application.StarterClass), tous les autres packages doivent être des sous-packages de ce package. De cette façon, toutes les classes seront automatiquement détectées. 

Si cela n’est pas possible, vous devrez peut-être ajouter un @ComponentScan supplémentaire pour spécifier un package de base à partir duquel commencer l’analyse et un @EntityScan pour spécifier le ou les packages qui contiennent vos entités.

14
M. Deinum

J'étais également confronté au même problème mais la cause était très différente, j'ai essayé tout ce qui est mentionné ci-dessus dans toutes les réponses prenant 2 heures. Mais finalement, j'ai appris que le nom de propriété de mon fichier 'Application.properties' est démarré avec une majuscule 'A'. ça devrait être petit 'A'. Alors s'il vous plaît garder cela en considération aussi.

0
Vikash