私のパッケージ構造は次のようになります:
で/db.changelog/db.changelod-master.xml私は、/db.changelog/v1/db.changelog-1.0.xml私もからのすべての変更履歴が含まどこ/db.changelog/v1/changesetパッケージを。
:私のアプリケーションでは、私は2つのプロファイルを持っているDEVとPRODを、と私はLiquiBaseをの「ベストプラクティス」によると、パッケージの構造を分割する必要があります。いくつかの変更履歴をにすることができPRODとのdevの環境。
また、私は使用することができ、コンテキスト内の属性チェンジタグと明示的にセットDEVまたはPROD値を、この回避策は好ましくない。
簡単な使用次のようになります。私はに切り替えPRODのプロファイルといくつかのテーブルが作成されませんまたはデータベースにはいくつかの挿入はスキップされます。
あなたは、LiquiBaseを「ベストプラクティスに従って、パッケージの助けを借り、私のリファクタリング構造を喜ばことはできますか?
解決法1:
あなたのYAMLファイルに「liquibase.contexts」プロパティを定義する必要があります。以下のような何か。
spring:
profiles: dev
datasource:
url: jdbc:postgresql://localhost:5432/dev
username: postgres
password: password
driver-class-name: org.postgresql.Driver
liquibase:
contexts: dev
ローカルプロファイルは、「DEV」(:実行-Dspring.profiles.active = DEVすなわち、ばねブート)であるとき、変更セットの下にこれを追加した後にのみ実行されます
<changeSet id="20161016_my_first_change2" author="krudland" context="dev">
<sql>
insert into customer (firstname, lastname) values ('Franklin','Ike');
</sql>
<rollback>
delete from customer where firstname = 'Franklin' and lastname = 'Ike';
</rollback>
</changeSet>
対処方法2は:
あなたがliquibase.contextを使用したくない場合は、フィルタrecoursesにMavenを使用することができかもしれません:鍵はMavenの使用していたフィルターと一緒に要素をリソースで説明したように要素LiquiBaseをドキュメント。
また、それは含めることが重要だ資源のmavenコマンドで目標を:
mvn resources:resources liquibase:update -Plocal
これは私が使用したファイルの階層です:
|-- pom.xml
`-- src
`-- main
|-- resources
| `-- liquibase.properties
| |-- changelog
| `-- db-changelog-master.xml
| `-- db-changelog-1.0.xml
|-- filters
|-- local
| `-- db.properties
|-- dev
| `-- db.properties
db.propertiesファイルには、次のようになります。
database.driver = oracle.jdbc.driver.OracleDriver
database.url = jdbc:oracle:thin:@<host_name>:<port_number>/instance
database.username = user
database.password = password123
database.changelogfile = db.changelog-master.xml
liquibase.propertiesファイルには、次のようになります。
changeLogFile: changelog/${database.changelogfile}
driver: ${database.driver}
url: ${database.url}
username: ${database.username}
password: ${database.password}
verbose: true
POMファイルには、次のようになります。
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<propertyFile>target/classes/liquibase.properties</propertyFile>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
<profiles>
<profile>
<id>local</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<filters>
<filter>src/main/filters/local/db.properties</filter>
</filters>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
</profile>
<profile>
<id>dev</id>
<build>
<filters>
<filter>src/main/filters/dev/db.properties</filter>
</filters>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
</profile>
</profiles>