2017-02-23 111 views
-2

我已经在XML文件中编写了如下查询&想要从java代码中为created_date传递动态值,我正在创建spring批处理程序。那么该怎么做呢?如何在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代码中动态传递,并且希望将该查询用于spring批处理作业。 – nIKHIL

0

我得到了解决,下面是代码的变化,我需要在从那里我打电话作业java文件做..

JobParameters PARAM =新JobParametersBuilder()。addString(“createdDate”,“'2017-02-24%'”)。toJobParameters(); JobExecution execution = jobLauncher.run(job,param);


在xml文件& ... FROM`remittance`.`transaction_master` TXN其中txn.created_date像#{jobParameters [ 'createdDate']};” />

相关问题