【Spring-boot】spring-batch伝達パラメータ問題

13022 ワード

Spring-boot統合spring-batch伝達パラメータの一般的な方法は:
	@Bean("step1Reader")
    public JdbcPagingItemReader<T> step1Reader(DataSource dataSource) {
        Map<String, Order> sortKeys = Maps.newHashMap();
        sortKeys.put("id", Order.ASCENDING);

        Map<String, Object> params = Maps.newHashMap();
        params.put("date", DateUtil.getUTC8LocalDateTime().toDate());
        
        return new JdbcPagingItemReaderBuilder<T>()
                .fetchSize(readFetchSize)
                .selectClause("select *")
                .fromClause("from test")
                .whereClause("where credit_time < :date")
                .parameterValues(params)
                .sortKeys(sortKeys)
                .saveState(false)
                .rowMapper(new BeanPropertyRowMapper<T>())
                .dataSource(dataSource)
                .name("step1Reader")
                .build();
    }


このとき、戻り値JdbcPagingItemReaderのパラメータ「date」は一定値であり、日付が進むにつれて変化しません.だからjobParametersでパラメータを伝えることができます
  • jobParameters
  • を設定
    new JobParametersBuilder()
                        .addString("date", DateUtil.getUTC8LocalDateTime().toDate().toString())
                        .toJobParameters();
    
  • パラメータ
  • をとる
    	@Bean("step1Reader")
    	@StepScope
    	//Spring Batch bean scope (StepScope: Spring bean scope)。 step scope batches steps。 Spring beans steps step 。
        public JdbcPagingItemReader<T> step1Reader(@Value("#{jobParameters[date]}") String date, DataSource dataSource) {
            Map<String, Order> sortKeys = Maps.newHashMap();
            sortKeys.put("id", Order.ASCENDING);
    
            Map<String, Object> params = Maps.newHashMap();        
            return new JdbcPagingItemReaderBuilder<T>()
                    .fetchSize(readFetchSize)
                    .selectClause("select *")
                    .fromClause("from test")
                    .whereClause("where credit_time < date('"+date+"')")
                    .parameterValues(params)
                    .sortKeys(sortKeys)
                    .saveState(false)
                    .rowMapper(new BeanPropertyRowMapper<T>())
                    .dataSource(dataSource)
                    .name("step1Reader")
                    .build();
        }
    

    3.呼び出し
    // null 
    //https://blog.codecentric.de/en/2013/06/spring-batch-2-2-javaconfig-part-2-jobparameters-executioncontext-and-stepscope/
    step1Reader(null, dataSource);