dynamically replace the value to placeholder in config xml file in Spring Batch

末鹿安然 提交于 2019-12-23 21:41:23

问题


I am using Spring Batch 2 version. I am reading data from database using JdbcCursorItemReader.I have successfully fetched the data and also written it to a file.

Below is itemReader bean defined in Job.xml File::

<bean id="itemReader"
        class="org.springframework.batch.item.database.JdbcCursorItemReader"
        scope="step">
        <property name="dataSource" ref="dataSource" />
        <property name="sql"
        value="select u.ID, u.USER_LOGIN, u.PASSWORD, u.AGE from USERS u" />
        </property>
        <property name="rowMapper">
           <bean class="com.example.UserRowMapper" />
        </property>
    </bean>

But the issue is,my query is quite big so I just want to keep that query out of xml file and get that query from other file or property file(.property,yaml or xml).

So that I can write xml code as below::

<bean id="itemReader"               class="org.springframework.batch.item.database.JdbcCursorItemReader" scope="step">
                <property name="dataSource" ref="dataSource" />
                <property name="sql" value="$sql_query" />
                </property><property name="rowMapper">
                <bean class="com.example.UserRowMapper" />
                </property>
</bean>

What is best way to achieve this?


回答1:


<bean id="myProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">     
        <property name="locations">
            <list>
                <value>path1.properties</value>
                <value>path2.properties</value>
                .....
            </list>
        </property>     
        <property name="ignoreUnresolvablePlaceholders" value="false"/>
</bean> 

...

<bean id="itemReader"  class="org.springframework.batch.item.database.JdbcCursorItemReader" scope="step">
                <property name="dataSource" ref="dataSource" />
                <property name="sql" value="${sql_query}" />
                </property><property name="rowMapper">
                <bean class="com.example.UserRowMapper" />
                </property>
</bean> 


path1.properties:
sql_query=value

PropertySourcesPlaceholderConfigurer is preffered in 3.1 and higher, instead of PropertyPlaceholderConfigurer




回答2:


You can add sql in jobexecutioncontext by using job listener before step.



来源:https://stackoverflow.com/questions/41033571/dynamically-replace-the-value-to-placeholder-in-config-xml-file-in-spring-batch

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!