• SpringBoot项目集成Flyway配置执行顺序问题


     问题描述 :程序里把大部分配置都放到数据库里了,也就是说程序启动有些配置要先去查数据库,拿到数据后,再继续配置相关的服务,比如 WebMvcConfigurerAdapter  资源路径配置等初始化工作,这时候就出问题了,flyway还没有执行,数据库里还没有数据,就开始配置其它的一些服务了,到数据库里查不到数据,配置自然就报错了

       

        问题解决思路:自然是控制flyway的执行顺序,让flyway执行在依赖查询数据库配置的服务之前。 问题是springboot集成flyway是自动配置的,也就是说我们要想控制flyway的配置顺序,就得自己重写flyway的配置。

    import javax.annotation.PostConstruct;
    import javax.sql.DataSource;
    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.annotation.Configuration;
     
     
    @Configuration
    public class FlywayConfig {
     
        @Autowired
        private DataSource dataSource;
     
        private Logger logger = LoggerFactory.getLogger(this.getClass());
     
     
        @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.repair();
     
                logger.error("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);
        }
    }
  • 相关阅读:
    Windows下memcache安装使用
    Linux 下memcache安装及使用
    C语言第五节scanf函数
    C语言第四节数据类型、常量、变量
    C语言第三节关键字、标识符、注释
    C语言第一节 C语言程序与开发工具
    快到而立之年了,可是能撑得起而立吗?
    idea-安装SequenceDiagram插件-生成时序图
    mysql中 查询一对多关系的时候,获取最新的一条
    判断多个时间段区间是否有重叠
  • 原文地址:https://www.cnblogs.com/javakangkang/p/14149780.html
Copyright © 2020-2023  润新知