【Spring-boot】spring-batch传参数问题

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来进行传参

  1. 设置jobParameters
new JobParametersBuilder()
                    .addString("date", DateUtil.getUTC8LocalDateTime().toDate().toString())
                    .toJobParameters();
  1. 取参数
	@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);
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值