29.1.1 内置数据库支持

使用嵌入内存中的数据库开发应用程序往往很方便。显然,内存数据库不提供持久存储;当程序启动时需要填充数据库,并且准备在程序结束时丢弃数据。

“How-to”章节中包含如何初始化数据库的一节

Spring Boot可以自动配置内置的H2HSQLDerby数据库。您不需要提供任何连接URL,只需包含一个到您要使用的内置数据库的构建依赖。

如果您在测试中使用这个功能,您可能会注意到,不管使用多少个程序上下文,整个测试套件都会复用同一个的数据库。如果想确保每个上下文都有一个独立的内置数据库,您应该将spring.datasource.generate-unique-name设为true

例如,典型的POM依赖:

<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能够控制数据库何时关闭,从而确保在不再需要访问数据库时能将其关闭。


书籍推荐