SpringBoot项⽬集成Flyway配置执⾏顺序问题
问题描述:程序⾥把⼤部分配置都放到数据库⾥了,也就是说程序启动有些配置要先去查数据库,拿到数据后,再继续配置相关的服务,⽐如WebMvcConfigurerAdapter  资源路径配置等初始化⼯作,这时候就出问题了,flyway还没有执⾏,数据库⾥还没有数据,就开始配置其它的⼀些服务了,到数据库⾥查不到数据,配置⾃然就报错了
问题解决思路:⾃然是控制flyway的执⾏顺序,让flyway执⾏在依赖查询数据库配置的服务之前。问题是springboot集成flyway是⾃动配置的,也就是说我们要想控制flyway的配置顺序,就得⾃⼰重写flyway的配置。
import javax.annotation.PostConstruct;
import javax.sql.DataSource;
import Flyway;
import api.FlywayException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
springframework依赖import org.springframework.beans.factory.annotation.Autowired;
import t.annotation.Configuration;
@Configuration
public class FlywayConfig {
@Autowired
private DataSource dataSource;
private Logger logger = Class());
@PostConstruct
public void migrate() {
Flyway flyway = new Flyway();
flyway.setDataSource(dataSource);
// 设置flyway扫描sql升级脚本、java升级脚本的⽬录路径或包路径(表⽰是src/main/resources/flyway下⾯,前缀默认为src/main/resources,因为这个路径默认在classpath下⾯)        flyway.setLocations("db/migration");
// 设置sql脚本⽂件的编码
flyway.setEncoding("UTF-8");
flyway.setOutOfOrder(true);
try {
flyway.migrate();
} catch (FlywayException e) {
<("Flyway配置加载出错",e);
}
}
}
    2、将flyway配置从springboot排除,避免springboot⾃动配置
@SpringBootApplication(exclude = {FlywayAutoConfiguration.class})
@EnableTransactionManagement
public class SiteServerApplication {
public static void main(String[] args) {
SpringApplication.run(SiteServerApplication.class, args);
}
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。