2017-01-15 7 views
2

Я использую API-интерфейс Liquibase для обновления моей базы данных из файла 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», добавив код ниже.

// 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()); 

Добавляя значение «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>