最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot集成flyway自動創(chuàng)表的詳細配置

 更新時間:2021年06月25日 16:45:47   作者:小諾大人  
Flayway是一款數(shù)據(jù)庫版本控制管理工具,支持數(shù)據(jù)庫版本自動升級,Migrations可以寫成sql腳本,也可以寫在java代碼里;本文通過實例代碼給大家介紹springboot集成flyway自動創(chuàng)表的詳細過程,感興趣的朋友一起看看吧

Flayway是一款數(shù)據(jù)庫版本控制管理工具,,支持數(shù)據(jù)庫版本自動升級,Migrations可以寫成sql腳本,也可以寫在java代碼里;不僅支持Command Line和java api ,也支持Build構(gòu)建工具和Spring boot,也可以在分布式環(huán)境下能夠安全可靠安全地升級數(shù)據(jù)庫,同時也支持失敗恢復。

Flyway最核心的就是用于記錄所有版本演化和狀態(tài)的MetaData表,F(xiàn)lyway首次啟動會創(chuàng)建默認名為SCHEMA_VERSION的元素局表。 表中保存了版本,描述,要執(zhí)行的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數(shù)據(jù)版本管理
    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數(shù)據(jù)庫文件。

在這里插入圖片描述

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

在這里插入圖片描述

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

在這里插入圖片描述

ruoyi-quartzcom.ruoyi.quartz.service.impl.SysJobServiceImpl的定時任務(wù)配置

在這里插入圖片描述

ruoyi-system中新增一個配置類com.ruoyi.system.config.RuntimeConfig,內(nèi)容如下,在項目加載完成后flyaway加載完成后再執(zhí)行這些參數(shù)的緩存配置。

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創(chuàng)建好表加載到緩存
 */
@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;

    /**
     * 項目啟動時,初始化參數(shù)
     */
    @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();
        }
    }

    /**
     * 初始化定時任務(wù)信息到緩存
     *
     * @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);
        }
    }



    /**
     * 初始化參數(shù)到緩存
     */
    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);
        }
    }

    /**
     * 設(shè)置cache key
     *
     * @param configKey 參數(shù)鍵
     * @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自動創(chuàng)表的詳細內(nèi)容,更多關(guān)于springboot自動創(chuàng)表的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringBoot整合RabbitMQ實現(xiàn)延遲隊列和死信隊列

    SpringBoot整合RabbitMQ實現(xiàn)延遲隊列和死信隊列

    RabbitMQ的死信隊列用于接收其他隊列中的“死信”消息,所謂“死信”,是指滿足一定條件而無法被消費者正確處理的消息,死信隊列通常與RabbitMQ的延遲隊列一起使用,本文給大家介紹了SpringBoot整合RabbitMQ實現(xiàn)延遲隊列和死信隊列,需要的朋友可以參考下
    2024-06-06
  • SpringSecurity 自定義認證登錄的項目實踐

    SpringSecurity 自定義認證登錄的項目實踐

    本文主要介紹了SpringSecurity 自定義認證登錄的項目實踐,以手機驗證碼登錄為例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-08-08
  • spring的@Transactional注解用法解讀

    spring的@Transactional注解用法解讀

    這篇文章主要介紹了spring的@Transactional注解用法解讀,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • Java線程池流程編排運用實戰(zhàn)源碼

    Java線程池流程編排運用實戰(zhàn)源碼

    這篇文章主要介紹了Java線程池流程編排運用實戰(zhàn)源碼,就在流程引擎的基礎(chǔ)上運用?ThreadPoolExecutor,使用線程池實現(xiàn)?SpringBean?的異步執(zhí)行
    2022-03-03
  • java反射機制及beanUtils的實現(xiàn)原理分析

    java反射機制及beanUtils的實現(xiàn)原理分析

    本文介紹了Java的反射機制、VO、DTO、PO的概念以及BeanUtils的實現(xiàn)原理和簡單示例,通過反射可以在運行時動態(tài)操作類、方法和字段,BeanUtils用于在不同bean之間進行屬性復制
    2024-12-12
  • 非常全面的Java異常處理(全文干貨,值得收藏)

    非常全面的Java異常處理(全文干貨,值得收藏)

    這篇文章主要給大家介紹了非常全面的Java異常處理的相關(guān)資料,全文干貨,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • Spring boot 整合CXF開發(fā)web service示例

    Spring boot 整合CXF開發(fā)web service示例

    這篇文章主要介紹了Spring boot 整合CXF開發(fā)web service示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • spring cloud 的監(jiān)控turbine-rabbitmq的示例

    spring cloud 的監(jiān)控turbine-rabbitmq的示例

    這篇文章主要介紹了spring cloud 的監(jiān)控turbine-rabbitmq的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • 詳解Java中的字節(jié)碼增強技術(shù)

    詳解Java中的字節(jié)碼增強技術(shù)

    字節(jié)碼增強技術(shù)就是一類對現(xiàn)有字節(jié)碼進行修改或者動態(tài)生成全新字節(jié)碼文件的技術(shù)。本文將通過示例詳細說說Java的字節(jié)碼增強技術(shù),需要的可以參考一下
    2022-10-10
  • mybatis-plus處理blob字段的完整示例代碼

    mybatis-plus處理blob字段的完整示例代碼

    在Spring Boot項目中使用MyBatis-Plus處理longblob字段時,我們可以按照本文的步驟進行操作,假設(shè) longblob 存儲的是字符串數(shù)據(jù),本文給大家提供完整示例代碼,感興趣的朋友參考下
    2023-12-12

最新評論

神木县| 桓仁| 延津县| 云阳县| 曲松县| 玉树县| 甘孜县| 岑巩县| 中山市| 昌黎县| 清镇市| 牟定县| 陆良县| 安化县| 辽阳市| 温宿县| 荃湾区| 灵宝市| 乌兰浩特市| 贺州市| 西乌| 确山县| 邵东县| 始兴县| 新密市| 红桥区| 英德市| 苍山县| 霍邱县| 石棉县| 通州市| 石门县| 罗甸县| 滦南县| 朝阳县| 信丰县| 京山县| 阜新市| 克山县| 济南市| 保定市|