2017-01-15 9 views
2

Liquibase Java APIを使用して、databaseChangeLogファイルからデータベースを更新しています。私はまた、以下のコードを使用して、デフォルトのデータベーススキーマを設定しています:Liquibase Java APIのプレースホルダへのアクセス

Database database = DatabaseFactory.getInstance().findCorrectDatabaseImplementation(new JdbcConnection(conn)); 
     database.setDefaultSchemaName(CustomerPortalServiceBeanFactory.getInstance().getServiceConfigurationData().getSchemaName()); 

これは私が下図のようにビューを作成し、変更ログを持っている場合を除き、正常に動作します:

<?xml version="1.0" encoding="UTF-8"?> 
<databaseChangeLog 
    xmlns="http://www.liquibase.org/xml/ns/dbchangelog" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog 
     http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd"> 
    <changeSet author="mhills" id="customerUser-view"> 
     <createView 
       replaceIfExists="true" 
       viewName="CUSTOMER_USER_VW"> 
       select 
       customeruser.id, 
       customeruser.status, 
       customeruser.customer_id, 
       customeruser.contact_id, 
       customeruser.email_address, 
       customeruser.online_name, 
       customeruser.date_created 
       FROM customer_user customeruser 
     </createView> 
    </changeSet> 
</databaseChangeLog> 

SCHEMANAMEが適切に接頭辞れますビュー名ですが、from節で使用されているテーブルの前に接頭辞を付ける必要があります。スキーマ名はプレースホルダとして使用できますか、これを行う別の方法がありますか?

答えて

1

ドキュメントを読んだ後、以下のコードを追加して、セット「schemaName」にアクセスできました。

システムプロパティとして「schemaName」値を追加することで、チェンジセットのプレースホルダとして使用できました。以下の例。

<?xml version="1.0" encoding="UTF-8"?> 
<databaseChangeLog 
    xmlns="http://www.liquibase.org/xml/ns/dbchangelog" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog 
     http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd"> 
    <changeSet author="mhills" id="customerUser-view"> 
     <createView 
       replaceIfExists="true" 
       viewName="CUSTOMER_USER_VW"> 
       select 
       customeruser.id, 
       customeruser.status, 
       customeruser.customer_id, 
       customeruser.contact_id, 
       customeruser.email_address, 
       customeruser.online_name, 
       customeruser.date_created 
       FROM "${schemaName}".customer_user customeruser 
     </createView> 
    </changeSet> 
</databaseChangeLog> 
関連する問題