安全なLibrbase、スプリングデータ、およびスプリングブートを使用してデータベースを展開する
7425 ワード
データベースを発展させるプロセスを説明する多くの実装Liquibase そしてそれらのいくつかはSpring Frameworkで実装されています.私は全体のプロセスを説明するシンプルで信頼性の高い実装を見つけることができませんでした.
概要
スプリングブート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リポジトリインターフェイスを作成します
国.ジャバ
田舎の倉庫。ジャバ
Update: Added support for Liquibase 4.x and instructions are updated
概要
このブログ記事は、データベースを安全に展開するプロセスを説明します.Liquibase Maven plugin Mavenコマンドを使用してLiquibase Hibernate plugin ヘルプを生成するヘルプchangesets JPAエンティティに基づきます.コードアップロードGithub 参考に
使用技術
指示
以下に示すように、モデル、コントローラ、および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 参考のために.無料でダウンロードしてカスタマイズしてください.
Reference
この問題について(安全なLibrbase、スプリングデータ、およびスプリングブートを使用してデータベースを展開する), 我々は、より多くの情報をここで見つけました
https://dev.to/pavankjadda/safely-evolving-database-with-liquibase-spring-data-and-spring-boot-4p00
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
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 参考のために.無料でダウンロードしてカスタマイズしてください.
Reference
この問題について(安全なLibrbase、スプリングデータ、およびスプリングブートを使用してデータベースを展開する), 我々は、より多くの情報をここで見つけました https://dev.to/pavankjadda/safely-evolving-database-with-liquibase-spring-data-and-spring-boot-4p00テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol