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