安全なLibrbase、スプリングデータ、およびスプリングブートを使用してデータベースを展開する


データベースを発展させるプロセスを説明する多くの実装Liquibase そしてそれらのいくつかはSpring Frameworkで実装されています.私は全体のプロセスを説明するシンプルで信頼性の高い実装を見つけることができませんでした.

Update: Added support for Liquibase 4.x and instructions are updated


概要


このブログ記事は、データベースを安全に展開するプロセスを説明します.Liquibase Maven plugin Mavenコマンドを使用してLiquibase Hibernate plugin ヘルプを生成するヘルプchangesets JPAエンティティに基づきます.コードアップロードGithub 参考に

使用技術

  • スプリングブート2 .X
  • スプリングデータJPA 2.X
  • ジャバ11
  • Liqubase 4.0.0
  • Liquibase Hibernate plugin 3.10.1
  • Liquibase Maven plugin 4.0.0
  • 指示

  • クローンギタブrepository ローカルマシンに
  • 下記のPOMに基づいて、春のブート、スプリングデータ、Liquibaseなどの必要な依存関係を追加します.XMLファイル
  • POMXML
    以下に示すように、モデル、コントローラ、およびJPAリポジトリインターフェイスを作成します
    国.ジャバ
    package com.liquibasedemo.model;  
    
    import com.fasterxml.jackson.annotation.JsonIgnore;  
    import lombok.Data;  
    
    import javax.persistence.\*;  
    
    
    @Entity  
    @Table(name = "country")  
    @Data  
    public class Country  
    {  
        @Id  
        @Column(name = "id")  
        @GeneratedValue(strategy = GenerationType._IDENTITY_)  
        private Long Id;  
    
        @Column(name = "name")  
        private String name;  
    
        @Column(name = "code")  
        private String code;  
    
        @Column(name = "iso\_code")  
        private String isoCode;  
    
    
        @ManyToOne  
        @JoinColumn(name = "region\_id")  
        @JsonIgnore  
        private Region region;  
    
        public Country()  
        {  
        }  
    
    }
    

    田舎の倉庫。ジャバ


    package com.liquibasedemo.repo;  
    
    import com.liquibasedemo.model.Country;  
    import org.springframework.data.jpa.repository.JpaRepository;  
    
    public interface CountryRepository extends JpaRepository<Country, Long>  
    {  
    }
    

    コントローラ。ジャバ


    package com.liquibasedemo.web;  
    
    import com.liquibasedemo.model.Country;  
    import com.liquibasedemo.repo.CountryRepository;  
    import org.springframework.web.bind.annotation.GetMapping;  
    import org.springframework.web.bind.annotation.RequestMapping;  
    import org.springframework.web.bind.annotation.RestController;  
    
    import java.util.List;  
    
    @RestController  
    @RequestMapping("/api/v1/country")  
    public class CountryController  
    {  
        private final CountryRepository countryRepository;  
    
        public CountryController(CountryRepository countryRepository)  
        {  
            this.countryRepository \= countryRepository;  
        }  
    
        @GetMapping(path = "/list")  
        public List<Country> findAllCountries()  
        {  
            return countryRepository.findAll();  
        }  
    
        @GetMapping(path = "/create")  
        public Country createCountry()  
        {  
            Country country=new Country();  
            country.setCode("USD");  
            country.setIsoCode("USD");  
            country.setName("United States Dollar");  
    
    
            return countryRepository.saveAndFlush(country);  
        }  
    }
    
    4 . createliquibase.properties src/main/resourcesディレクトリの下に次の内容があります
    リリベース.プロパティ
    リソースディレクトリに4つのプロファイルを作成するapplication-local.yml , application-dev.yml , application-test.yml and application.prod.yml つの異なる環境.
    最初に、Hibernate DDL AutoFlagを使用してローカルデータベース内のすべてのエンティティ変更を生成し、次の構成を追加しますapplication-local.yml ファイル.開発データベースをローカルデータベースに比較して変更ログを生成する
    jpa:  
      hibernate:  
        ddl-auto: update
    
    src/main/resourcesディレクトリに以下のようにディレクトリ構造を作成します

    ディレクトリ構造

    In standard liquibase setup we have one db.changelog-master.xml file under resources/db directory and change sets are stored under resources/db/changelog directory.

    But in reality we may need to generate separate change sets for each environment as we may not want all the changes in local or development to move to production(or at least that’s how I do it)


    8 .この理由から、私は3つの分離を作成しましたdb.changelog-master.xml ファイル名db.changelog-dev.xml , db.changelog-test.xml , db.changelog-prod.xml . そして、それぞれのディレクトリはリソース/db/changelog/
    しかし、すべての環境で同じファイルを使いたいならばdb.changelog-master.xml そして、リソース/db/changelogディレクトリの下の何もない
    10 .ローカルマシンとスプリングブートのプロジェクトを実行すると、データベース上のテーブルを作成します

    ローカルデータベース変更
    Mavenを使用したプロジェクトのビルド
    $ mvn clean package -DskipTests
    
    12 .ローカルデータベースと開発データベース間の変更を生成するliquibase:diff コマンド
    リフベース差分コマンド
    13 .上記コマンドは、開発データベースをローカルデータベースと比較し、どのような違いがあった場合にも変更を生成します.必ず含める-Pdev or -Ptest or -Pprod 正しいプロファイルを選択するフラグ
    14 .マベンの代わりliquibase.properties ステップ10の指定されたパラメータを持つファイルプレースホルダ
    15 .変更セットを開発データベースに適用するliquibase:update コマンド.これはすべての変更セットがリソース/db/changelog/devディレクトリに存在するでしょう
    Liqubaseアップデートコマンド
    16 .データベースに移動し、適用されたすべての変更とテーブルを作成します
    17章http://localhost:8081/api/v1/country/create 国をつくるhttp://localhost:8081/api/v1/country/list 国の一覧を見る
    18 .テスト・プロダクションデータベースのステップ11〜15を繰り返す.以下のコマンドを使用する
    コードアップロードGithub 参考のために.無料でダウンロードしてカスタマイズしてください.