在SpringBoot中集成H2数据库的完整指南

 更新时间:2024年10月29日 11:16:30   作者:编码行者  
Spring Boot是一个简化企业级Java应用程序开发的强大框架,H2数据库是一个轻量级的、开源的SQL数据库,非常适合用于开发和测试,本文将指导您如何在Spring Boot应用程序中集成H2数据库,并探索一些高级配置选项,需要的朋友可以参考下

引言

Spring Boot是一个简化企业级Java应用程序开发的强大框架。H2数据库是一个轻量级的、开源的SQL数据库,非常适合用于开发和测试。本文将指导您如何在Spring Boot应用程序中集成H2数据库,并探索一些高级配置选项。

依赖关系

首先,我们需要在项目的pom.xml文件中添加H2数据库和Spring Data JPA的依赖关系:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
</dependency>

数据库配置

Spring Boot默认配置应用程序连接到一个内存存储的H2数据库,用户名为sa,密码为空。我们可以通过在application.properties文件中添加以下属性来自定义这些设置:

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

或者,我们也可以使用application.yml文件进行配置:

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

数据库持久化

默认情况下,H2数据库的内存存储在应用程序重启后会导致数据丢失。为了解决这个问题,我们可以将数据库存储为文件:

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

或者在YAML文件中:

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

数据库操作

在Spring Boot中执行CRUD操作与在其他SQL数据库中类似。我们可以使用JPA仓库接口和实体类来管理数据库操作。

初始化数据源

我们可以使用SQL脚本来初始化数据库。在src/main/resources目录下创建一个SQL文件,填充一些示例数据:

INSERT INTO countries (id, name) VALUES (1, 'USA');
INSERT INTO countries (id, name) VALUES (2, 'France');
INSERT INTO countries (id, name) VALUES (3, 'Brazil');
INSERT INTO countries (id, name) VALUES (4, 'Italy');
INSERT INTO countries (id, name) VALUES (5, 'Canada');

Spring Boot会自动运行这个文件来初始化数据库。我们可以通过将spring.sql.init.mode属性设置为never来禁用这种默认行为。此外,还可以配置多个SQL文件来加载初始数据。

Hibernate和data.sql

默认情况下,data.sql脚本在Hibernate初始化之前执行。这使得基于脚本的初始化与Flyway和Liquibase等其他数据库迁移工具保持一致。当我们每次重新创建Hibernate生成的模式时,我们需要设置一个额外的属性:

spring.jpa.defer-datasource-initialization=true

这会修改默认的Spring Boot行为,并在Hibernate生成模式之后填充数据。

访问H2控制台

H2提供了一个嵌入式的GUI控制台,用于浏览数据库内容和运行SQL查询。要启用H2控制台,在application.properties中添加以下属性:

spring.h2.console.enabled=true

或者在application.yml中:

spring:
  h2:
    console:
      enabled: true

启动应用程序后,访问http://localhost:8080/h2-console即可使用H2控制台。在登录页面使用配置的数据库URL和凭据进行登录。

进一步配置H2控制台

我们可以通过在项目的application.properties中指定以下属性来进一步配置控制台:

spring.h2.console.path=/h2-console
spring.h2.console.settings.trace=false
spring.h2.console.settings.web-allow-others=false

或者在YAML配置中:

spring:
  h2:
    console:
      path: /h2-console
      settings:
        trace: false
        web-allow-others: false

H2数据库URL选项

H2数据库URL提供了多种选项以进一步自定义数据库行为。例如:

  • DB_CLOSE_DELAY=-1:确保在JVM运行期间数据库保持打开状态。
  • DB_CLOSE_ON_EXIT=FALSE:即使JVM关闭,数据库也保持打开状态。
  • AUTO_RECONNECT=TRUE:允许在连接丢失时自动重新连接。
  • MODE=PostgreSQL:将H2数据库设置为PostgreSQL兼容模式。

示例配置:

spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;AUTO_RECONNECT=TRUE;MODE=PostgreSQL;

结论

H2数据库与Spring Boot的集成非常流畅,提供了一个轻量级且功能丰富的解决方案,非常适合开发和测试。通过本文的指南,您应该能够轻松地在Spring Boot应用程序中集成H2数据库,并利用其强大的功能。

以上就是在SpringBoot中集成H2数据库的完整指南的详细内容,更多关于SpringBoot集成H2数据库的资料请关注脚本之家其它相关文章!

相关文章

  • 通过Docker启动Solace并在Spring Boot通过JMS整合Solace的操作方法

    通过Docker启动Solace并在Spring Boot通过JMS整合Solace的操作方法

    本文将介绍如何在Spring中使用,虽然代码使用的是Spring Boot,但并没有使用相关starter,跟Spring的整合一样,可通用,JMS是通过的消息处理框架,可以深入学习一下,不同的MQ在JMS的整合上都是类似的,感兴趣的朋友跟随小编一起看看吧
    2023-01-01
  • 一文详解Java抽象类到底有多抽象

    一文详解Java抽象类到底有多抽象

    这篇文章主要介绍了一文详解Java抽象类到底有多抽象,抽象方法所在的类必须是抽象类,子类若继承了一个抽象类,就必须覆写父类的所有抽象方法,这里的子类是普通类,是强制要求覆写所有抽象方法,但是如果子类也是一个抽象类,那么就可以不覆写
    2022-06-06
  • Mybatis分页的4种方式实例

    Mybatis分页的4种方式实例

    这篇文章主要介绍了Mybatis分页的4种方式实例,包括数组分页,sql分页,拦截器分页,RowBounds分页,需要的朋友可以参考下
    2022-04-04
  • myeclipse中使用maven前常见错误及解决办法

    myeclipse中使用maven前常见错误及解决办法

    这篇文章主要介绍了myeclipse中使用maven前常见错误及解决办法 的相关资料,需要的朋友可以参考下
    2016-05-05
  • Mybatis 中的sql批量修改方法实现

    Mybatis 中的sql批量修改方法实现

    在项目中遇到需要批量更新的功能,原本想的是在Java中用循环访问数据库去更新,但是心里总觉得这样做会不会太频繁了,太耗费资源了,效率也很低,查了下mybatis的批量操作,原来确实有<foreach>标签可以做到,下面通过本文给大家介绍下
    2017-01-01
  • Springboot基础之RedisUtils工具类

    Springboot基础之RedisUtils工具类

    本文来说下RedisUtils工具类,主要介绍了整合Redis、MyBatis,封装RedisUtils工具类等知识,文中有非常详细的代码示例,对正在学习java的小伙伴们有很好的帮助,需要的朋友可以参考下
    2021-05-05
  • SpringBoot整合OpenApi的实践

    SpringBoot整合OpenApi的实践

    本文主要介绍了SpringBoot整合OpenApi,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • Java使用Scanner类进行文件的读取方式

    Java使用Scanner类进行文件的读取方式

    这篇文章主要介绍了Java使用Scanner类进行文件的读取方式,具有很好的参考价值,希望对大家有所帮助。以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
    2022-11-11
  • JAVA 拷贝文件的几种方式小结

    JAVA 拷贝文件的几种方式小结

    本文主要介绍了JAVA拷贝文件的几种方式,包含普通拷贝,mmap内存映射的方式拷贝,零拷贝sendFile方式实现和多线程的方式实现拷贝,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • 如何在Java中判断两个Long类型是否相等

    如何在Java中判断两个Long类型是否相等

    这篇文章主要介绍了如何在Java中判断两个Long类型是否相等,文章围绕主题展开详细的内容介绍,具有一定的 参考价值,需要的小伙伴可以参考一下
    2022-09-09

最新评论