Springboot集成Flyway适用于多数据源
1. Flyway
可以将初始化sql在项目启动时候执行,取代单独的DBN更新包
2. 依赖
-
<dependency>
-
<groupId>org.flywaydb</groupId>
-
<artifactId>flyway-core</artifactId>
-
<version>5.2.1</version>
-
</dependency>
3. 配置说明(springboot配置版本)
配置名 | 配置说明 |
---|---|
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.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. |
4. API方式集成
-
package com.hz.pro.artifact.config.migration;
-
-
import org.flywaydb.core.Flyway;
-
import org.flywaydb.core.api.FlywayException;
-
import org.slf4j.Logger;
-
import org.slf4j.LoggerFactory;
-
import org.springframework.beans.factory.annotation.Autowired;
-
import org.springframework.context.ApplicationContext;
-
import org.springframework.context.annotation.DependsOn;
-
import org.springframework.stereotype.Component;
-
-
import javax.annotation.PostConstruct;
-
import javax.sql.DataSource;
-
-
/**
-
* @author pp_lan
-
* @description
-
*/
-
-
-
public class DatabaseFlywayMigration {
-
-
private static final Logger LOGGER = LoggerFactory.getLogger(DatabaseFlywayMigration.class);
-
-
-
private ApplicationContext context;
-
-
-
public void init() {
-
-
initDataSource("dataSource");
-
initDataSource("slaveDataSource");
-
-
}
-
-
public void initDataSource(String dataSourceName) {
-
-
Flyway flyway = null;
-
try {
-
LOGGER.info("【初始化{}开始】", dataSourceName);
-
-
DataSource dataSource = context.getBean(dataSourceName, DataSource.class);
-
flyway = Flyway.configure()
-
.dataSource(dataSource)
-
.locations("/db/migration")
-
.table("t_version")
-
.encoding("utf-8")
-
.outOfOrder(true)
-
.baselineOnMigrate(true)
-
.validateOnMigrate(true)
-
.load();
-
-
flyway.migrate();
-
LOGGER.info("===========【初始化{}成功】===========", dataSourceName);
-
-
} catch (FlywayException e) {
-
if (flyway != null) {
-
flyway.repair();
-
}
-
LOGGER.error("===========【初始化{}失败】===========", dataSourceName, e);
-
}
-
-
}
-
-
}
5. 屏蔽配置启动方式
springboot中默认使用flyway配置进行加载,使用api方式进行灵活配置时候需要将其(FlywayAutoConfiguration)进行屏蔽,不然会报错,部分报错信息及屏蔽方式如下所示
5.1 报错信息
-
Caused by: java.lang.reflect.InvocationTargetException: null
-
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
-
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
-
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
-
at java.lang.reflect.Method.invoke(Method.java:498)
-
at org.springframework.boot.autoconfigure.flyway.FlywayMigrationInitializer.afterPropertiesSet(FlywayMigrationInitializer.java:70)
-
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1863)
-
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800)
-
... 18 common frames omitted
-
Caused by: org.flywaydb.core.api.FlywayException: Found non-empty schema(s) `xxxx` without schema history table! Use baseline() or set baselineOnMigrate to true to initialize the schema history table.
-
at org.flywaydb.core.Flyway$1.execute(Flyway.java:1371)
-
at org.flywaydb.core.Flyway$1.execute(Flyway.java:1341)
-
at org.flywaydb.core.Flyway.execute(Flyway.java:1696)
-
at org.flywaydb.core.Flyway.migrate(Flyway.java:1341)
-
... 25 common frames omitted
5.2 屏蔽方法
-
import org.springframework.boot.SpringApplication;
-
import org.springframework.boot.autoconfigure.SpringBootApplication;
-
import org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration;
-
-
-
public class HzBaseApplication {
-
-
public static void main(String[] args) {
-
SpringApplication.run(HzBaseApplication.class, args);
-
}
-
-
}
6. 执行结果
6.1 日志
-
2023-05-25 10:23:22.596 INFO 161831 --- [ main] c.h.p.a.c.m.DatabaseFlywayMigration : 【初始化dataSource开始】
-
2023-05-25 10:23:22.607 INFO 161831 --- [ main] o.f.c.internal.license.VersionPrinter : Flyway Community Edition 5.2.1 by Boxfuse
-
2023-05-25 10:23:22.612 INFO 161831 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
-
2023-05-25 10:23:22.917 INFO 161831 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
-
2023-05-25 10:23:22.943 WARN 161831 --- [ main] o.f.c.internal.database.base.Database : Flyway upgrade recommended: PostgreSQL 14.2 is newer than this version of Flyway and support has not been tested.
-
2023-05-25 10:23:23.140 INFO 161831 --- [ main] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.089s)
-
2023-05-25 10:23:23.291 INFO 161831 --- [ main] o.f.core.internal.command.DbMigrate : Current version of schema "public": 1.0.0
-
2023-05-25 10:23:23.291 WARN 161831 --- [ main] o.f.core.internal.command.DbMigrate : outOfOrder mode is active. Migration of schema "public" may not be reproducible.
-
2023-05-25 10:23:23.305 INFO 161831 --- [ main] o.f.core.internal.command.DbMigrate : Schema "public" is up to date. No migration necessary.
-
2023-05-25 10:23:23.353 INFO 161831 --- [ main] c.h.p.a.c.m.DatabaseFlywayMigration : ===========【初始化dataSource成功】===========
-
2023-05-25 10:23:23.353 INFO 161831 --- [ main] c.h.p.a.c.m.DatabaseFlywayMigration : 【初始化slaveDataSource开始】
-
2023-05-25 10:23:23.368 INFO 161831 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-2 - Starting...
-
2023-05-25 10:23:23.526 INFO 161831 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-2 - Start completed.
-
2023-05-25 10:23:23.542 WARN 161831 --- [ main] o.f.c.internal.database.base.Database : Flyway upgrade recommended: PostgreSQL 14.2 is newer than this version of Flyway and support has not been tested.
-
2023-05-25 10:23:23.709 INFO 161831 --- [ main] o.f.core.internal.command.DbValidate : Successfully validated 1 migration (execution time 00:00.068s)
-
2023-05-25 10:23:23.885 INFO 161831 --- [ main] o.f.core.internal.command.DbMigrate : Current version of schema "public": 1.0.0
-
2023-05-25 10:23:23.886 WARN 161831 --- [ main] o.f.core.internal.command.DbMigrate : outOfOrder mode is active. Migration of schema "public" may not be reproducible.
-
2023-05-25 10:23:23.902 INFO 161831 --- [ main] o.f.core.internal.command.DbMigrate : Schema "public" is up to date. No migration necessary.
-
2023-05-25 10:23:23.949 INFO 161831 --- [ main] c.h.p.a.c.m.DatabaseFlywayMigration : ===========【初始化slaveDataSource成功】===========
6.2 数据库验证
7. 扩展多数据源
多数据源通过buildConfiguration构建多个配置(数据源及script脚本),执行多次即可完成多数据源sql的初始化。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgjgaje
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13