首页 > 解决方案 > Spring batch xml repositoryitemwriter 模式占位符表单属性

问题描述

需要从属性文件中获取 spring 批处理应用程序的模式名称。MSSQL 数据库的 dev 和 prod 的架构名称不同。

xml中的作业配置如下

<bean id="dataItemWriter" class="org.springframework.batch.item.database.JdbcBatchItemWriter">
    <property name="assertUpdates" value="true" />
    <property name="itemPreparedStatementSetter">
        <bean class="org.test.batch.model.ItemStatementMapper" />
    </property>
    <property name="sql" >
                <value>
                    <![CDATA[
                            INSERT INTO dbo.EMPLOYEE
                                   (PROJECT_NAME
                                   ,APP_NAME
                                   ,EMPLOYEE_NAME)
                                   values (?,?,?)
                    ]]>
                </value>
    </property>
    <property name="dataSource" ref="dataDataSource" />
</bean> 

模式名称“dbo”应从属性文件中检索,以便可以在配置中更改 DEV 和 PROD

标签: springspring-mvcspring-dataspring-batch

解决方案


我认为不需要将值放在CDATA块中,您的查询中没有特殊的 xml 字符。这是一个例子:https ://github.com/spring-projects/spring-batch/blob/8762e3411557aaf887867f8d8594b01127538cb1/spring-batch-core/src/test/resources/org/springframework/batch/core/resource/ListPreparedStatementSetterTests-context .xml#L25。所以在你的情况下,它应该是这样的:

<bean id="dataItemWriter" class="org.springframework.batch.item.database.JdbcBatchItemWriter">
    <property name="assertUpdates" value="true" />
    <property name="itemPreparedStatementSetter">
        <bean class="org.test.batch.model.ItemStatementMapper" />
    </property>
    <property name="sql" >
        <value>
           INSERT INTO dbo.EMPLOYEE (PROJECT_NAME ,APP_NAME ,EMPLOYEE_NAME) values (?,?,?)
        </value>
    </property>
    <property name="dataSource" ref="dataDataSource" />
</bean>

推荐阅读