SpringBoot支持了两种数据库结构版本管理与迁移,一个是flyway,一个是liquibase。其本身也支持sql script,在初始化数据源之后执行指定的脚本,本章是基于 Liquibase 开展…
Java
- Liquibase
开发人员将本地开发机器上的基于文本的文件中的数据库更改存储在本地数据库中。Changelog文件可以任意嵌套,以便更好地管理,每个变更集通常包含描述应用于数据库的更改/重构的更改。Liquibase支持对支持的数据库和原始SQL生成SQL的描述性更改。通常,每个变更集应该只有一个更改,以避免可能导致数据库处于意外状态的自动提交语句失败。
- 使用
- pom.xml
<?xml version="1.0" encoding="UTF-8"?><project xmlns="" xmlns:xsi="" xsi:schemaLocation=" "> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.6.RELEASE</version> </parent> <groupId>com.battcn</groupId> <artifactId>battcn-boot-liquibase</artifactId> <version>1.0-SNAPSHOT</version> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.8</java.version> <mybatis-plugin.version>1.1.1</mybatis-plugin.version> <mybatis-spring-boot.version>1.3.0</mybatis-spring-boot.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 数据库连接池,类似阿里 druid --> <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>${mybatis-spring-boot.version}</version> </dependency> <!-- liquibase --> <dependency> <groupId>org.liquibase</groupId> <artifactId>liquibase-core</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> <!--<scope>runtime</scope>--> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies></project>
Java
- application.yml
spring: application: name: battcn-boot-liquibase datasource: username: root password: root driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/liquibase?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true#我这里使用的是默认路径,如果默认路径其实可以不配置,有兴趣可以看 LiquibaseProperties 的源代码liquibase: change-log: classpath:db/changelog/db.changelog-master.yaml
liquibase.check-change-log-location 是否坚持change log的位置是否存在,默认为true.
liquibase.contexts 逗号分隔的运行时context列表.
liquibase.default-schema 默认的schema.
liquibase.drop-first 是否首先drop schema,默认为false
liquibase.enabled 是否开启liquibase,默认为true.
liquibase.password 目标数据库密码
liquibase.url 要迁移的JDBC URL,如果没有指定的话,将使用配置的主数据源.
liquibase.user 目标数据用户名
- db.changelog-master.yaml
- test1.sql
INSERT INTO `person` (`id`,`first_name`,`last_name`) VALUES ('2','哈哈','呵呵');
上面的yaml文件其实就是从下面的XML 演变而来的,官方是支持 xml,yaml,json 三种格式,写法也比较简单
Java
- Application.java
- 测试
1.启动Application.java中的main方法
Java
Java
2.SQL中的语法是创建一张person表和 两次 INSERT 操作
Java
Java