# 29.1.1. 对内嵌数据库的支持

开发应用时使用内存数据库是很方便的。显然，内存数据库不提供持久化存储；你只需要在应用启动时填充数据库，在应用结束前预先清除数据。

**提示** How-to章节包含有[一章讲解如何初始化数据库](https://docs.spring.io/spring-boot/docs/2.0.0.RELEASE/reference/htmlsingle/#howto-database-initialization)。

Spring Boot可以自动配置的内嵌数据库包括[H2](http://www.h2database.com/), [HSQL](http://hsqldb.org/)和[Derby](https://db.apache.org/derby/)。你不需要提供任何连接URL，只需要添加你想使用的内嵌数据库依赖。

**注** 如果你正在你的测试中使用这个特性，你可能注意到了：不管你使用了多少应用上下文，你的整个测试套件重复使用了同一个数据库。如果你想要确保每个上下文各自有一个内嵌数据库，你应当把 `spring.datasource.generate-unique-name`设置为`true`。

例如，典型的POM依赖如下所示：

```markup
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>org.hsqldb</groupId>
    <artifactId>hsqldb</artifactId>
    <scope>runtime</scope>
</dependency>
```

**注** 对于自动配置的内嵌数据库，你需要添加`spring-jdbc`依赖，在本示例中，`spring-boot-starter-data-jpa`已包含该依赖了。

**注** 无论出于什么原因，你需要配置内嵌数据库的连接URL，一定要确保数据库的自动关闭是禁用的。如果使用H2，你需要设置`DB_CLOSE_ON_EXIT=FALSE`。如果使用HSQLDB，你需要确保没使用`shutdown=true`。禁用数据库的自动关闭可以让Spring Boot控制何时关闭数据库，因此在数据库不需要时可以确保关闭只发生一次。
