SpringBoot 集成 Flyway 自动创建数据库表

1 条评论

使用 SpringBoot 开发 Java 应用时,如果涉及到数据库表的创建,可以集成 Flyway,在应用启动时,自动的初始化数据库表。

1. 首先当然是 Maven 工程引入 SpringBoot

参考 https://projects.spring.io/spring-boot/#quick-start 修改工程的 maven 配置,指定父工程,以及添加 spring-boot-starter-web 的依赖.

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.7.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>

2. 引入数据库模块的依赖

SpringBoot内建了大量功能的自动配置能力,这些配置能力大多基于运行时的类检测机制,所以需要引入 spring-jdbc 和 tomcat-jdbc, mysql-connector-java 几个依赖。spring-jdbc 为了启用数据源的自动配置,tomcat-jdbc 为了支持数据库连接池,mysql-connector-java 是添加 mysql 数据库的驱动,依赖如下:

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.11.RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jdbc</artifactId>
<version>8.5.20</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.7-dmr</version>
</dependency>

3. 引入 flyway 的依赖

SpringBoot 的 JDBC AutoConfiguration 已经内建了对 flyway 的支持,唯一要做的,就是添加上 flyway-core 的依赖:

<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>4.2.0</version>
</dependency>

4. 配置数据源

SpringBoot 的理念就是约定了大量的默认配置、自动装配能力。所以现在需要配置数据源不需要向以前一样配置各种 spring bean, 而只需要在 resources/application.properties (约定位置和名字,会自动加载)这个配置文件里写上数据库里连接的几个信息:

spring.datasource.url=jdbc:mysql://localhost:3306/todo?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username=todo
spring.datasource.password=123456

是的,连 driver 信息都不用写,因为 springboot 会自动根据 url 信息去检测。

5. 提供数据库表初始化脚本

还是约定的机制和约定的配置,只需要在工程 resources/db/migration 这个目录下面以 V{version}__{name}.sql 的方式命名数据库脚本文件即可,version 和 name 当然是可变的,举个例子: V1.0__InitializeTables.sql, 注意版本和名字中间是两个下划线。

6. 启动应用自动建表

一切都OK了,确保数据库可连接,用户拥有足够的权限,就可以启动应用,SpringBoot 会自动配置数据源,并使用 Flyway 进行数据库迁移操作。

@SpringBootApplication
public class TaskApp {
public static void main(String[] args) {
SpringApplication.run(TaskApp.class, args);
}
}

参考:

相关日志 Relate Posts

收藏与分享 : Twitter | Facebook | 微博 | 人人 | Google+ | PDF

“SpringBoot 集成 Flyway 自动创建数据库表”1条留言

  1. 🙂

发表留言(Ctrl+Enter提交)