2016-12-08 5 views
3

私はSpringバッチ2バージョンを使用しています。 JdbcCursorItemReaderを使用してデータベースからデータを読み取っています。データを正常にフェッチし、ファイルに書き込んでいます。は、バッチバッチのconfig xmlファイル内のプレースホルダに値を動的に置き換えます。

以下

Job.xmlファイルで定義されてitemReader豆 ::

<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> 

ですが、問題は、私のクエリはかなり大きいです、ですので、私はちょうどxmlファイルのうち、そのクエリを維持したいと他のファイルまたはプロパティファイル(.property、yamlまたはxml)からそのクエリを取得します。

私は以下のようにXMLコードを書くことができるようにするため::

<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> 

これを達成するための最良の方法は何ですか?

+0

'$ {sql_query}'を書くだけです。 'sql_query'という名前のプロパティのプロパティファイルでそれを叩いて、アプリケーションを再度実行してください。 –

+0

あなたはクエリにparamを渡す必要がありますか? –

答えて

2
<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あなたがステップの前に仕事のリスナーを使用してjobexecutioncontextにSQLを追加することができます代わりにPropertyPlaceholderConfigurer

0

の、3.1以降で兼ね備えています。

関連する問題