SpringBoot項目集成Flyway配置執行順序問題解決方法

      問題描述 :程序裏把大部分配置都放到數據庫裏了,也就是說程序啓動有些配置要先去查數據庫,拿到數據後,再繼續配置相關的服務,比如 WebMvcConfigurerAdapter  資源路徑配置等初始化工作,這時候就出問題了,flyway還沒有執行,數據庫裏還沒有數據,就開始配置其它的一些服務了,到數據庫裏查不到數據,配置自然就報錯了

   

    問題解決思路:自然是控制flyway的執行順序,讓flyway執行在依賴查詢數據庫配置的服務之前。 問題是springboot集成flyway是自動配置的,也就是說我們要想控制flyway的配置順序,就得自己重寫flyway的配置。

    

   問題解決方案:

       1、重寫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);
    }
}

 

     3、使用Spring @DependsOn控制bean加載順序

@Configuration
@DependsOn("flywayConfig")
public class MyWebMvcConfigurerAdapter extends WebMvcConfigurerAdapter

至此問題解決。

總結:很多場景beanA依賴beanB,都可以通過@DependsOn來告訴springbean容器beanB先執行

 

參考資料:https://blog.csdn.net/neweastsun/article/details/78775371

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章