无法使用作业参数解析属性标记

时间:2015-11-27 12:27:01

标签: properties spring-batch

我正在尝试将作业参数#{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>

2 个答案:

答案 0 :(得分: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 Expression Language(spEL),您可以使用以下命令获得正确的属性:

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

请注意,此解决方案保持与${...}语法的兼容性。

答案 1 :(得分:0)