您好,登錄后才能下訂單哦!
這篇文章主要介紹“springboot集成flyway自動創表的配置教程”,在日常操作中,相信很多人在springboot集成flyway自動創表的配置教程問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”springboot集成flyway自動創表的配置教程”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
Flayway是一款數據庫版本控制管理工具,,支持數據庫版本自動升級,Migrations可以寫成sql腳本,也可以寫在java代碼里;不僅支持Command Line和java api ,也支持Build構建工具和Spring boot,也可以在分布式環境下能夠安全可靠安全地升級數據庫,同時也支持失敗恢復。
Flyway最核心的就是用于記錄所有版本演化和狀態的MetaData表,Flyway首次啟動會創建默認名為SCHEMA_VERSION的元素局表。 表中保存了版本,描述,要執行的sql腳本等;
在ruoyi-admin這個module里面添加flyway依賴
<dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> </dependency> <!-- 不是必須的 --> <build> <plugins> <plugin> <groupId>org.flywaydb</groupId> <artifactId>flyway-maven-plugin</artifactId> <version>5.2.1</version> </plugin> </plugins> </build>
yml 配置flyway
spring: # 配置flyway數據版本管理 flyway: enabled: true baseline-on-migrate: true clean-on-validation-error: false sql-migration-prefix: V sql-migration-suffixes: .sql locations: classpath:db/migration/mysql
配置sql腳本
在若依項目中的sql目錄下有兩個初始化sql腳本,在ruoyi-admin模塊下的"resources/db/migration/mysql
",命名為:V
x.x.x__
xxx.sql
數據庫文件。
一般的springboot項目進行到這里,flyway配置就完成了,不過ruoyi項目到這里啟動的話,還是會報錯,主要是有三個地方用到了@PostConstruct
注解,系統需要從數據庫中加載配置信息,并且是構造bean后就執行,此時flaway的數據庫配置加載還沒執行,如果是第一次執行項目的話,數據庫都還沒有表結構信息,所以會報錯。
直接改若依項目項目啟動是加載到緩存的配置的這三個地方的加載時機就行了。
首先,注釋掉三個地方的配置加載。ruoyi-system
中com.ruoyi.system.service.impl.SysConfigServiceImpl
的參數緩存配置
ruoyi-system
中com.ruoyi.system.service.impl.SysDictTypeServiceImpl
的字典信息緩存配置
ruoyi-quartz
中com.ruoyi.quartz.service.impl.SysJobServiceImpl
的定時任務配置
在ruoyi-system
中新增一個配置類com.ruoyi.system.config.RuntimeConfig
,內容如下,在項目加載完成后flyaway加載完成后再執行這些參數的緩存配置。
import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextRefreshedEvent; import org.springframework.stereotype.Component; import java.util.List; /** * * @author: 云諾 * @date: 2021/6/25 * @description: 將項目啟動后flyway創建好表加載到緩存 */ @Component public class RuntimeConfig implements ApplicationListener<ContextRefreshedEvent> { private final static Logger LOGGER = LoggerFactory.getLogger(RuntimeConfig.class); @Autowired private SysConfigMapper configMapper; @Autowired private SysDictTypeMapper dictTypeMapper; @Autowired private SysDictDataMapper dictDataMapper; @Autowired private Scheduler scheduler; @Autowired private SysJobMapper jobMapper; /** * 項目啟動時,初始化參數 */ @Override public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) { LOGGER.info("init Param ..."); this.initParam(); LOGGER.info("init dict ..."); this.initDict(); try { LOGGER.info("init job ..."); this.initJob(); } catch (SchedulerException e) { e.printStackTrace(); } catch (TaskException e) { e.printStackTrace(); } } /** * 初始化定時任務信息到緩存 * * @throws SchedulerException * @throws TaskException */ public void initJob() throws SchedulerException, TaskException { scheduler.clear(); List<SysJob> jobList = jobMapper.selectJobAll(); for (SysJob job : jobList) { ScheduleUtils.createScheduleJob(scheduler, job); } } /** * 初始化參數到緩存 */ public void initParam() { List<SysConfig> configsList = configMapper.selectConfigList(new SysConfig()); for (SysConfig config : configsList) { CacheUtils.put(getCacheName(), getCacheKey(config.getConfigKey()), config.getConfigValue()); } } /** * 初始化字典到緩存 */ public void initDict() { List<SysDictType> dictTypeList = dictTypeMapper.selectDictTypeAll(); for (SysDictType dictType : dictTypeList) { List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(dictType.getDictType()); DictUtils.setDictCache(dictType.getDictType(), dictDatas); } } /** * 設置cache key * * @param configKey 參數鍵 * @return 緩存鍵key */ private String getCacheKey(String configKey) { return Constants.SYS_CONFIG_KEY + configKey; } /** * 獲取cache name * * @return 緩存名 */ private String getCacheName() { return Constants.SYS_CONFIG_CACHE; } }
到這里就可以正常啟動項目了
到此,關于“springboot集成flyway自動創表的配置教程”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。