Je souhaite configurer Spring Boot avec MySQL et JPA. Pour cela je crée: Person
package domain;
import javax.persistence.*;
@Entity
@Table(name = "person")
public class Person {
@Id
@GeneratedValue
private Long id;
@Column(nullable = false)
private String firstName;
// setters and getters
}
PersonRepository
package repository;
import domain.Person;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.repository.CrudRepository;
public interface PersonRepository extends CrudRepository<Person, Long> {
Page<Person> findAll(Pageable pageable);
}
PersonController
package controller;
import domain.Person;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import repository.PersonRepository;
@Controller
public class PersonController {
@Autowired
private PersonRepository personRepository;
@RequestMapping("/")
@ResponseBody
public String test() {
Person person = new Person();
person.setFirstName("First");
person.setLastName("Test");
personRepository.save(person);
return "hello";
}
}
Début de la classe Exemple:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Example {
public static void main(String[] args) throws Exception {
SpringApplication.run(Example.class, args);
}
}
Et pour la configuration de la base de données, je crée application.properties
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.properties.hibernate.globally_quoted_identifiers=true
spring.datasource.url=jdbc:mysql://localhost/test_spring_boot
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driverClassName=com.mysql.jdbc.Driver
J'ai donc une structure de projet:
Mais par conséquent, j'ai des exceptions:
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to parse configuration class [Example]; nested exception is Java.io.FileNotFoundException: class path resource [org/springframework/security/config/annotation/authentication/configurers/GlobalAuthenticationConfigurerAdapter.class] cannot be opened because it does not exist
Par exemple, j'utilise: spring-boot-sample-data-jpa/pom.xml
J'ai créé un projet comme toi. La structure ressemble à ceci
Les cours sont simplement copiés depuis le vôtre.
J'ai changé le application.properties à ceci:
spring.datasource.url=jdbc:mysql://localhost/testproject
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update
Mais je pense que votre problème est dans votre 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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.1.RELEASE</version>
</parent>
<artifactId>spring-boot-sample-jpa</artifactId>
<name>Spring Boot JPA Sample</name>
<description>Spring Boot JPA Sample</description>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-Java</artifactId>
</dependency>
<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>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
Vérifiez ces fichiers pour les différences. J'espère que cela t'aides
Mise à jour 1: J'ai changé mon nom d'utilisateur. Le lien vers l'exemple est maintenant https://github.com/Yannic92/stackOverflowExamples/tree/master/SpringBoot/MySQL
Lorsque vous déplacez des classes dans des packages spécifiques tels que référentiel, contrôleur, domaine, le générique @SpringBootApplication
ne suffit pas.
Vous devrez spécifier le package de base pour l'analyse des composants
@ComponentScan("base_package")
Pour JPA
@EnableJpaRepositories(basePackages = "repository")
est également nécessaire, afin que les données de printemps sachent où chercher pour les interfaces de référentiel.
Dans la référence botte de printemps , il était écrit:
Lorsqu'une classe n'inclut pas de déclaration de package, elle est considérée comme appartenant au «package par défaut». L'utilisation du «package par défaut» est généralement déconseillée et doit être évitée. Cela peut poser des problèmes particuliers aux applications de démarrage Spring qui utilisent les annotations @ComponentScan, @EntityScan ou @SpringBootApplication, car toutes les classes de chaque fichier jar seront lues.
com
+- example
+- myproject
+- Application.Java
|
+- domain
| +- Customer.Java
| +- CustomerRepository.Java
|
+- service
| +- CustomerService.Java
|
+- web
+- CustomerController.Java
Dans vos cas. Vous devez ajouter scanBasePackages
dans le @SpringBootApplication
annotation.just like@SpringBootApplication(scanBasePackages={"domain","contorller"..})