どのように春ブーツでDEVとprod環境用のLiquiBaseをパッケージ構造を分割するには?

Abzelhan:

私のパッケージ構造は次のようになります:

ここでは、画像の説明を入力します。

/db.changelog/db.changelod-master.xml私は、/db.changelog/v1/db.changelog-1.0.xml私もからのすべての変更履歴が含まどこ/db.changelog/v1/changesetパッケージを。

:私のアプリケーションでは、私は2つのプロファイルを持っているDEVPRODを、と私はLiquiBaseをの「ベストプラクティス」によると、パッケージの構造を分割する必要があります。いくつかの変更履歴をにすることができPRODのdevの環境。

また、私は使用することができ、コンテキスト内の属性チェンジタグと明示的にセットDEVまたはPROD値を、この回避策は好ましくない。

簡単な使用次のようになります。私はに切り替えPRODのプロファイルといくつかのテーブルが作成されませんまたはデータベースにはいくつかの挿入はスキップされます。

あなたは、LiquiBaseを「ベストプラクティスに従って、パッケージの助けを借り、私のリファクタリング構造を喜ばことはできますか?

M-ラザビ:

解決法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>

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=179453&siteId=1