Suche…


Einführung

Wir wissen, dass Spring-Boot standardmäßig mit der H2-Datenbank läuft. In diesem Artikel erfahren Sie, wie Sie die Standardkonfiguration an die MySQL-Datenbank anpassen können.

Bemerkungen

Stellen Sie als Voraussetzung sicher, dass MySQL bereits auf Port 3306 ausgeführt wird und Ihre Datenbank erstellt wurde.

Spring-Boot-Beispiel mit MySQL

Wir folgen dem offiziellen Leitfaden für Spring-Boot und Spring-Data-jpa . Wir werden die Anwendung mit Gradle erstellen.

  1. Erstellen Sie die Gradle Build-Datei

    build.gradle

    buildscript {
        repositories {
            mavenCentral()
        }
        dependencies {
            classpath("org.springframework.boot:spring-boot-gradle-plugin:1.4.3.RELEASE")
        }
    }
    
    apply plugin: 'java'
    apply plugin: 'eclipse'
    apply plugin: 'idea'
    apply plugin: 'org.springframework.boot'
    
    jar {
        baseName = 'gs-accessing-data-jpa'
        version =  '0.1.0'
    }
    
    repositories {
        mavenCentral()
        maven { url "https://repository.jboss.org/nexus/content/repositories/releases" }
    }
    
    sourceCompatibility = 1.8
    targetCompatibility = 1.8
    
    dependencies {
        compile("org.springframework.boot:spring-boot-starter-data-jpa")
        runtime('mysql:mysql-connector-java')
        testCompile("junit:junit")
    }
    
  1. Erstellen Sie die Kundenentität

    src / main / java / hallo / Customer.java

    @Entity
    public class Customer {
    
        @Id
        @GeneratedValue(strategy=GenerationType.AUTO)
        private Long id;
        private String firstName;
        private String lastName;
    
        protected Customer() {}
    
        public Customer(String firstName, String lastName) {
            this.firstName = firstName;
            this.lastName = lastName;
        }
    
        @Override
        public String toString() {
            return String.format(
                    "Customer[id=%d, firstName='%s', lastName='%s']",
                    id, firstName, lastName);
        }
    }
    
  1. Erstellen Sie Repositorys

    src / main / java / hallo / CustomerRepository.java

    import java.util.List;
    import org.springframework.data.repository.CrudRepository;
    
    public interface CustomerRepository extends CrudRepository<Customer, Long> {
        List<Customer> findByLastName(String lastName);
    }
    
  2. Erstellen Sie die Datei application.properties

    ################### DataSource Configuration ##########################
    jdbc.driverClassName=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/your_database_name
    jdbc.username=username
    jdbc.password=password
    
    init-db=false
    
    ################### Hibernate Configuration ##########################
    
    hibernate.dialect=org.hibernate.dialect.MySQLDialect
    hibernate.show_sql=true
    hibernate.hbm2ddl.auto=update
    
  3. Erstellen Sie die PersistenceConfig.java-Datei

In Schritt 5 definieren wir, wie die Datenquelle geladen wird und wie sich unsere Anwendung mit MySQL verbindet. Das obige Snippet ist die minimale Konfiguration, die wir benötigen, um eine Verbindung zu MySQL herzustellen. Hier stellen wir zwei Bohnen zur Verfügung:

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages="hello")
public class PersistenceConfig 
{
    @Autowired
    private Environment env;
 
    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory()
    {
        LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
 
        HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        vendorAdapter.setGenerateDdl(Boolean.TRUE);
        vendorAdapter.setShowSql(Boolean.TRUE);
 
        factory.setDataSource(dataSource());
        factory.setJpaVendorAdapter(vendorAdapter);
        factory.setPackagesToScan("hello");
 
        Properties jpaProperties = new Properties();
        jpaProperties.put("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto"));
        factory.setJpaProperties(jpaProperties);
 
        factory.afterPropertiesSet();
        factory.setLoadTimeWeaver(new InstrumentationLoadTimeWeaver());
        return factory;
    }
     
    @Bean
    public DataSource dataSource()
    {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName(env.getProperty("jdbc.driverClassName"));
        dataSource.setUrl(env.getProperty("jdbc.url"));
        dataSource.setUsername(env.getProperty("jdbc.username"));
        dataSource.setPassword(env.getProperty("jdbc.password"));
        return dataSource;
    }
      
}
  • LocalContainerEntityManagerFactoryBean Dies gibt uns einen Überblick über die EntityManagerFactory-Konfigurationen und ermöglicht Anpassungen. Es erlaubt uns auch, den PersistenceContext in unsere Komponenten wie folgt einzubringen:
@PersistenceContext
private EntityManager em;
  • DataSource Hier geben wir eine Instanz der DriverManagerDataSource . Es ist eine einfache Implementierung der Standard-JDBC-DataSource-Schnittstelle, die einen einfachen alten JDBC-Treiber über Bean-Eigenschaften konfiguriert und für jeden getConnection-Aufruf eine neue Verbindung zurückgibt. Beachten Sie, dass ich empfehle, dies strikt zu Testzwecken zu verwenden, da es bessere Alternativen wie BasicDataSource gibt. Weitere Einzelheiten finden Sie hier
  1. Erstellen Sie eine Anwendungsklasse

    src / main / java / hallo / Anwendung.java

     @SpringBootApplication
     public class Application {
    
         private static final Logger log = LoggerFactory.getLogger(Application.class);
     
         @Autowired
         private CustomerRepository repository;
     
         public static void main(String[] args) {
             SpringApplication.run(TestCoreApplication.class, args);
         }
     
         @Bean
         public CommandLineRunner demo() {
             return (args) -> {
                 // save a couple of customers
                 repository.save(new Customer("Jack", "Bauer"));
                 repository.save(new Customer("Chloe", "O'Brian"));
                 repository.save(new Customer("Kim", "Bauer"));
                 repository.save(new Customer("David", "Palmer"));
                 repository.save(new Customer("Michelle", "Dessler"));
     
                 // fetch all customers
                 log.info("Customers found with findAll():");
                 log.info("-------------------------------");
                 for (Customer customer : repository.findAll()) {
                     log.info(customer.toString());
                 }
                 log.info("");
     
                 // fetch an individual customer by ID
                 Customer customer = repository.findOne(1L);
                 log.info("Customer found with findOne(1L):");
                 log.info("--------------------------------");
                 log.info(customer.toString());
                 log.info("");
     
                 // fetch customers by last name
                 log.info("Customer found with findByLastName('Bauer'):");
                 log.info("--------------------------------------------");
                 for (Customer bauer : repository.findByLastName("Bauer")) {
                     log.info(bauer.toString());
             }
             log.info("");
         };
     }
    

    }

  2. Anwendung ausführen

Wenn Sie eine IDE wie STS verwenden , können Sie einfach mit der rechten Maustaste auf Ihr Projekt klicken -> Ausführen als -> Gradle (STS) Build ... Geben Sie in der Aufgabenliste bootRun und Ausführen ein.

Wenn Sie Gradle in der Befehlszeile verwenden , können Sie die Anwendung einfach wie folgt ausführen:

./gradlew bootRun

Sie sollten so etwas sehen:

== Customers found with findAll():
Customer[id=1, firstName='Jack', lastName='Bauer']
Customer[id=2, firstName='Chloe', lastName='O'Brian']
Customer[id=3, firstName='Kim', lastName='Bauer']
Customer[id=4, firstName='David', lastName='Palmer']
Customer[id=5, firstName='Michelle', lastName='Dessler']

== Customer found with findOne(1L):
Customer[id=1, firstName='Jack', lastName='Bauer']

== Customer found with findByLastName('Bauer'):
Customer[id=1, firstName='Jack', lastName='Bauer']
Customer[id=3, firstName='Kim', lastName='Bauer']


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow