springboot集成flyway的终极奥秘
安装依赖包
安装最新定版上一个即可,其余也可以版本自行选取。涉及到一些安装包
springboot相关
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
flyway相关
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>5.2.4</version>
</dependency>
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-mysql</artifactId>
<version>10.14.0</version>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.3.0</version>
</dependency>
build相关
<plugins>
<plugin>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-maven-plugin</artifactId>
<version>5.2.1</version>
</plugin>
</plugins>
最重要的一点不能忘记,项目上扫描的路径需要配置,这个不配置你懂得,
让你怀疑人生。最重要的一个就是"**/*.*",其实有这个配置就行了,其余可以忽略,因为要扫描你的文件。
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.yml</include>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.*</include>
</includes>
<filtering>false</filtering>
</resource>
需要配置相关参数
在yml配置文件中添加flyway相关参数。
spring:
# 数据源配置
datasource:
druid:
# 主库数据源
master:
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/数据库名称?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: 账号
password: 密码
flyway:
enabled: true
table: schema_version #数据表命名
locations: classpath:db # 配置 SQL-based 的 SQL 脚本在该目录下
check-location: false # 是否校验迁移脚本目录下。如果配置为 true ,代表需要校验。此时,如果目录下-没有迁移脚本,会抛出 IllegalStateException 异
# 避免带${}sql执行失败
placeholder-prefix: '#('
placeholder-suffix: )
# 是否关闭要清除已有库下的表功能,生产环境必须为true,否则会删库
clean-disabled: true
flyway提供了一些默认项,可以添加到配置项上面进行修改,但是我感觉没必要,使用默认即可,最后格式:V1.1__内容.sql
网上找了一些flyway的配置项供参考,想学习的可以网上学一下。
flyway.baseline-description对执行迁移时基准版本的描述.
flyway.baseline-on-migrate当迁移时发现目标schema非空,而且带有没有元数据的表时,是否自动执行基准迁移,默认false.
flyway.baseline-version开始执行基准迁移时对现有的schema的版本打标签,默认值为1.
flyway.check-location检查迁移脚本的位置是否存在,默认false.
flyway.clean-on-validation-error当发现校验错误时是否自动调用clean,默认false.
flyway.enabled是否开启flywary,默认true.
flyway.encoding设置迁移时的编码,默认UTF-8.
flyway.ignore-failed-future-migration当读取元数据表时是否忽略错误的迁移,默认false.
flyway.init-sqls当初始化好连接时要执行的SQL.
flyway.locations迁移脚本的位置,默认db/migration.
flyway.out-of-order是否允许无序的迁移,默认false.
flyway.password目标数据库的密码.
flyway.placeholder-prefix设置每个placeholder的前缀,默认${.
flyway.placeholder-replacementplaceholders是否要被替换,默认true.
flyway.placeholder-suffix设置每个placeholder的后缀,默认}.
flyway.placeholders.[placeholder name]设置placeholder的value
flyway.schemas设定需要flywary迁移的schema,大小写敏感,默认为连接默认的schema.
flyway.sql-migration-prefix迁移文件的前缀,默认为V.
flyway.sql-migration-separator迁移脚本的文件名分隔符,默认__
flyway.sql-migration-suffix迁移脚本的后缀,默认为.sql
flyway.tableflyway使用的元数据表名,默认为schema_version
flyway.target迁移时使用的目标版本,默认为latest version
flyway.url迁移时使用的JDBC URL,如果没有指定的话,将使用配置的主数据源
flyway.user迁移数据库的用户名
flyway.validate-on-migrate迁移时是否校验,默认为true
其中配置文件里面需要注意下
1. locations: classpath:db ,这里需要再resources文件下创建db文件夹,
此文件对应这里的配置,如果想要配置别的文件夹,那就修改配置就好了,
该文件夹下方你修改的sql文件就行,这样提交代码时别人拉取代码后,
运行项目如果没有运行过的sql项,目会帮你运行的,
这样不用担心各位小伙伴的数据库不一致了。
2. db文件里面的sql也是有说法的,既然有版本的概念那就一定要遵守办的写法,
- V只能执行一次脚本,如果有变动可以在添加版本 ;
- R开头可以执行多次,并且R下面不用添加版本号,那样项目会报错的。
- 在flyway参数默认的情况下一定要记住要用双下划线__
还有一些注意事项在项目使用中慢慢领会吧,这里只是入门,修行还得看个人。
R后面添加版本号的提示
启动项目
项目出现这段文字证明启动成功了
数据库的变化
项目启动时数据库会新增一张表,schema_version,表名根据上面配置来定义,里面会记录一些执行结果
好了,运行正常而且也能运行sql,表里面也记录sql脚本的命令以及内容。