Σε αυτό το άρθρο, θα δούμε πώς να χρησιμοποιήσετε το 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. Χρησιμοποιούμε αρχικοποίηση ελατηρίου για να ετοιμάσουμε τη δομή του έργου.

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

Έτσι το πλήρες 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

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



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

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

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


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

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