以若依项目为例(v3.8.4) {#%E4%BB%A5%E8%8B%A5%E4%BE%9D%E9%A1%B9%E7%9B%AE%E4%B8%BA%E4%BE%8B(v3.8.4)}
1、 pom.xml(ruoyi) 引入依赖管理 {#1%E3%80%81-pom.xml(ruoyi)-%E5%BC%95%E5%85%A5%E4%BE%9D%E8%B5%96%E7%AE%A1%E7%90%86}
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>${flyway.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
2、 pom.xml(ruoyi-admin).xml引入依赖 {#2%E3%80%81-pom.xml(ruoyi-admin).xml%E5%BC%95%E5%85%A5%E4%BE%9D%E8%B5%96}
<dependencies>
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
</dependency>
</dependencies>
3、 resources目录下新建db/migration目录 来存放sql脚本 {#3%E3%80%81-resources%E7%9B%AE%E5%BD%95%E4%B8%8B%E6%96%B0%E5%BB%BAdb%2Fmigration%E7%9B%AE%E5%BD%95-%E6%9D%A5%E5%AD%98%E6%94%BEsql%E8%84%9A%E6%9C%AC}
版本1.0.0中放入初始化sql脚本
版本1.0.1中放入测试脚本
# 创建flyway_test 并插入一条数据
DROP TABLE IF EXISTS `cpt_monitor`.`flyway_test`;
CREATE TABLE `cpt_monitor`.`flyway_test`
(
`id` int NOT NULL AUTO_INCREMENT,
`update_time` datetime NULL,
PRIMARY KEY (`id`)
);
`insert into ``cpt_monitor``.``flyway_test``
values (1, now());
`
4、 在application.yml
中配置 {#4%E3%80%81-%E5%9C%A8application.yml%E4%B8%AD%E9%85%8D%E7%BD%AE}
spring
flyway:
# 是否启用flyway
enabled: true
# 编码格式,默认UTF-8
encoding: UTF-8
# 当迁移发现数据库非空且存在没有元数据的表时,自动执行基准迁移,新建schema_version表
baseline-on-migrate: true
配置好数据库链接,空数据库即可。正常情况下此时启动 便会在数据中执行初始化sql 和 测试sql 两个版本按顺序,并自动生成flyway_schema_history
表来记录版本;
5、 若依项目(v3.8.4)还需要额外增加配置 {#5%E3%80%81-%E8%8B%A5%E4%BE%9D%E9%A1%B9%E7%9B%AE(v3.8.4)%E8%BF%98%E9%9C%80%E8%A6%81%E9%A2%9D%E5%A4%96%E5%A2%9E%E5%8A%A0%E9%85%8D%E7%BD%AE}
主要是有两个地方用到了
@PostConstruct
注解,系统需要从数据库中加载配置信息,并且是构造bean后就执行,此时flaway的数据库配置加载还没执行,如果是第一次执行项目的话,数据库都还没有表结构信息,所以会报错。
此时可以考虑重写flyway自动配置,通过@Bean的方式添加,不采用默认的自动化配置,控制表信息的加载时机。更方便的,直接改这两个地方的加载时机就行了。
1 、找到这两个配置类,注释掉初始化; {#1-%E3%80%81%E6%89%BE%E5%88%B0%E8%BF%99%E4%B8%A4%E4%B8%AA%E9%85%8D%E7%BD%AE%E7%B1%BB%2C%E6%B3%A8%E9%87%8A%E6%8E%89%E5%88%9D%E5%A7%8B%E5%8C%96%3B}
- ruoyi-system中com.ruoyi.system.service.impl.SysDictTypeServiceImpl的字典信息缓存配置
- ruoyi-system中com.ruoyi.system.service.impl.SysConfigServiceImpl的redis参数缓存配置
SysDictTypeServiceImpl.java
/**
* 项目启动时,初始化字典到缓存
*/
/*
@PostConstruct
public void init() {
loadingDictCache();
}
*/
SysConfigServiceImpl.java
/**
* 项目启动时,初始化参数到缓存
*/
/* @PostConstruct
public void init() {
loadingConfigCache();
}*/
2. 在若依system模块中新建conf/RuntimeConfig {#2.-%E5%9C%A8%E8%8B%A5%E4%BE%9Dsystem%E6%A8%A1%E5%9D%97%E4%B8%AD%E6%96%B0%E5%BB%BAconf%2Fruntimeconfig}
package com.ruoyi.system.config;
import com.ruoyi.system.service.impl.SysConfigServiceImpl;
import com.ruoyi.system.service.impl.SysDictTypeServiceImpl;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;
/\*\*
*
@Description 兼容flyway 把 项目初始化内容 改到这里初始化(改变加载时机)
*
ruoyi-system中com.ruoyi.system.service.impl.SysDictTypeServiceImpl的字典信息缓存配置
*
ruoyi-system中com.ruoyi.system.service.impl.SysConfigServiceImpl的redis参数缓存配置
*
参考 https://blog.csdn.net/qq_41885819/article/details/114970148
*
@Author wxyShine
*
@Date 2022/12/9 9:37
*
@Email wxy@wxy97.com
\*/
@Component
public class RuntimeConfig implements ApplicationListener\<ContextRefreshedEvent\> {
private final SysConfigServiceImpl sysConfigServiceImpl;
private final SysDictTypeServiceImpl sysDictTypeServiceImpl;
public RuntimeConfig(SysConfigServiceImpl sysConfigServiceImpl,
SysDictTypeServiceImpl sysDictTypeServiceImpl) {
this.sysConfigServiceImpl = sysConfigServiceImpl;
this.sysDictTypeServiceImpl = sysDictTypeServiceImpl;
}
/\*\*
* 项目启动时,初始化参数
*/
@Override
public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
sysConfigServiceImpl.loadingConfigCache();
sysDictTypeServiceImpl.loadingDictCache();
}
`}
`
此时已经整合完成。
配置Maven插件来使用Flyway {#%E9%85%8D%E7%BD%AEmaven%E6%8F%92%E4%BB%B6%E6%9D%A5%E4%BD%BF%E7%94%A8flyway}
在pom.xml(ruoyi)中增加如下
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
<plugin>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-maven-plugin</artifactId>
<version>5.2.4</version>
<configuration>
<url>jdbc:mysql://localhost:3306/name</url>
<user>root</user>
<password>123456</password>
<locations>
<location>classpath:db/migration</location>
</locations>
</configuration>
</plugin>
配置好之后即可使用maven插件来进行操作