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);
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM