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

您的位置:首頁技術(shù)文章
文章詳情頁

SpringBoot使用flyway初始化數(shù)據(jù)庫

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

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

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

配置文件

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配置進(jìn)行遷移操作 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;

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

無需將初始化語句硬編碼再讓Statement執(zhí)行 當(dāng)數(shù)據(jù)庫選型進(jìn)行變更時(shí)只需再配置文件中進(jìn)行修改相應(yīng)的初始化語句 SpringBoot可以直接以字符串列表進(jìn)行讀取,開發(fā)過程中使用起來更加靈活,而不用去解析SQL文件 數(shù)據(jù)庫初始化器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最后一個(gè) ’/’ 用于分割具體 schema?參數(shù) int lastSplitIndex = url.lastIndexOf(’/’); // 獲取spring.datasource.url具體數(shù)據(jù)庫schema前的jdbc url String addressUrl = url.substring(0, lastSplitIndex); // 直連數(shù)據(jù)庫地址: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配置進(jìn)行建庫與數(shù)據(jù)庫配置 // executeUpdate:執(zhí)行給定的SQL語句,該語句可以是INSERT,UPDATE或DELETE語句或不返回任何內(nèi)容的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); }}執(zhí)行效果圖

SpringBoot使用flyway初始化數(shù)據(jù)庫

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

SpringBoot使用flyway初始化數(shù)據(jù)庫

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

以上就是SpringBoot使用flyway初始化數(shù)據(jù)庫的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot 初始化數(shù)據(jù)庫的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Spring
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
中文字幕av亚洲精品一部二部| 影视先锋久久| 欧美日韩亚洲三区| 日韩精品免费观看视频| 91成人超碰| 色欧美自拍视频| 免费久久99精品国产自在现线| 国产精品天堂蜜av在线播放| 精品一区欧美| 国产亚洲精品v| 日韩精品免费一区二区夜夜嗨| 免费观看久久久4p| 91欧美在线| 91av一区| 好看的亚洲午夜视频在线| 快she精品国产999| 国产一区二区三区四区二区| 宅男噜噜噜66国产日韩在线观看| 久久久久蜜桃| 国产精品xvideos88| 久热综合在线亚洲精品| 久久精品资源| 欧美日韩国产亚洲一区| 先锋影音国产一区| 中文在线不卡| 日韩成人亚洲| 成人国产综合| 日韩一区二区三区精品| 石原莉奈在线亚洲二区| 久久婷婷国产| 激情综合网站| 韩国久久久久久| 国产成人免费精品| 国产亚洲字幕| 国产精品99一区二区| 精品三级av在线导航| 精品视频网站| 精品亚洲二区| 久久亚洲精品中文字幕| 日本亚洲最大的色成网站www| 欧美激情在线精品一区二区三区| 精品91福利视频| 中文字幕在线免费观看视频| 国际精品欧美精品| 久久影院资源站| 国产精品探花在线观看| 69堂精品视频在线播放| 国产一区二区三区不卡视频网站| 成人一区不卡| 老司机免费视频一区二区| 日韩和欧美一区二区| 国产视频一区免费看| 日韩精品一区二区三区中文| 国产极品久久久久久久久波多结野| 亚洲欧洲美洲国产香蕉| 国产亚洲电影| 在线日韩视频| 午夜av成人| 亚洲综合中文| 久久不见久久见中文字幕免费| 久久99国产精品视频| 亚洲精品国模| 精品三级国产| 美女精品在线观看| 亚洲成人日韩| 一区福利视频| 91亚洲国产成人久久精品| 婷婷激情综合| 亚洲日本免费电影| 亚洲精品动态| 欧美韩一区二区| 亚洲精品一二| 国产一区二区三区天码| 日韩午夜免费| 国产精品1区| 丁香婷婷久久| 日本亚洲三级在线| 午夜影院一区| 国产精品探花在线观看| 在线国产一区二区| 久久久久久久久成人| 亚洲黄页一区| 国产精品亚洲欧美日韩一区在线| 激情婷婷久久| 亚洲欧美日韩高清在线| 国产 日韩 欧美 综合 一区| 极品裸体白嫩激情啪啪国产精品| 精品视频高潮| 欧美手机在线| 国产91欧美| 国产日韩欧美三区| 激情久久久久久| 伊人久久成人| 精精国产xxxx视频在线野外| 久久av免费看| 国产亚洲精品自拍| 视频一区欧美日韩| 久久麻豆精品| 国精品一区二区三区| 青青久久av| 综合激情视频| 欧美午夜三级| 日本午夜精品| 日韩av三区| 国产香蕉精品| 成人国产精品一区二区网站| 麻豆久久久久久| 精品91久久久久| 国产一区二区精品久| 好吊日精品视频| 国产中文在线播放| 91精品国产自产精品男人的天堂| 久久久天天操| 久久久91麻豆精品国产一区| 热久久国产精品| 99久久夜色精品国产亚洲1000部| 欧美一区免费| 国产韩日影视精品| 天堂日韩电影| 精品一区二区三区在线观看视频| 中文在线日韩| 亚洲精品高潮| 伊人久久一区| 99久久久久国产精品| 日韩av在线播放中文字幕| 免费日韩av| 日韩福利视频网| 日本精品不卡| 日韩av网站在线免费观看| 欧美一区在线观看视频| 美女久久精品| 激情综合网站| 91精品韩国| 国产精品网在线观看| 成人在线免费观看网站| 午夜影院一区| 亚洲我射av| 国产一区二区三区不卡av| 日韩高清成人在线| 免费久久99精品国产自在现线| 久久不见久久见中文字幕免费| 亚洲精品国产偷自在线观看| 中文字幕一区久| 精品国产a一区二区三区v免费| 在线一区视频观看| 91精品国产自产观看在线 | 日韩中文字幕区一区有砖一区| 日韩一区二区三区在线看| 成人精品高清在线视频| 国产日韩一区二区三区在线| 国内在线观看一区二区三区 | 欧美日韩a区| 亚洲欧美久久久| 婷婷亚洲五月| 尹人成人综合网| 免费视频最近日韩| 蜜臀久久99精品久久一区二区| 日韩有码av| 黄色国产精品| 日韩欧美在线精品| 日韩精品久久理论片| 亚洲另类黄色| 性欧美精品高清| 手机在线电影一区| 日本午夜精品一区二区三区电影| 91青青国产在线观看精品| 国产成人久久精品一区二区三区| 美腿丝袜在线亚洲一区| 麻豆国产一区| 美女久久久久| 蜜桃成人av| 中文字幕乱码亚洲无线精品一区| 日韩成人精品一区二区三区 | 国产一区二区三区日韩精品| 国产精品网站在线看| 国产中文在线播放| 在线亚洲自拍| 999久久久亚洲| 欧美成人午夜| 日本欧美一区二区| 精品久久精品| 欧美资源在线| 欧美日本不卡| 中文字幕在线视频网站| 蜜桃免费网站一区二区三区| 国产一区二区三区日韩精品| 99成人在线| 欧美成人a交片免费看| 在线日韩中文| 国产亚洲欧美日韩在线观看一区二区| а√天堂8资源在线| 97人人精品| 7777精品| 高清一区二区三区av| 极品裸体白嫩激情啪啪国产精品| 国产欧美日韩免费观看| 日韩精品欧美激情一区二区| 久久久精品国产**网站| 99pao成人国产永久免费视频| 亚洲日韩中文字幕一区|