转载

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

使用 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);
    }
}

参考:

  • SpringBoot docs: Working with SQL databases
  • SpringBoot docs: Data Access
原文  http://isouth.org/archives/357.html
正文到此结束
Loading...