2017-02-23 16 views
-2

XMLファイル&に次のクエリを記述しました。Javaコードからcreated_dateの動的値を渡したいと思います。私は春のバッチプログラムを作成しています。だからそれを行う方法?Springバッチで動的変数をXMLに渡す方法

<property name="dataSource" ref="dataSource" /> 

    <property name="sql" 
     value="SELECT `txn`.`id`, 
        `txn`.`sender_id`, 
        `txn`.`beneficiary_id`, 
        `txn`.`amount`, 
        `txn`.`pay_mode_master_id`, 
        `txn`.`status`, 
        `txn`.`reference_number`, 
        `txn`.`created_by`, 
        `txn`.`created_date`, 
        `txn`.`updated_by`, 
        `txn`.`updated_date`, 
        `txn`.`source_currency_master_id`, 
        `txn`.`dest_currency_master_id`, 
        `txn`.`fees`, 
        `txn`.`exchange_rate`, 
        `txn`.`total_amount`, 
        `txn`.`recipient_gets`, 
        `txn`.`from_country`, 
        `txn`.`to_country`, 
        `txn`.`other_purpose`, 
        `txn`.`transaction_purpose_id`, 
        `txn`.`sender_account_id`, 
        `txn`.`transaction_number`, 
        `txn`.`source_region`, 
        `txn`.`error`, 
        `txn`.`corridor_id`, 
        `txn`.`promo_code`, 
        `txn`.`receiver_id`, 
        `txn`.`error_code` 
       FROM `remittance`.`transaction_master` txn where txn.created_date >= '2017-02-09 00:00:00' AND txn.created_date <='2017-02-09 23:59:59';" /> 

    <property name="rowMapper"> 
     <bean class="com.websystique.springbatch.ExamResultRowMapper" /> 
    </property> 
</bean> 

答えて

0

あなたはxmlファイルでクエリを作成しているので、私はこれは、元のクエリ文字列を解析して取得することができます考えるので。その後、次の方法でJavaコードから動的値を渡すことができます。

コード:

List<Date> parameters = new ArrayList<>(); 
/* Here add all dates to the parameter ArrayList */ 
String query = "SELECT `txn`.`id`, 
        `txn`.`sender_id`, 
        `txn`.`beneficiary_id`, 
        `txn`.`amount`, 
        `txn`.`pay_mode_master_id`, 
        `txn`.`status`, 
        `txn`.`reference_number`, 
        `txn`.`created_by`, 
        `txn`.`created_date`, 
        `txn`.`updated_by`, 
        `txn`.`updated_date`, 
        `txn`.`source_currency_master_id`, 
        `txn`.`dest_currency_master_id`, 
        `txn`.`fees`, 
        `txn`.`exchange_rate`, 
        `txn`.`total_amount`, 
        `txn`.`recipient_gets`, 
        `txn`.`from_country`, 
        `txn`.`to_country`, 
        `txn`.`other_purpose`, 
        `txn`.`transaction_purpose_id`, 
        `txn`.`sender_account_id`, 
        `txn`.`transaction_number`, 
        `txn`.`source_region`, 
        `txn`.`error`, 
        `txn`.`corridor_id`, 
        `txn`.`promo_code`, 
        `txn`.`receiver_id`, 
        `txn`.`error_code` 
       FROM `remittance`.`transaction_master` txn where txn.created_date >= :created_date AND txn.created_date <=:created_date"; 
/* call addDynamicDateToQuery using the class object in which your 
addDynamicDateToQuery method is present */ 
query = addDynamicDateToQuery(query ,"created_date",parameters); 

public static String addDynamicDateToQuery(String query, String token, 
      Collection data) { 
     if(data.isEmpty() || !query.contains(":")){ 
      query = null; 
     }else{ 
      StringBuffer clause = new StringBuffer(""); 
      for(Object value : data){ 
       if(value instanceof Date){ 
        clause.append(value + ","); 
       } 
      } 
      String clauseStr = clause.toString(); 
      clauseStr = clauseStr.substring(0,clauseStr.lastIndexOf(",")); 
      query = query.replace(":" + token, clauseStr); 
     } 
     return query; 
    } 

/* Now You can call this query using JdbcTemplate object */ 
+0

しかし、私は全体のクエリをXMLに入れたいと思いますが、パラメータはJavaコードから動的に渡され、バネバッチジョブのためにそのクエリを使用します。 – nIKHIL

0

私は私が仕事を呼び出していたところからjavaファイルに行うために必要なコードの変更で、以下、解決策を得た。..新しい

JobParametersのPARAM = ( "createdDate"、 "'%2017-02-24%'")。toJobParameters(); JobParametersBuilder()。 ジョブ実行の実行= jobLauncher.run(job、param); XMLファイル内


& ... remittance`.`transaction_master`のTXN#などtxn.created_date {jobParameters [ 'CreatedDateに']} `FROM ;」/>

関連する問題