使用Spring Boot内置的H2数据库的方法

首先

由于各种情况的原因,我们决定制作一个基于Spring Boot的Web应用程序。在此过程中,由于决定使用内嵌的H2数据库,我整理了遇到的问题和进行的调查。顺便提一下,Spring Boot的版本是1.5.17。

在pom.xml中添加依赖关系。

在pom.xml文件中,添加spring-boot-starter-jdbc和h2作为依赖关系。
如果在Spring Initializr上创建项目,请添加以下两个选项使其相同。

    • H2

 

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

在application.properties(.yml)文件中添加配置

在application.properties或application.yml中添加以下配置。
配置内容包括以下三个项。

    • datasourceの設定

 

    • コネクションプールの設定(必要なら)

 

    h2の便利ツールの設定(必要なら)
# datasource
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:./h2db/sampledb
spring.datasource.username=username
spring.datasource.password=password

# connection pool use tomcat
spring.datasource.tomcat.maxActive=10
spring.datasource.tomcat.maxIdle=10
spring.datasource.tomcat.minIdle=10
spring.datasource.tomcat.initialSize=10
spring.datasource.tomcat.defaultAutoCommit=false

# h2 for debug tool
# spring.h2.console.enabled=true
# spring.h2.console.path=/h2-console
# spring.h2.console.settings.web-allow-others=true

以下是各个设置的内容,详细说明在官方指南的appication.properties中写明。接下来会解释一些要点。

连接池只是作为一个池子来使用。

根据以上信息,我按照Tomcat的datasource定义的方式,添加了driverClass、url、username和password的定义,并删除了spring.datasource.url等定义。但是这样做似乎不行。正确的做法似乎是只需将其定义为连接池。

我认为有些人可能会认为内嵌数据库,也就是在同一JVM进程中为什么需要连接池呢?作者也有同样的想法。因为对于一般的Web应用来说,这是必需的。虽然我没有进行性能测试,所以无法确定其效果。

# datasource
# nothing see connection pool

# connection pool use tomcat
spring.datasource.tomcat.driver-class-name=org.h2.Driver
spring.datasource.tomcat.url=jdbc:h2:./h2db/sampledb
spring.datasource.tomcat.username=username
spring.datasource.tomcat.password=password
spring.datasource.tomcat.maxActive=10
spring.datasource.tomcat.maxIdle=10
spring.datasource.tomcat.minIdle=10
spring.datasource.tomcat.initialSize=10
spring.datasource.tomcat.defaultAutoCommit=false

将H2的有用功能用作调试工具。

即使是嵌入式数据库,也可以使用h2的Web管理功能。嵌入式数据库在与应用程序相同的JVM进程中运行,并且由于是专用数据库,无法通过网络连接进行调试,非常麻烦。使用Web管理功能可以查看和修改当前数据库的数据。

# h2 for debug tool
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
spring.h2.console.settings.web-allow-others=true

由于调试功能, 最好不要在application.properties文件中进行设定, 而是在系统属性中启用。
这样即使忘记修改配置文件, 调试功能也能保持禁用状态, 令人放心。

java -jar your-app.jar -Dspring.h2.console.enabled=true -Dspring.h2.console.path=/h2-console -Dspring.h2.console.settings.web-allow-others=true
运行命令:java -jar your-app.jar -Dspring.h2.console.enabled=true -Dspring.h2.console.path=/h2-console -Dspring.h2.console.settings.web-allow-others=true

顺便提一下,spring.h2.console.settings.web-allow-others是指是否允许从远程(其他PC)访问。默认为false,只能从本地,也就是运行应用程序的PC上访问。

4. 准备数据库和表

尽管H2数据库是内存数据库,但嵌入式数据库可以实现数据持久化。因此,如果每次启动都重新初始化,会造成困扰。

    • h2dbは接続文字列で指定したdbが存在しない場合は自動で作成する

存在する場合は新規作成(初期化)しない

CREATE TABLE IF NOT EXISTSで初期化SQLを定義する

テーブルが存在する場合は再作成されない

jdbc:h2:./h2db/sampledbは実行時のカレントディレクトリから相対で見たパス(./h2db/sampledb)にDBファイルを格納する意味である

相対パス指定は./が重要

5. jdbcTemplate、datasource、事务控制将自动配置。

如果仅使用原生的springframework,进行数据库访问时需要进行各种设置(如Bean定义和AOP等),但是对于spring boot而言,这些设置将自动进行。

    • datasourceのBeanが自動で設定される

JdbcTemplate,NamedParameterJdbcTemplateのBeanが自動で設定される

すぐに@Autowired等でインジェクションができる

@Transactionalによるトランザクション制御が有効

最后 (zuì

这次是关于Spring Boot Web应用程序中使用嵌入式H2数据库的方法,我总结了一些问题和研究结果。
实际操作时,我发现设置非常简单,超出了我的预期,这让我感到惊讶。从这个意义上说,Spring Boot真是方便易用呢。

广告
将在 10 秒后关闭
bannerAds