91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

springboot集成flyway自動創表的配置教程

發布時間:2021-06-26 09:07:29 來源:億速云 閱讀:181 作者:chen 欄目:開發技術

這篇文章主要介紹“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",命名為:Vx.x.x__ xxx.sql數據庫文件。

springboot集成flyway自動創表的配置教程

一般的springboot項目進行到這里,flyway配置就完成了,不過ruoyi項目到這里啟動的話,還是會報錯,主要是有三個地方用到了@PostConstruct注解,系統需要從數據庫中加載配置信息,并且是構造bean后就執行,此時flaway的數據庫配置加載還沒執行,如果是第一次執行項目的話,數據庫都還沒有表結構信息,所以會報錯。
直接改若依項目項目啟動是加載到緩存的配置的這三個地方的加載時機就行了。
首先,注釋掉三個地方的配置加載。
ruoyi-systemcom.ruoyi.system.service.impl.SysConfigServiceImpl的參數緩存配置

springboot集成flyway自動創表的配置教程

ruoyi-systemcom.ruoyi.system.service.impl.SysDictTypeServiceImpl的字典信息緩存配置

springboot集成flyway自動創表的配置教程

ruoyi-quartzcom.ruoyi.quartz.service.impl.SysJobServiceImpl的定時任務配置

springboot集成flyway自動創表的配置教程

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自動創表的配置教程”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

永善县| 太保市| 东阿县| 宁蒗| 九龙城区| 高邑县| 武安市| 阿合奇县| 井研县| 永新县| 白沙| 全南县| 绥芬河市| 昌宁县| 铜山县| 万山特区| 高碑店市| 荣成市| 剑阁县| 离岛区| 临城县| 朝阳市| 如东县| 临清市| 南昌市| 奉贤区| 金湖县| 吴旗县| 通海县| 广水市| 连江县| 阜宁县| 樟树市| 福鼎市| 常山县| 巴林左旗| 鄯善县| 仁寿县| 稷山县| 瑞安市| 班戈县|