Spring Boot με βάση δεδομένων H2

1
Spring Boot με βάση δεδομένων H2

Σε αυτό το άρθρο, θα δούμε πώς να χρησιμοποιήσετε το Spring Boot με τη βάση δεδομένων H2. Όπως και άλλες βάσεις δεδομένων, υπάρχει πλήρης εγγενής υποστήριξη για αυτό στο οικοσύστημα Spring Boot.

Spring Boot με βάση δεδομένων H2

Η βάση δεδομένων H2 είναι ένα σχετικά νέο και ανοιχτού κώδικα, σχεσιακό σύστημα διαχείρισης βάσεων δεδομένων στη μνήμη που είναι γραμμένο σε Java. Όπως και άλλες βάσεις δεδομένων στη μνήμη, η βάση δεδομένων H2 βασίζεται στη μνήμη του συστήματος για τη φόρτωση και διατήρηση των δεδομένων, αντί για αποθήκευση φυσικού δίσκου. Είναι μια ενσωματωμένη βάση δεδομένων που μπορούμε να χρησιμοποιήσουμε στην εφαρμογή java μας ή να τρέξουμε σε λειτουργία πελάτη-διακομιστή. Οι βάσεις δεδομένων στη μνήμη είναι πολύ γρήγορες καθώς η πρόσβαση στα δεδομένα γίνεται από τη μνήμη του συστήματος και όχι από την αποθήκευση του δίσκου. Είναι ασταθή, δηλαδή σε περίπτωση επανεκκίνησης της εφαρμογής χάνονται όλα τα δεδομένα.

Μπορούμε να χρησιμοποιήσουμε βάσεις δεδομένων στη μνήμη όπως η H2 για POC και κατά τη φάση ανάπτυξης κατά την επανάληψη μέσω αλλαγών σχήματος χωρίς να κάνουμε αλλαγές σε πραγματικές μόνιμες βάσεις δεδομένων όπως η MYSQL. Μια άλλη περίπτωση χρήσης όπου χρησιμοποιείται το H2 είναι κατά τη δοκιμή μονάδας των εφαρμογών μας. Η βάση δεδομένων H2 δεν μπορεί να χρησιμοποιηθεί για εφαρμογή παραγωγής.

1. Διαμόρφωση βάσης δεδομένων H2 με Spring Boot

Για να χρησιμοποιήσουμε το Spring Boot με τη βάση δεδομένων H2, πρέπει να διαμορφώσουμε τη βάση δεδομένων H2 στην εφαρμογή μας. Η διαμόρφωση είναι αρκετά απλή εάν χρησιμοποιούμε Spring. Πρώτα πρέπει να προσθέσουμε την απαιτούμενη εξάρτηση για το H2 in pom.xml εάν χρησιμοποιείτε το maven ως εργαλείο κατασκευής. Αφού προστεθεί η απαιτούμενη εξάρτηση στο έργο, πρέπει να προσθέσουμε τις ακόλουθες ιδιότητες application.properties ή application.yaml αρχείο. Με αυτόν τον τρόπο, προσθέτοντας τις απαιτούμενες ιδιότητες στο αρχείο ιδιοτήτων, μπορούμε να συνδεθούμε σε οποιαδήποτε βάση δεδομένων. Ακολουθούν ορισμένες από τις ιδιότητες που είναι σημαντικές κατά τη ρύθμιση της βάσης δεδομένων H2 με το Sprig Boot.

  • URL πηγής δεδομένων: Για να δημιουργήσετε μια σύνδεση βάσης δεδομένων, Java’s Datasource Η διεπαφή χρησιμοποιεί μια διεύθυνση URL και ορισμένα διαπιστευτήρια. Στη διεύθυνση URL, πρέπει να παρέχουμε τα ονόματα της βάσης δεδομένων και του σχήματος στη μνήμη. Δεδομένου ότι χρησιμοποιούμε τη βάση δεδομένων H2,mem“ είναι το όνομα της βάσης δεδομένων στη μνήμη και „testdb είναι το όνομα του σχήματος, που παρέχεται από το H2 από προεπιλογή.
  • όνομα κατηγορίας οδηγού: Το H2 είναι μια βάση δεδομένων java και μπορούμε να αλληλεπιδράσουμε μαζί της χρησιμοποιώντας το JDBC. Για αυτό πρέπει πρώτα να καταχωρήσουμε το πρόγραμμα οδήγησης της βάσης δεδομένων JDBC. Εδώ παρέχουμε το όνομα της κλάσης του προγράμματος οδήγησης.
  • όνομα χρήστη: Από προεπιλογή, το όνομα χρήστη που παρέχεται είναι „sa‚. Μπορούμε να παρακάμψουμε αυτήν την τιμή ορίζοντας το κατάλληλο όνομα στο application.properties αρχείο.
  • Κωδικός πρόσβασης: Από προεπιλογή, ο κωδικός πρόσβασης που παρέχεται είναι κενός. Μπορούμε να παρακάμψουμε αυτήν την τιμή ορίζοντας τον κατάλληλο κωδικό πρόσβασης στο application.properties αρχείο.

2. Εξαρτήσεις

Για να χρησιμοποιήσουμε το Spring Boot με βάση δεδομένων H2, πρέπει να προσθέσουμε το απαιτούμενο H2 dependency.Scope που παρέχεται είναι ο χρόνος εκτέλεσης, καθώς πρόκειται να χρησιμοποιήσουμε το H2 κατά την εκτέλεση των δοκιμών μονάδων μας. Εάν χρησιμοποιούμε το maven ως εργαλείο κατασκευής, προσθέστε την παρακάτω εξάρτηση pom.xml.

<dependency>
   <groupId>com.h2database</groupId>
   <artifactId>h2</artifactId>
   <scope>runtime</scope>
</dependency>

Εναλλακτικά, μπορούμε να χρησιμοποιήσουμε το σενάριο gradle όπως παρακάτω:

dependencies {
    compile group: 'commons-collections', name: 'commons-collections', version: '3.2'
    testCompile group: 'junit', name: 'junit', version: '4.+'
    compile group: 'com.h2database', name: 'h2', version: '1.3.148'
}

3. Διαμόρφωση βάσης δεδομένων H2 με Spring Boot

Για να μπορέσουμε να συνδέσουμε την εφαρμογή μας σε μια βάση δεδομένων, πρέπει να προσθέσουμε παρακάτω τη διαμόρφωση. Από προεπιλογή, το Spring ρυθμίζει την εφαρμογή μας ώστε να συνδέεται σε μια βάση δεδομένων στη μνήμη όπως το H2 με προεπιλεγμένες τιμές για τον χρήστη ως „sa‚ και κενό κωδικό πρόσβασης. Μπορούμε να παρακάμψουμε αυτές τις τιμές στο application.properties ή application.yaml αρχείο.

spring.datasource.url=jdbc:h2:mem:javadevjournal 
spring.datasource.driverClassName=org.h2.Driver 
spring.datasource.username=sa 
spring.datasource.password=pass 
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

Εναλλακτικά, μπορούμε να χρησιμοποιήσουμε application.yaml αρχείο για τη διαμόρφωση:

spring: 
   datasource: 
      url: jdbc:h2:mem: javadevjournal
      username: sa 
      password: pass 
      driverClassName: org.h2.Driver 
   jpa: 
      spring.jpa.database-platform: org.hibernate.dialect.H2Dialect

Η βάση δεδομένων H2 υποστηρίζει δύο λειτουργίες επιμονής. Αποθήκευση σε μνήμη και βάση αρχείων. Η προσθήκη των παραπάνω ιδιοτήτων θα παρέχει μια υλοποίηση H2 στη μνήμη, η οποία είναι ασταθής, δηλαδή, τα δεδομένα θα χαθούν κατά την επανεκκίνηση της εφαρμογής.

Διαφημίσεις

ΕγώΕάν χρειαζόμαστε έναν χώρο αποθήκευσης που βασίζεται σε αρχεία, τότε μπορούμε να ενημερώσουμε το spring.datasource.url ιδιοκτησία στο application.properties ή application.yaml αρχείο.

spring.datasource.url=jdbc:h2:file:/data/filename

Μπορούμε επίσης να χρησιμοποιήσουμε το yaml διαμόρφωση για αυτό:

spring:
  datasource:
    url:  jdbc:h2:file:/data/filename

4. Χειρισμός λειτουργιών βάσης δεδομένων

Ας ρίξουμε μια ματιά σε ορισμένες λειτουργίες βάσης δεδομένων για την εφαρμογή Spring Boot with H2 Database. Εκτέλεση των λειτουργιών της βάσης δεδομένων όπως CRUD με το H2 σε ένα έργο εκκίνησης Spring είναι παρόμοιο με άλλες βάσεις δεδομένων SQL.

4.1. Αρχικοποίηση του DataSource

Για να χρησιμοποιήσουμε μια βάση δεδομένων όπως η MYSQL, πρέπει πρώτα να τις εγκαταστήσουμε, μετά να δημιουργήσουμε τα σχήματα και μετά να δημιουργήσουμε τους πίνακες και να συμπληρώσουμε δεδομένα. Όταν χρησιμοποιούμε μια βάση δεδομένων στη μνήμη, δεν χρειάζεται να εγκαταστήσουμε ξεχωριστά μια βάση δεδομένων. Η βάση δεδομένων και το σχήμα βρίσκονται στη μνήμη της εφαρμογής που εκτελούμε. Το σχήμα βάσης δεδομένων δημιουργείται κοιτάζοντας τη διαμόρφωση που παρέχεται στην εφαρμογή. Μπορούμε να παρέχουμε σενάρια SQL για την προετοιμασία της βάσης δεδομένων που μπορεί να περιέχει ερωτήματα δημιουργίας πίνακα και εισαγωγής σε πίνακα. Εάν έχουμε ένα έργο εκκίνησης άνοιξης και εξάρτηση JPA, τότε, κοιτάζοντας τις παρούσες οντότητες, θα δημιουργηθεί ολόκληρη η βάση δεδομένων κατά την εκκίνηση της εφαρμογής.

Για να συμπληρώσουμε τα δεδομένα σε πίνακες κατά την εκκίνηση της εφαρμογής, μπορούμε να προσθέσουμε data.sql αρχείο μέσα src/main/resources ντοσιέ. Από προεπιλογή, η Spring boot θα επιλέξει αυτόματα αυτό το αρχείο και θα το εκτελέσει ενάντια στην ενσωματωμένη παρουσία της βάσης δεδομένων H2. Μπορούμε να αλλάξουμε αυτήν την προεπιλεγμένη συμπεριφορά ορίζοντας spring.sql.init.mode προς την never.

INSERT INTO employee (id, name, salary) VALUES (1, 'Amy', 3500.0);
INSERT INTO employee (id, name, salary) VALUES (2, 'Jake', 4000.0);
INSERT INTO employee (id, name, salary) VALUES (3, 'Charles', 3000.0);
INSERT INTO employee (id, name, salary) VALUES (4, 'Terry', 5500.0);
INSERT INTO employee (id, name, salary) VALUES (5, 'Rosa', 5000.0);

4.2. Χρήση αδρανοποίησης

ο data.sql Η δέσμη ενεργειών εκτελείται πριν από την αρχικοποίηση αδρανοποίησης από προεπιλογή. Εφόσον αναδημιουργούμε το σχήμα που δημιουργείται από την Αδρανοποίηση κάθε φορά, πρέπει να ορίσουμε μία ακόμη ιδιότητα.

spring.jpa.defer-datasource-initialization=true

Ορίζοντας αυτήν την ιδιότητα, data.sql θα εκτελεστεί αφού ολοκληρωθεί η δημιουργία σχήματος με αδρανοποίηση. Επίσης, μπορούμε να χρησιμοποιήσουμε schema.sql για να αντικαταστήσετε το σχήμα που δημιουργήθηκε από την αδρανοποίηση πριν από τη χρήση του πληθυσμού δεδομένων data.sql.

5. Δημιουργία εφαρμογής Spring Boot με χρήση βάσης δεδομένων H2

Ας δημιουργήσουμε μια εφαρμογή χρησιμοποιώντας Spring Boot με βάση δεδομένων H2. Θα δημιουργήσουμε μια οντότητα υπαλλήλου και θα εκτελέσουμε λειτουργίες CRUD σε αυτήν σε μια εφαρμογή REST. Χρησιμοποιούμε αρχικοποίηση ελατηρίου για να ετοιμάσουμε τη δομή του έργου.

Spring Boot με βάση δεδομένων H2

Δείτε πώς φαίνεται η δομή του έργου αφού την εισαγάγουμε στο IDE της επιλογής:

Διαφημίσεις

Spring Boot με βάση δεδομένων H2

Έτσι το πλήρες 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 https://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>2.6.2</version>
      <relativePath />
      <!-- lookup parent from repository -->
   </parent>
   <groupId>com.javadevjournal</groupId>
   <artifactId>spring-boot-h2</artifactId>
   <version>0.0.1-SNAPSHOT</version>
   <name>spring-boot-h2</name>
   <description>Spring Boot project for H2 illustration</description>
   <properties>
      <java.version>1.8</java.version>
   </properties>
   <dependencies>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-data-jpa</artifactId>
      </dependency>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
      <dependency>
         <groupId>com.h2database</groupId>
         <artifactId>h2</artifactId>
         <scope>runtime</scope>
      </dependency>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
         <scope>test</scope>
      </dependency>
   </dependencies>
   <build>
      <plugins>
         <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
               <excludes>
                  <exclude>
                     <groupId>org.projectlombok</groupId>
                     <artifactId>lombok</artifactId>
                  </exclude>
               </excludes>
            </configuration>
         </plugin>
      </plugins>
   </build>
</project>

5.1. Καθορισμός Μοντέλου Οντότητας

Αρχικά, θα δημιουργήσουμε την κλάση οντοτήτων Υπάλληλος με σχολιασμό @Entity για να πείτε στην JPA ότι αυτό θα αντιστοιχιστεί σε έναν πίνακα στη βάση δεδομένων.

package com.javadevjournal.springbooth2.model;

import javax.persistence.*;

@Entity
@Table(name = "EMPLOYEE")
public class Employee {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    Integer id;
    String name;
    Double salary;

    public Integer getId() {
        return id;
    }

    public String getName() {
        return name;
    }

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

    public Double getSalary() {
        return salary;
    }

    public void setSalary(Double salary) {
        this.salary = salary;
    }
}

5.2. Δημιουργία διεπαφής αποθετηρίου

Εφόσον χρησιμοποιούμε τον εκκινητή JPA δεδομένων ελατηρίου στο έργο μας, μπορούμε να δημιουργήσουμε μια διεπαφή αποθετηρίου και να επεκτείνουμε JpaRepository διασύνδεση και παροχή της οντότητας που πρέπει να διαχειριστεί αυτό το αποθετήριο, που σε αυτήν την περίπτωση είναι το Employee μαζί με τον τύπο του πρωτεύοντος κλειδιού.

package com.javadevjournal.springbooth2.repository;

import com.javadevjournal.springbooth2.model.Employee;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface EmployeeRepository extends JpaRepository < Employee, Integer > {
    
}

5.3. Δημιουργία υπηρεσίας

Στη συνέχεια, θα δημιουργήσουμε την κλάση υπηρεσιών μας που θα περιέχει λογική για την εκτέλεση λειτουργιών CRUD στην οντότητα υπαλλήλων μας.

package com.javadevjournal.springbooth2.service;

import com.javadevjournal.springbooth2.model.Employee;
import com.javadevjournal.springbooth2.repository.EmployeeRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class EmployeeService {

    @Autowired
    EmployeeRepository employeeRepository;

    public List getAllEmployees() {
        List employees = new ArrayList();
        employeeRepository.findAll().forEach(employee - > employees.add(employee));
        return employees;
    }

    public Employee getEmployeeById(int id) {
        return employeeRepository.findById(id).get();
    }

    public void saveOrUpdate(Employee employee) {
        employeeRepository.save(employee);
    }

    public void delete(int id) {
        employeeRepository.deleteById(id);
    }
}

5.4. Ελεγκτής ανάπαυσης

Για να δοκιμάσουμε το Spring Boot με τη βάση δεδομένων H2, ας δημιουργήσουμε έναν απλό ελεγκτή REST για να δοκιμάσουμε τις μεθόδους μας CURD.

Διαφημίσεις

package com.javadevjournal.springbooth2.controller;

import com.javadevjournal.springbooth2.model.Employee;
import com.javadevjournal.springbooth2.service.EmployeeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
public class EmployeeController {

    @Autowired
    EmployeeService employeeService;

    @GetMapping("/employees")
    private List getAllEmployees() {
        return employeeService.getAllEmployees();
    }

    @GetMapping("/employees/{id}")
    private Employee getEmployeeById(@PathVariable("id") int id) {
        return employeeService.getEmployeeById(id);
    }

    @PostMapping("/employees")
    private ResponseEntity createEmployee(@RequestBody Employee employee) {
        try {
            employeeService.saveOrUpdate(employee);
        } catch (Exception exception) {
            return new ResponseEntity(HttpStatus.INTERNAL_SERVER_ERROR);
        }
        return new ResponseEntity("New employee created with id: " + employee.getId(), HttpStatus.CREATED);
    }

    @DeleteMapping("/employees/{id}")
    private ResponseEntity deleteById(@PathVariable("id") int id) {
        try {
            employeeService.delete(id);
        } catch (Exception exception) {
            return new ResponseEntity(HttpStatus.INTERNAL_SERVER_ERROR);
        }
        return new ResponseEntity("Employee deleted with id: " + id, HttpStatus.OK);
    }
}

6. Εκτελούμενη εφαρμογή

Ας εκτελέσουμε την εφαρμογή μας για να δούμε πώς λειτουργεί η συνολική διαμόρφωση της βάσης δεδομένων H2 με Spring Boot. Εκτελέστε την εφαρμογή μας πατώντας run στην κύρια κλάση μας. Ο ενσωματωμένος διακομιστής Tomcat θα ξεκινήσει στην προεπιλεγμένη θύρα 8080

Μπότα ελατηρίου με H2

Θα αρχίσουμε να χτυπάμε τα τελικά σημεία μας από το πρόγραμμα περιήγησης, εναλλακτικά, μπορούμε να χρησιμοποιήσουμε τον ταχυδρόμο.

Spring Boot με βάση δεδομένων H2
Λάβετε όλους τους υπαλλήλους

Διαφημίσεις

Δημιουργία νέου υπαλλήλου- Spring Boot με βάση δεδομένων H2
Δημιουργία νέου υπαλλήλου
Διαγραφή υπαλλήλου
Διαγραφή υπαλλήλου

7. Κονσόλα H2 με Spring Boot

Η βάση δεδομένων H2 διαθέτει μια ενσωματωμένη κονσόλα GUI για την περιήγηση στα περιεχόμενα της βάσης δεδομένων και την εκτέλεση ερωτημάτων. Για να ενεργοποιήσουμε την κονσόλα H2 και να τη χρησιμοποιήσουμε με το Spring Boot, πρέπει να προσθέσουμε την ακόλουθη ιδιότητα application.properties: spring.h2.console.enabled=true.Ανοίξτε τη διεύθυνση URL στο πρόγραμμα περιήγησης και κάντε κλικ στο συνδεθείτε στη βάση δεδομένων.

Διαφημίσεις

Κονσόλα H2 με μπότα ελατηρίου
Κονσόλα H2 με μπότα ελατηρίου

Μόλις συνδεθούμε, μπορούμε να δούμε τη δομή της βάσης δεδομένων, συμπεριλαμβανομένων των λεπτομερειών του πίνακα υπαλλήλων μας και των περιεχομένων που συμπληρώθηκαν κατά την εκκίνηση της εφαρμογής χρησιμοποιώντας data.sql γραφή.

Spring Boot με βάση δεδομένων H2

Ας προσπαθήσουμε να διαγράψουμε έναν υπάλληλο χρησιμοποιώντας την κονσόλα H2 και να διαγράψουμε έναν άλλο υπάλληλο χρησιμοποιώντας το αίτημα Διαγραφής χρησιμοποιώντας το POSTMAN.

Διαφημίσεις

Κονσόλα H2 με μπότα ελατηρίου
Διαγράψτε έναν υπάλληλο χρησιμοποιώντας την κονσόλα H2
Κονσόλα H2 με μπότα ελατηρίου

Μπορούμε να δούμε ότι ο πίνακας υπαλλήλων έχει ενημερωθεί και οι δύο σειρές έχουν διαγραφεί.

Spring Boot με βάση δεδομένων H2

Περίληψη

Σε αυτό το άρθρο, είδαμε πώς να χρησιμοποιήσετε το Spring Boot With H2 Database. Είδαμε πώς μπορούμε να δημιουργήσουμε μια εφαρμογή εκκίνησης ελατηρίου και να ρυθμίσουμε το H2. Έχουμε επίσης πρόσβαση στη βάση δεδομένων χρησιμοποιώντας την κονσόλα H2 και χειριζόμαστε δεδομένα κατά τη διάρκεια εκτέλεσης μέσω των REST API μας. Ο πηγαίος κώδικας για αυτό το άρθρο είναι διαθέσιμος στη σελίδα μας Αποθετήριο GitHub.

Schreibe einen Kommentar