我正在尝试使用liquibase生成changelog。要求是使用动态日期构建liquibase脚本。这意味着每当脚本运行时,日期将根据当前日期计算。 有没有一种方法liquibase会以这种方式自动生成日期字段?
例如
<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 :(得分:1)
不,Liquibase没有任何功能可以做任何你喜欢的事情。您需要编写一些内容来对XML进行后处理以更改日期值。
一种可能性是扫描XML以查找具有<column>
属性的valueDate
元素,并将这些值替换为未展开的属性,以便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能够在运行时进行任何类型的日期评估。