2015-11-27 57 views
1

我想連接作業參數,#{jobParameters ['arg1']}與myfeed.query動態地從屬性文件中選擇正確的查詢。但它沒有得到解決。無法解析屬性標籤與作業參數

下面是異常日誌 引起的:org.springframework.jdbc.BadSqlGrammarException:執行查詢;錯誤的SQL語法[$ {myfeed.queryZONE1}]

下面是xml文件中的代碼片段。

<bean id="itemReader" class="org.springframework.batch.item.database.JdbcCursorItemReader" scope="step"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="sql"> 
     <value>${myfeed.query#{jobParameters['arg1']}}</value> 
    </property> 
    <property name="rowMapper"> 
     <bean class="com.sgcib.loa.matrix.mapper.MyFeedRowMapper" /> 
    </property> 
</bean> 

回答

0

要做到這一點,你需要爲你的PropertyPlaceholderConfigurer聲明明確性質:

<bean id="propertiesConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="properties" ref="properties" /> 
</bean> 

<bean id="properties" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> 
    <property name="location"> 
     <value>file:xxxxxxx.properties</value> 
    </property> 
</bean> 

然後使用Spring表達式語言(SPEL),你可以得到正確的屬性:

<property name="sql" value="#{properties.getProperty('myfeed.query' + jobParameters['arg1'])}" /></property> 

請注意,此解決方案與${...}語法保持兼容。