标题是ignore-migration-patterns使用,其实所有团队(企业级)特性都可以使用,只是要按照我给的思路研究下就可以了,其实也很简单,只是改配置。
由于是破解的,直接放开到网上不太好,我就搞了一个vip,进行限流
由于我的mysql是5.7的,所以依赖是
-
- <dependency>
- <groupId>org.flywaydbgroupId>
- <artifactId>flyway-coreartifactId>
- <version>7.15.0version>
- dependency>
以下解决方案都是采用这个版本来进行的,其他版本未研究,如果需要可以根据我这把思路进行研究即可
背景:
由于公司环境比较多,同时项目依赖产品进行定制化,那意味着定制化项目的sql和在产品里不能使用,但是产品你的sql可以在定制化项目里使用,就是父子关系,但是具体操作时就会报错
一、当开启validate-on-migrate 校验时,父项目找不到子项目的文件就会报错
Detected applied migration not resolved locally: 1.0.3000. If you removed this migration intentionally, run repair to mark the migration as deleted.
二、这个问题要解决,经过查看官网文档 ;
有两种解决方案
1、validate-on-migrate 进行关闭,但是关闭后所有的校验都无法使用了,,就是放开式,建议不用使用该方案;因为后期管理分混乱
2、通过查看官网文档,
ignoreMigrationPatterns 这个配置可以满足我,大家可以看看;当我配置后就报错了,
提示是商业版本的,那不就gg了吗
三、商业版本的特性怎么使用呢?
1、推荐购买商业版本
2、按照我的思路进行破解
根据上面发现
校验是通过加载配置抛出异常的,源码是有的,那意味着,我只要在初始化flyway之前把这个配置配置上去就可以了(这里有个前提,是所有功能的在这个版本都是有的,只是通过配置进行加载的,这还是可以破解,不像国产的开源,直接去除了源代码,破解了 也没办法使用);研究了通过spring定义bean定义时进行调整,发现太麻烦,第二个通过配置文件加载时也不行,因为设计到flyway的核心类进行加载,第三个就是我这边解决方案,通过自动注入方式进行调整
也就是重写 FlywayAutoConfiguration 这个类;重写比较简单,把这个类的源码拷贝下来,放到项目里,
这里所有配置都可以调整
我这边具体调整在
设置true
即可
最后的最后的别忘记了加
@Primary 这个组件,大家都懂了吧,也就是在springboot加载flyway时动了手脚
这样配置就生效了;
启动也就正常了
付源码:
-
-
-
- /*
- * Copyright 2012-2021 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
- import org.flywaydb.core.Flyway;
- import org.flywaydb.core.api.MigrationVersion;
- import org.flywaydb.core.api.callback.Callback;
- import org.flywaydb.core.api.configuration.FluentConfiguration;
- import org.flywaydb.core.api.migration.JavaMigration;
- import org.springframework.beans.factory.ObjectProvider;
- import org.springframework.boot.autoconfigure.AutoConfigureAfter;
- import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
- import org.springframework.boot.autoconfigure.condition.*;
- import org.springframework.boot.autoconfigure.flyway.*;
- import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
- import org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration;
- import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
- import org.springframework.boot.context.properties.ConfigurationPropertiesBinding;
- import org.springframework.boot.context.properties.EnableConfigurationProperties;
- import org.springframework.boot.context.properties.PropertyMapper;
- import org.springframework.boot.jdbc.DataSourceBuilder;
- import org.springframework.boot.jdbc.DatabaseDriver;
- import org.springframework.boot.sql.init.dependency.DatabaseInitializationDependencyConfigurer;
- import org.springframework.context.annotation.*;
- import org.springframework.core.convert.TypeDescriptor;
- import org.springframework.core.convert.converter.GenericConverter;
- import org.springframework.core.io.R