2017-02-13 38 views
0

我想創建一個應該可用於Oozie工作流程中所有操作的變量。我試圖創建它,如下所示。但是EL表達式並沒有得到評估,導致EL表達式本身的可變current_ts值。有人可以請點亮這個嗎?如何用EL表達式創建一個變量用於所有動作oozie工作流?

<workflow-app xmlns="uri:oozie:workflow:0.4" name="no-op-wf"> 
    <parameters> 
    <property> 
     <name>current_ts</name> 
     <value>${replaceAll((replaceAll((replaceAll((timestamp()),"-","")),"T","_")),":","")}</value> 
    </property> 
    </parameters> 
    <start to="test"/> 
    <kill name="test"> 
    <!--message Just to show that this expression works if used here>Timestamp - [${replaceAll((replaceAll((replaceAll((timestamp()),"-","")),"T","_")),":","")}</message--> 
    <message>Timestamp - ${current_ts}</message> <!-- this will print expression but not evaluate it --> 
    </kill> 
    <end name="end"/> 
</workflow-app> 
+1

你可以嘗試使用全局或配置標籤,那麼該屬性是跨越workflow.xml –

回答

0

,並在WF的然後在屬性EL表達式不會得到評估的其他動作引用它。

作爲一種解決方法,我將wf作爲子wf包裝,並在父wf中創建了global-> configuation->屬性,然後將其傳遞給subwf。與此解決方法EL表達式得到評估。

家長WF:

<workflow-app xmlns="uri:oozie:workflow:0.4" name="main-wf"> 
    <global> 
    <configuration> 
     <property> 
     <name>run_ts</name> 
     <value>${replaceAll((replaceAll((replaceAll((timestamp()),"-","")),"T","_")),":","")}</value> 
     </property> 
    </configuration> 
    </global> 

<action name="tbl-subwf"> 
    <sub-workflow> 
     <app-path>${AppPath}</app-path> 
     <propagate-configuration/> 
</sub-workflow> 
    <ok to="join-node"/> 
    <error to="fail"/> 
    </action> 
<kill name="fail"> 
    <message>Sub workflow failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message> 
    </kill> 
    <end name="end"/> 
</workflow-app> 
+0

可用您可能會發現*參數之間的區別在於後有用的(第2節) *和*屬性* ... http://stackoverflow.com/questions/38337362/oozie-properties-defined-in-file-referenced-in-global-job-xml-not-visible-in-wo/38338713# 38338713 –

0

Parameterization of Workflows它提到:

EL表達式可以在操作和判定節點的配置值來使用。它們可以用在XML屬性值和XML元素和屬性值中。

它們不能用於XML元素和屬性名稱。它們不能用於節點的名稱,也不能在節點的過渡元素中使用。

,但如果我在創建工作流程中的全球 - >配置 - >屬性,你可以用它在協調

相關問題