国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

【jOOQ中文】3. 數(shù)據(jù)庫(kù)版本管理工具Flyway

AprilJ / 2760人閱讀

摘要:一簡(jiǎn)介什么是是獨(dú)立于數(shù)據(jù)庫(kù)的應(yīng)用管理跟蹤數(shù)據(jù)庫(kù)變更的數(shù)據(jù)庫(kù)版本管理工具。當(dāng)升級(jí)完成時(shí),數(shù)據(jù)庫(kù)表結(jié)構(gòu)及數(shù)據(jù)應(yīng)當(dāng)與升級(jí)后的產(chǎn)品版本保持一致。

在執(zhí)行數(shù)據(jù)庫(kù)遷移時(shí),我們推薦使用jOOQ與Flyway - 數(shù)據(jù)庫(kù)遷移輕松。 在本章中,我們將簡(jiǎn)單的來使用這兩個(gè)框架。

一、Flyway簡(jiǎn)介

什么是Flyway

Flyway是獨(dú)立于數(shù)據(jù)庫(kù)的應(yīng)用、管理、跟蹤數(shù)據(jù)庫(kù)變更的數(shù)據(jù)庫(kù)版本管理工具。
Flyway的項(xiàng)目主頁(yè)是:https://flywaydb.org/

為什么使用Flyway

不同的開發(fā)人員在開發(fā)產(chǎn)品特性時(shí),都有可能更新數(shù)據(jù)庫(kù)(添加新表,新的約束等)。當(dāng)開發(fā)人員完成工作并提交代碼時(shí),代碼會(huì)被合并到主分支并在測(cè)試服務(wù)器上執(zhí)行單元測(cè)試與集成測(cè)試。我們?cè)谀膫€(gè)環(huán)節(jié)來執(zhí)行數(shù)據(jù)庫(kù)的更新操作呢?由QA 部門手工執(zhí)行sql 腳本?或者我們開發(fā)一斷程序自動(dòng)執(zhí)行數(shù)據(jù)庫(kù)更新?以什么順序來執(zhí)行這些更新腳本?這些問題同樣存在于生產(chǎn)環(huán)境。

我們的產(chǎn)品部署在不同的客戶服務(wù)器上,以及很多的測(cè)試、聯(lián)調(diào)、實(shí)驗(yàn)局、銷售環(huán)境上。不同的客戶和測(cè)試環(huán)境上都部署著不同版本的產(chǎn)品。當(dāng)他們需要升級(jí)他們的產(chǎn)品到新的版本時(shí),我們不僅需要讓他們的管理員可以升級(jí)產(chǎn)品到新的版本,同時(shí)需要保留他們的已有數(shù)據(jù)。在升級(jí)產(chǎn)品的步驟中,我們清楚地知道客戶數(shù)據(jù)庫(kù)的當(dāng)前版本,以及需要在該數(shù)據(jù)庫(kù)上執(zhí)行哪些數(shù)據(jù)庫(kù)更新腳本,來更新數(shù)據(jù)庫(kù)表結(jié)構(gòu)與數(shù)據(jù)庫(kù)中已存在的數(shù)據(jù)。當(dāng)升級(jí)完成時(shí),數(shù)據(jù)庫(kù)表結(jié)構(gòu)及數(shù)據(jù)應(yīng)當(dāng)與升級(jí)后的產(chǎn)品版本保持一致。

當(dāng)升級(jí)失敗時(shí)(比如在升級(jí)過程中出現(xiàn)網(wǎng)絡(luò)連接失敗),我們應(yīng)當(dāng)支持對(duì)失敗進(jìn)行修復(fù)。

更多Flyway文章(參考以下文檔)

數(shù)據(jù)庫(kù)版本管理工具Flyway——基礎(chǔ)篇

Flyway學(xué)習(xí)筆記

官方文檔

二、Maven配置Flyway和jOOQ插件 properties

jdbc:mysql://127.0.0.1:33006/flyway_test?useUnicode=true&characterEncoding=UTF-8
root
123456
plugins


    org.flywaydb
    flyway-maven-plugin
    3.0
    
    
        
            generate-sources
            
                migrate
            
        
    
    
    
        ${db.url}
        ${db.username}
        ${db.password}
        
            filesystem:src/main/resources/db/migration
        
    




    org.jooq
    jooq-codegen-maven
    ${jooq.version}
    
        
            java-generator
            generate-sources
            
                generate
            
            
                
                    ${db.url}
                    ${db.username}
                    ${db.password}
                
                
                    
                        org.jooq.util.mysql.MySQLDatabase
                        .*
                        flyway_test
                    
                    
                        test.generated
                        target/generated-sources/jooq-mysql-java
                    
                
            
        
    
三、數(shù)據(jù)庫(kù)增量腳本

假設(shè)已經(jīng)插件MySQL數(shù)據(jù)庫(kù):flyway_test

src/main/resources/db/migration目錄(Flyway插件指定的location目錄)下插件創(chuàng)建腳本文件:

V1__create_author.sql

V2__create_book.sql

這三個(gè)腳本按照版本V[1,2,3...]創(chuàng)建,這是腳本的內(nèi)容:

# V1__create_author.sql
CREATE TABLE `author` (
  `id` int NOT NULL,
  `first_name` varchar(255) DEFAULT NULL,
  `last_name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
);
INSERT INTO author VALUES (1, "George", "Orwell");
INSERT INTO author VALUES (2, "Paulo", "Coelho");
# V2__create_book.sql
CREATE TABLE `book` (
  `id` int NOT NULL,
  `author_id` int NOT NULL,
  `title` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
);
INSERT INTO book VALUES (1, 1, "1984");
INSERT INTO book VALUES (2, 1, "Animal Farm");
INSERT INTO book VALUES (3, 2, "O Alquimista");
INSERT INTO book VALUES (4, 2, "Brida");
四、數(shù)據(jù)庫(kù)遷移 & jOOQ代碼生成

執(zhí)行Maven構(gòu)建代碼時(shí)候,上一步的V1/V2腳本Flyway會(huì)按照版本順序去執(zhí)行,并由jOOQ生成Java代碼:

mvn clean install

成功后,新建測(cè)試用例測(cè)試:

import org.jooq.DSLContext;
import org.jooq.Record;
import org.jooq.Result;
import org.jooq.SQLDialect;
import org.jooq.impl.DSL;

import java.sql.Connection;
import java.sql.DriverManager;

import static test.generated.tables.Author.AUTHOR;

/**
 * 測(cè)試類
 */
public class Main {
    public static void main(String[] args) {
        // 用戶名
        String userName = "root";
        // 密碼
        String password = "123456";
        // mysql連接url
        String url = "jdbc:mysql://127.0.0.1:33006/flyway_test?useUnicode=true&characterEncoding=UTF-8";

        // Connection is the only JDBC resource that we need
        // PreparedStatement and ResultSet are handled by jOOQ, internally
        try (Connection conn = DriverManager.getConnection(url, userName, password)) {
            DSLContext create = DSL.using(conn, SQLDialect.MYSQL);
            Result result = create.select().from(AUTHOR).fetch();

            for (Record r : result) {
                Integer id = r.getValue(AUTHOR.ID);
                String firstName = r.getValue(AUTHOR.FIRST_NAME);
                String lastName = r.getValue(AUTHOR.LAST_NAME);

                /**
                 * 控制臺(tái)輸出
                 * ID: 1 first name: George last name: Orwell
                 * ID: 2 first name: Paulo last name: Coelho
                 */
                System.out.println("ID: " + id + " first name: " + firstName + " last name: " + lastName);
            }

            // 關(guān)閉連接對(duì)象
            conn.close();
        }
        // For the sake of this tutorial, let"s keep exception handling simple
        catch (Exception e) {
            e.printStackTrace();
        }
    }
}
五、數(shù)據(jù)庫(kù)變動(dòng)

近期書庫(kù)里多了中文書籍,需要為book表添加語言種類字段

src/main/resources/db/migration目錄下新增修改數(shù)據(jù)庫(kù)腳本:

# V3__book_add_language.sql
ALTER TABLE `book` ADD COLUMN `language_id` int(7) DEFAULT "1" NOT NULL;

重新運(yùn)行Maven構(gòu)建:

mvn clean install

測(cè)試用例:

import org.jooq.DSLContext;
import org.jooq.Record;
import org.jooq.Result;
import org.jooq.SQLDialect;
import org.jooq.impl.DSL;

import java.sql.Connection;
import java.sql.DriverManager;

import static test.generated.tables.Author.AUTHOR;
import static test.generated.tables.Book.BOOK;

/**
 * 測(cè)試類
 */
public class BookMain {
    public static void main(String[] args) {
        // 用戶名
        String userName = "root";
        // 密碼
        String password = "123456";
        // mysql連接url
        String url = "jdbc:mysql://127.0.0.1:33006/flyway_test?useUnicode=true&characterEncoding=UTF-8";

        // Connection is the only JDBC resource that we need
        // PreparedStatement and ResultSet are handled by jOOQ, internally
        try (Connection conn = DriverManager.getConnection(url, userName, password)) {
            DSLContext create = DSL.using(conn, SQLDialect.MYSQL);
            Result result = create.select().from(BOOK).fetch();

            for (Record r : result) {
                Integer id = r.getValue(BOOK.ID);
                String firstName = r.getValue(BOOK.TITLE);
                Integer languageId = r.getValue(BOOK.LANGUAGE_ID);

                /**
                 * 控制臺(tái)輸出
                 * ID: 1 title: 1984 language: 英文
                 * ID: 2 title: Animal Farm language: 英文
                 * ID: 3 title: O Alquimista language: 英文
                 * ID: 4 title: Brida language: 英文
                 */
                System.out.println("ID: " + id + " title: "
                        + firstName + " language: " + (languageId.intValue() == 1 ? "英文" : "中文"));
            }

            // 關(guān)閉連接對(duì)象
            conn.close();
        }
        // For the sake of this tutorial, let"s keep exception handling simple
        catch (Exception e) {
            e.printStackTrace();
        }
    }
}

【jOOQ中文】教程代碼都會(huì)放在碼云,希望多多宣傳給Star(^_?)☆。

https://gitee.com/xujian_jaso...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/67571.html

相關(guān)文章

  • jOOQ中文】1. 七個(gè)步驟快速入門

    摘要:關(guān)于是一個(gè)基于編寫的工具包,具有簡(jiǎn)單輕量函數(shù)式編程寫等獨(dú)特優(yōu)勢(shì),非常適合敏捷快速迭代開發(fā)。三代碼生成在這一步中,我們將使用的命令行工具生成映射到表的類。注意不會(huì)主動(dòng)關(guān)閉連接,需要我們手動(dòng)關(guān)閉。 關(guān)于jOOQ jOOQ: The easiest way to write SQL in Java jOOQ是一個(gè)基于Java編寫SQL的工具包,具有:簡(jiǎn)單、輕量、函數(shù)式編程寫SQL等獨(dú)特優(yōu)勢(shì),...

    sihai 評(píng)論0 收藏0
  • jOOQ中文】2. jOOQ與Spring和Druid整合

    摘要:在這個(gè)例子中,我們將整合但您也可以使用其他連接池,如,,等。作為構(gòu)建和執(zhí)行。 jOOQ和Spring很容易整合。 在這個(gè)例子中,我們將整合: Alibaba Druid(但您也可以使用其他連接池,如BoneCP,C3P0,DBCP等)。 Spring TX作為事物管理library。 jOOQ作為SQL構(gòu)建和執(zhí)行l(wèi)ibrary。 一、準(zhǔn)備數(shù)據(jù)庫(kù) DROP TABLE IF EXIS...

    pingink 評(píng)論0 收藏0
  • 國(guó)外程序員整理的Java資源大全

    摘要:日期和時(shí)間處理日期和時(shí)間的函數(shù)庫(kù)。使用中可觀察序列,創(chuàng)建異步基于事件應(yīng)用程序的函數(shù)庫(kù)。為分布式系統(tǒng)提供延遲和容錯(cuò)處理。發(fā)布使用本機(jī)格式分發(fā)應(yīng)用程序的工具。將程序資源和打包成和的本機(jī)文件。圖像處理用來幫助創(chuàng)建評(píng)估或操作圖形的函數(shù)庫(kù)。 好資源要分享原文 譯者 唐尤華 翻譯自 github akullpp 構(gòu)建 這里搜集了用來構(gòu)建應(yīng)用程序的工具。 Apache Maven:Mave...

    chengtao1633 評(píng)論0 收藏0
  • SpringBoot 中的Flyway配置

    摘要:在我們的項(xiàng)目中使用進(jìn)行數(shù)據(jù)庫(kù)版本控制。我們的項(xiàng)目采用管理。項(xiàng)目地址配置參考地址配置過程很簡(jiǎn)單,只需要在中添加配置即可引入配件配置添加依賴默認(rèn)執(zhí)行的腳本路徑是,腳本以的方式命名。配置完成后,執(zhí)行可以看到可用的命令,執(zhí)行可以執(zhí)行腳本。 在我們的Springboot項(xiàng)目——studentsystem中使用flyway進(jìn)行數(shù)據(jù)庫(kù)版本控制。我們的springboot項(xiàng)目采用gradle管理。 ...

    trigkit4 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<