2016-03-11 29 views
0

我正在嘗試使用liquibase生成changelog。要求是用動態日期構建liquibase腳本。這意味着無論腳本何時運行,日期都會根據當前日期進行計算。 liquibase會以這種方式自動生成日期字段嗎?Liquibase generatechangelog動態日期

例如

<insert tableName="account"> 
     <column name="id" value="1"/> 
     <column name="availablebalance" valueNumeric="36239.07"/> 
     <column name="currentbalance" valueNumeric="36000.00"/> 
     <column name="maturitydate" valueDate="2015-09-30"/> 
     <column name="opendate" valueDate="2012-09-30"/> 
     <column name="status" value="OPEN"/> 
     <column name="title" value="Alpha Deposit"/> 
     <column name="version" valueNumeric="0"/> 
     <column name="type_id" valueNumeric="20"/> 
     <column name="product_id" valueNumeric="2010101121"/> 
    </insert> 

應該像

<insert tableName="account"> 
     <column name="id" value="1"/> 
     <column name="availablebalance" valueNumeric="36239.07"/> 
     <column name="currentbalance" valueNumeric="36000.00"/> 
     <column name="maturitydate" valueDate="current_date + interval '-5 months'"/> 
     <column name="opendate" valueDate="current_date + interval '-5 months'"/> 
     <column name="status" value="OPEN"/> 
     <column name="title" value="Alpha Deposit"/> 
     <column name="version" valueNumeric="0"/> 
     <column name="type_id" valueNumeric="20"/> 
     <column name="product_id" valueNumeric="2010101121"/> 
    </insert> 
+0

如果您添加示例,它可能會有所幫助。你指什麼日期?我認爲'generateChangeLog'本身沒有這樣的功能。但對我來說,運行'generateChangeLog'時不太清楚你想要計算的日期類型? – Jens

回答

1

不,Liquibase沒有任何功能,不喜歡你在找什麼東西。您需要編寫一些內容來後期處理XML以更改日期值。

一種可能性是掃描有valueDate屬性<column>元素的XML和替換未膨脹的屬性值,從而使XML是這樣的:

<insert tableName="account"> 
     <column name="id" value="1"/> 
     <column name="availablebalance" valueNumeric="36239.07"/> 
     <column name="currentbalance" valueNumeric="36000.00"/> 
     <column name="maturitydate" valueDate="${todayMinusFiveMonths}"/> 
     <column name="opendate" valueDate="${todayMinusFiveMonths}"/> 
     <column name="status" value="OPEN"/> 
     <column name="title" value="Alpha Deposit"/> 
     <column name="version" valueNumeric="0"/> 
     <column name="type_id" valueNumeric="20"/> 
     <column name="product_id" valueNumeric="2010101121"/> 
    </insert> 

...然後添加一個<property>標籤位於文件的頂部,它定義了實際值應該是什麼。這將是這個樣子:

<databaseChangeLog 
     xmlns="http://www.liquibase.org/xml/ns/dbchangelog" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" 
     xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.5.xsd 
     http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd"> 

    <property name="todayMinusFiveMonths" value="2015-11-10"/> 
    ... 
    remainder of changelog 
    ... 

注意,即使在那裏,你將不得不把在日期預先計算的值 - 我不認爲Liquibase有做任何形式的日期評價的能力在運行時。

+0

這就是我一直試圖避免的,但它數字我不會 – Apostelis