h2 数据库spring boot多模块共用

背景:

     我在使用springboot 项目的时候不想直接依赖于本地安装的mysql数据库,所以使用这种纯嵌入式的h2数据库。但是由此带来的一个问题是,如果只是一个模块下还好,他们都是共用一个数据库,可是在两三个模块之下呢?这时候h2数据库就没法统一了,极有可能会产生找不到table表的错误异常出现。

解决办法,先查看官方文档http://www.h2database.com/html/features.html#connection_modes

       官方文档的这张截图应该已经非常清晰明了了,它是说要建立起一个客户端服务器的模型就能解决我上面提到的一个问题。说实话,刚看到这段话的时候也是一知半解的,看先人栽树(我本来只是想乘凉的,奈何天朝人不喜欢栽树,没法只好我来搬运了)

https://www.baeldung.com/spring-boot-access-h2-database-multiple-apps 不知道是否要翻墙

        这个老哥讲的已经非常详细了,同时他还提供了一个github的地址https://github.com/eugenp/tutorials/tree/master/persistence-modules/spring-boot-h2

       相信有这两篇应该就能解决大部分的问题了。

以下是我的尝试:

       首先我会在一个主模块下创建一个server的配置:

      引入的包名一定要保持一致,如果你的org.h2.tools.Server 找不到的话,请在pom文件中引入的包去掉<scop>runtime</scop>

这句话的意思是不需要编译,只作用于运行期就够了。正因为如此你的Server包才引不进来,去掉就好。

然后是在yml的配置,properties其实差不多

spring:
    h2:
      console:
        enabled: true
       
    datasource:
        hikari:
            connection-test-query: SELECT 1 FROM DUAL
         
        driver-class-name: org.h2.Driver
        jdbc-url: jdbc:h2:mem:testdb
        username: root
        password: root

       这是h2的server 端。

       那么在client端如何做呢,只需要在yml上配置就行了,其他的不用管。

spring:
    h2:
      console:
        enabled: true
     
    datasource:
        hikari:
            connection-test-query: SELECT 1 FROM DUAL
         
        driver-class-name: org.h2.Driver
        jdbc-url: jdbc:h2:tcp://localhost:9090/mem:testdb
        username: root
        password: root

这里的h2 client配置与server端只有url的差别,其他都是一样的,只要保证库名,用户名等信息一致就可以。至此我们就可以在springboot 多模块下自由的玩耍h2数据库了,这样也保证了数据的一致性。

猜你喜欢

转载自blog.csdn.net/weixin_41195786/article/details/89215018