日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

SpringBoot使用flyway初始化數據庫

瀏覽:118日期:2023-03-22 17:58:21
概述

Flyway這款數據庫版本工具就算大家沒有使用過但也略有耳聞了,SpringBoot對該款工具進行集成的框架可以讓我們在啟動SpringBoot應用時自動去找SQL版本文件進行比對執行,但在遷移或初始化時往往還是需要先手動進行下數據庫的初始化配置,否則會把Unknown database的異常。 為了減少這一步所以個人就以SpringBoot的方式編碼在項目的啟動時自動進行數據庫的初始化,然后再執行版本文件。

自動建庫實現步驟具體思路 SpringBoot的配置項都會有相應的Properties屬性類,數據庫的屬性類為DataSourceProperties,flyway的屬性類為FlywayProperties,盡可能的使用其中的配置項而不額外添加自定義的配置 建庫與相關設置的語句一般不會對已存在的設置進行更改(如建庫建表時都是CREATE xxx IF NOT EXISTS),所以項目初始化時每次都執行也不會影響現有的數據庫配置,編碼時可以不用添加執行的前置判斷 代碼實現

配置文件

spring: profiles: include: database

application-database.yml

spring: datasource: url: jdbc:mysql://yourIp:3306/spring_boot_series?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&serverTimezone=GMT username: yourUsername password: yourPassword driver-class-name: com.mysql.cj.jdbc.Driver # 自動讀取spring.datasource配置進行遷移操作 flyway: # 版本遷移位置 locations: classpath:db baseline-version: 1.0.2 init-sqls: - SET @OLD_UNIQUE_CHECKS = @@UNIQUE_CHECKS, UNIQUE_CHECKS = 0; - SET @OLD_FOREIGN_KEY_CHECKS = @@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS = 0; - SET @OLD_SQL_MODE = @@SQL_MODE, SQL_MODE = ’ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION’; - CREATE SCHEMA IF NOT EXISTS `spring_boot_series` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

為了讓項目的配置結構更清晰,所以我把數據庫的相關配置都獨立到application-database.yml中。flyway的init-sqls配置是當獲取到SQL statement時會執行SQL語句列表,但需要注意的是如果spring.datasource.url連接不上,該塊語句是依舊無法被執行的,因為SpringBoot集成的flyway配置是通過spring.datasource的配置去連接數據庫的,如果url中的數據庫不存在,flyway的版本遷移就無法執行了。前文提到盡可能的使用SpringBoot原有的配置項,所以init-sqls其實是我配給自己用的。 個人通過init-sqls配置初始化語句與其它方式配置初始化想到的好處:

無需將初始化語句硬編碼再讓Statement執行 當數據庫選型進行變更時只需再配置文件中進行修改相應的初始化語句 SpringBoot可以直接以字符串列表進行讀取,開發過程中使用起來更加靈活,而不用去解析SQL文件 數據庫初始化器DatabaseInitializer

package io.wilson.flyway;import com.zaxxer.hikari.HikariDataSource;import lombok.AllArgsConstructor;import lombok.extern.slf4j.Slf4j;import org.springframework.boot.autoconfigure.flyway.FlywayProperties;import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;import org.springframework.stereotype.Component;import javax.annotation.PostConstruct;import java.sql.Connection;import java.sql.SQLException;import java.sql.Statement;/** * @author Wilson */@Slf4j@Component@AllArgsConstructorpublic class DatabaseInitializer { private final FlywayProperties flywayProperties; private final DataSourceProperties dataSourceProperties; @PostConstruct public void init() throws SQLException { log.info('DatabaseInitializer uses flyway init-sqls to initiate database'); String url = dataSourceProperties.getUrl(); // jdbc url最后一個 ’/’ 用于分割具體 schema?參數 int lastSplitIndex = url.lastIndexOf(’/’); // 獲取spring.datasource.url具體數據庫schema前的jdbc url String addressUrl = url.substring(0, lastSplitIndex); // 直連數據庫地址:jdbc:mysql://yourIp:port HikariDataSource dataSource = new HikariDataSource(); dataSource.setJdbcUrl(addressUrl); dataSource.setUsername(dataSourceProperties.getUsername()); dataSource.setPassword(dataSourceProperties.getPassword()); Connection connection = dataSource.getConnection(); Statement statement = connection.createStatement(); for (String sql : flywayProperties.getInitSqls()) { // 通過flyway的init-sqls配置進行建庫與數據庫配置 // executeUpdate:執行給定的SQL語句,該語句可以是INSERT,UPDATE或DELETE語句或不返回任何內容的SQL語句,例如SQL DDL語句。 statement.executeUpdate(sql); } statement.close(); connection.close(); dataSource.close(); log.info('DatabaseInitializer initialize completed'); }}簡單的主程序FlywayApplication

package io.wilson.flyway;import org.mybatis.spring.annotation.MapperScan;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;/** * @author Wilson */@SpringBootApplication@MapperScan('io.wilson.flyway.mapper')public class FlywayApplication { public static void main(String[] args) { SpringApplication.run(FlywayApplication.class, args); }}執行效果圖

SpringBoot使用flyway初始化數據庫

當項目啟動時可以看到DatabaseInitializer會先通過init-sqls進行數據庫的初始化,然后SpringBoot再初始化通用的數據源并執行SQL版本文件。圖中的create_database.sql文件存放的是init-sqls配置的語句,該文件不會被執行,可以忽略。

SpringBoot使用flyway初始化數據庫

附 如果對flyway不了解的可以看我之前的文章SpringBoot集成Flyway進行數據庫版本遷移管理 本文例子倉庫:spring-bootflyway-demo flyway官網文檔

以上就是SpringBoot使用flyway初始化數據庫的詳細內容,更多關于SpringBoot 初始化數據庫的資料請關注好吧啦網其它相關文章!

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
六月丁香综合| 国产一区二区亚洲| 老牛国内精品亚洲成av人片| 中文字幕亚洲精品乱码| 久久精品主播| 精品国产a一区二区三区v免费| 一区二区日韩免费看| 鲁大师成人一区二区三区 | 国产精品日韩久久久| 日韩精品1区| 免费久久久久久久久| 国产一区白浆| 久久国产电影| 日韩不卡一区二区| 成人在线免费观看网站| 国内亚洲精品| 久久激五月天综合精品| 日韩精品dvd| 亚洲一区二区小说| 国产精品网址| 蜜臀91精品国产高清在线观看| 日本亚洲视频在线| av高清一区| 国产一区 二区| 欧美91福利在线观看| 日本午夜精品视频在线观看| 手机在线电影一区| 亚洲精品乱码| 欧美日韩国产免费观看视频| 国产精品一区二区中文字幕| 欧美~级网站不卡| 国产精品嫩草影院在线看| 免费黄色成人| 久久尤物视频| 亚洲理论在线| 精品捆绑调教一区二区三区| 国产精品亚洲综合在线观看| 亚洲尤物在线| 91精品国产91久久久久久黑人| 国产精品亚洲欧美| 久久成人国产| 九九在线精品| 欧美亚洲国产精品久久| 91av亚洲| 色综合狠狠操| 日韩欧美国产精品综合嫩v| 国产精品欧美大片| 色综合视频一区二区三区日韩| 久久久精品区| 国产aⅴ精品一区二区四区| 国产欧美在线| 精品国产鲁一鲁****| 午夜欧美巨大性欧美巨大| 91tv亚洲精品香蕉国产一区| 亚洲一本视频| 亚洲久久在线| 精品无人区麻豆乱码久久久| 日韩精品专区| 丝袜美腿亚洲一区二区图片| 日韩精品欧美大片| 国产suv精品一区| 亚洲激情另类| 91国内精品| 亚洲啊v在线| 日韩久久精品| 宅男在线一区| 免费美女久久99| 国产欧美午夜| 首页国产精品| 国产美女一区| 欧美日韩视频免费看| 美女视频黄免费的久久| 日韩精品91| 亚洲日产av中文字幕| 国产精品国产三级在线观看| 国产v日韩v欧美v| 免费美女久久99| 国产一区不卡| 日av在线不卡| 欧美成人精品一级| 欧美色图国产精品| 国产乱码精品| 免费观看久久av| 国产精品一区高清| 亚洲成人精选| 国产精品一站二站| 欧洲毛片在线视频免费观看| 日韩高清国产一区在线| 免费观看亚洲| 国产精品国码视频| 鲁大师影院一区二区三区| 国产麻豆一区二区三区 | 精品国产三区在线| 伊人精品视频| 电影91久久久| 日本亚洲三级在线| 激情综合网址| 国产一区二区三区不卡av| 一区二区三区四区精品视频| 日韩综合在线| 国产精品视频首页| 综合激情视频| 欧美日韩精品免费观看视频完整| 国产日韩1区| 亚洲视频国产| 9色精品在线| 91精品啪在线观看国产18| 91精品国产经典在线观看| 亚洲一区二区毛片| 免费精品一区| 国产毛片精品| 国产日韩欧美一区二区三区| 亚洲影院天堂中文av色| 日韩国产欧美| 日韩高清成人| 日韩一区二区在线免费| 欧美韩日一区| 欧美三级精品| 天堂资源在线亚洲| 精品一区亚洲| 视频一区在线播放| 日韩中文字幕一区二区高清99| 夜久久久久久| 水蜜桃久久夜色精品一区的特点| 久久精品亚洲欧美日韩精品中文字幕| 国产999精品在线观看| 日韩在线二区| 亚洲女人av| 日本免费一区二区视频| 久久精品国产福利| 天堂俺去俺来也www久久婷婷| 亚洲精品成人一区| 国产欧美日韩亚洲一区二区三区| 国产日韩欧美在线播放不卡| 麻豆精品一区二区综合av| 视频在线不卡免费观看| 波多野结衣一区| 九九综合在线| 日韩在线观看一区二区三区| 国产精品天天看天天狠| 国产美女高潮在线观看| 欧美日韩精品免费观看视欧美高清免费大片 | 日韩专区视频网站| 国产精品嫩草影院在线看| 7777精品| 国产乱码精品一区二区三区亚洲人 | 久久精品播放| 91亚洲无吗| 蜜桃视频在线观看一区二区| 在线免费观看亚洲| 久久成人高清| 免费不卡在线观看| 亚洲国产欧美日本视频| 丝瓜av网站精品一区二区| 久久久国产精品一区二区中文| 午夜性色一区二区三区免费视频| 国产福利一区二区三区在线播放| 97精品一区二区| 欧美在线亚洲综合一区| 国产美女精品视频免费播放软件| 日韩一区三区| 国产亚洲第一伦理第一区| 99久精品视频在线观看视频| 天堂精品久久久久| 99成人在线视频| 国产精品久av福利在线观看| 一本色道久久精品| 日韩电影免费在线观看| 国产香蕉精品| 免播放器亚洲一区| 影视先锋久久| 久久国产欧美| 国产不卡一区| 国产精品一区2区3区| 美女国产一区| 欧美日韩视频| 欧美日韩精品一区二区视频| 国产中文欧美日韩在线| 88久久精品| 日韩福利在线观看| 亚洲精品自拍| 亚洲精品福利| 日本在线不卡视频一二三区| 亚洲免费在线| 亚洲影视一区二区三区| 亚洲一区国产一区| 激情综合在线| av不卡免费看| 亚洲毛片在线| 日本免费新一区视频| 国产亚洲高清一区| 国产精久久一区二区| 麻豆久久一区| 日韩欧美少妇| 激情综合网站| 蜜桃久久精品一区二区| 日韩三区四区| 国产精品久久久亚洲一区| 国产精品久久久久9999高清| 久久久久久久欧美精品|