Статьи

Понимание базы данных H2 InMemory с помощью Spring Boot

Вступление

По сути, настройка базы данных состоит из нескольких шагов, прежде чем мы сможем использовать ее через настроенный источник данных в нашем приложении. Это действительно требуется в случае реальных реализаций проекта. Тем не менее, существуют ситуации, когда нам просто нужно сделать POC для чего-то, и вся настройка базы данных все еще становится обязательством. Аналогично, для модульных тестов было бы идеально иметь свой собственный набор записей в базе данных, поэтому он независимый, без влияния изменений данных в развернутой среде. Для таких случаев использования базы данных в памяти являются идеальным решением.

База данных в памяти создается при запуске приложения, а уничтожается при остановке приложения.

Spring Boot легко интегрирует базу данных H2. Таким образом, вы можете легко и быстро переключаться между реальной базой данных и базой данных в памяти.

Обратите внимание, что база данных H2 InMemory — это реляционная СУБД, написанная на Java.

Давайте посмотрим на быстрое демо.

Реализация

Давайте создадим проект Spring Boot из Spring initializr . Убедитесь, что вы добавили зависимости Web, JPA, H2 и DevTools, как показано ниже.

База данных H2 InMemory

Давайте посмотрим на сгенерированный файл POM.

pom.xml

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<?xml version="1.0" encoding="UTF-8"?>
    <modelVersion>4.0.0</modelVersion>
  
    <groupId>com.jcombat</groupId>
    <artifactId>h2demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
  
    <name>h2demo</name>
    <description>Demo project for Spring Boot</description>
  
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.0.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>
  
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <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>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
        </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>
            </plugin>
        </plugins>
    </build>
  
</project>

Мы также заметили, что файл application.properties создан как —

application.properties

1
2
3
4
5
6
7
8
9
# H2
spring.h2.console.enabled=true
spring.h2.console.path=/h2
  
# Datasource
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driver-class-name=org.h2.Driver

Свойство spring.h2.console.enabled = true включает веб-консоль по адресу http: // localhost: 8080 / h2.

База данных H2 InMemory

Нажмите на Connect и вы попадете на страницу, где вы видите доступные таблицы в БД.

База данных H2 InMemory

Вы можете быть удивлены, как получилось, что ученический стол создан. Волшебство происходит с data.sql, размещенным в src / main / resources. Просто убедитесь, что у вас есть операторы вставки в файле data.sql, как указано ниже —

data.sql

1
2
3
4
5
insert into STUDENT
values(10001,'Ajay', 'AAA1');
  
insert into STUDENT
values(10002,'Ajit', 'AAA2');

Spring Boot Auto Configuration проверяет значения в файле data.sql и выполняет необходимые для вас действия, т. Е. Создает таблицу STUDENT и выполняет операторы вставки. Умная!

Давайте посмотрим, как мы можем работать с этими записями студентов.

Для этого давайте создадим класс сущности Student.

Student.java

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package com.jcombat.entity;
  
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
  
@Entity
public class Student {
  
    @Id
    @GeneratedValue
    private Long id;
    private String name;
    private String section;
  
    public Student() {
    }
  
    public Student(Long id, String name, String section) {
        this.id = id;
        this.name = name;
        this.section = section;
    }
  
    public Long getId() {
        return id;
    }
  
    public void setId(Long id) {
        this.id = id;
    }
  
    public String getName() {
        return name;
    }
  
    public void setName(String name) {
        this.name = name;
    }
  
    public String getSection() {
        return section;
    }
  
    public void setSection(String section) {
        this.section = section;
    }
  
}

Чтобы получить доступ к базе данных, напишем простой интерфейс JPA, который предоставляет необходимые вспомогательные функции для выполнения основных операций с БД.

StudentRepository.java

01
02
03
04
05
06
07
08
09
10
11
package com.jcombat.repository;
  
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
  
import com.jcombat.entity.Student;
  
@Repository
public interface StudentRepository extends JpaRepository<Student, Long> {
  
}

Давайте теперь настроим класс точки входа Spring Boot, используя Runner командной строки, чтобы мы могли запускать наше приложение Spring Boot из командной строки.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package com.jcombat.h2demo;
  
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
  
import com.jcombat.repository.StudentRepository;
  
@SpringBootApplication
@EntityScan("com.jcombat.entity")
@EnableJpaRepositories("com.jcombat.repository")
public class H2demoApplication implements CommandLineRunner {
  
    // mvn spring-boot:run
    private Logger LOG = LoggerFactory.getLogger("H2demoApplication");
     
    StudentRepository studentRepository;
     
    @Autowired
    public H2demoApplication(StudentRepository studentRepository) {
        this.studentRepository = studentRepository;
    }
  
    public static void main(String[] args) {
        SpringApplication.run(H2demoApplication.class, args);
    }
  
    @Override
    public void run(String... args) throws Exception {
        LOG.info("Student count in DB: {}", studentRepository.count());
    }
}

Выполнение заявки

Чтобы запустить приложение, вы можете сделать это непосредственно из Eclipse IDE или из командной строки с помощью следующей команды:

1
mvn spring-boot:run

Когда выполнено, мы видим ниже вывод, отображаемый на консоли —

Скачать исходный код

База данных H2 InMemory

См. Оригинальную статью здесь: Общие сведения о базе данных H2 InMemory с помощью Spring Boot

Мнения, высказанные участниками Java Code Geeks, являются их собственными.