2017-01-15 6 views
2

Ich verwende die Liquibase-Java-API, um meine Datenbank aus einer Datenbank-ChangeLog-Datei zu aktualisieren. Ich stelle auch das Standard-Datenbankschema den Code unter Verwendung von:Zugriff auf Platzhalter von Liquibase Java-API

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

Dies funktioniert gut, außer wenn ich ein Änderungsprotokoll habe, das eine Ansicht erstellt, wie unten dargestellt:

<?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> 

Die schemaname richtig prefixing der View-Name, aber ich muss auch die in der from-Klausel verwendete Tabelle voranstellen. Ist der Schemaname als Platzhalter verfügbar oder gibt es einen anderen Weg, dies zu erreichen?

Antwort

1

Nach dem Lesen der Dokumentation konnte ich auf den Satz "schemaName" zugreifen, indem ich den folgenden Code hinzufügte.

// set the schema read from the properties file. 
System.setProperty("schemaName", CustomerPortalServiceBeanFactory.getInstance().getServiceConfigurationData().getSchemaName()); 

// Establish the Liquibase database connection 
Database database = DatabaseFactory.getInstance().findCorrectDatabaseImplementation(new JdbcConnection(conn)); 
       database.setDefaultSchemaName(CustomerPortalServiceBeanFactory.getInstance().getServiceConfigurationData().getSchemaName()); 

die „schemaname“ Wert als Systemeigenschaft Durch das Hinzufügen es als Platzhalter in den Changesets zur Verfügung stand. Beispiel unten.

<?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> 
Verwandte Themen