概述

flyway这款数据库版本工具就算大家没有使用过但也略有耳闻了,springboot对该款工具进行集成的框架可以让我们在启动springboot应用时自动去找sql版本文件进行比对执行,但在迁移或初始化时往往还是需要先手动进行下数据库的初始化配置,否则会把unknown database的异常。 为了减少这一步所以个人就以springboot的方式编码在项目的启动时自动进行数据库的初始化,然后再执行版本文件。

自动建库实现步骤

具体思路

  1. springboot的配置项都会有相应的properties属性类,数据库的属性类为datasourceproperties,flyway的属性类为flywayproperties,尽可能的使用其中的配置项而不额外添加自定义的配置
  2. 建库与相关设置的语句一般不会对已存在的设置进行更改(如建库建表时都是create xxx if not exists),所以项目初始化时每次都执行也不会影响现有的数据库配置,编码时可以不用添加执行的前置判断

代码实现

配置文件

application-database.yml

为了让项目的配置结构更清晰,所以我把数据库的相关配置都独立到application-database.yml中。
flyway的init-sqls配置是当获取到sql statement时会执行sql语句列表,但需要注意的是如果spring.datasource.url连接不上,该块语句是依旧无法被执行的,因为springboot集成的flyway配置是通过spring.datasource的配置去连接数据库的,如果url中的数据库不存在,flyway的版本迁移就无法执行了。
前文提到尽可能的使用springboot原有的配置项,所以init-sqls其实是我配给自己用的。 个人通过init-sqls配置初始化语句与其它方式配置初始化想到的好处:

  • 无需将初始化语句硬编码再让statement执行
  • 当数据库选型进行变更时只需再配置文件中进行修改相应的初始化语句
  • springboot可以直接以字符串列表进行读取,开发过程中使用起来更加灵活,而不用去解析sql文件

数据库初始化器databaseinitializer

简单的主程序flywayapplication

执行效果图

当项目启动时可以看到databaseinitializer会先通过init-sqls进行数据库的初始化,然后springboot再初始化通用的数据源并执行sql版本文件。图中的create_database.sql文件存放的是init-sqls配置的语句,该文件不会被执行,可以忽略。


  • 如果对flyway不了解的可以看我之前的文章springboot集成flyway进行数据库版本迁移管理
  • 本文例子仓库:spring-bootflyway-demo

以上就是springboot使用flyway初始化数据库的详细内容,更多关于springboot 初始化数据库的资料请关注www.887551.com其它相关文章!