grails - 如何在 Grails Spring Batch 和 SQL 中使用日期作业参数?

标签 grails spring-batch

我想使用 2 个使用 Spring Batch 后期绑定(bind)的日期作业参数执行查询。

JobParametersBuilder builder = new JobParametersBuilder()
builder.addDate("until", until);
builder.addDate("start", start);
JobExecution exec = jobLauncher.run(myJob, builder.toJobParameters())

我的 bean /工作定义:
myReader(JdbcPagingItemReader) { bean ->
    bean.scope = 'step'
    bean.autowire = 'byName'
    dataSource = ref('dataSource')
    queryProvider = ref('sqlPagingQueryProviderFactoryBean')
    parameterValues = [
            start: "#{jobParameters['start']}",
            until: "#{jobParameters['until']}"
    ]
    pageSize = '10'
    rowMapper = ref('myRowMapper') // not shown here
}


sqlPagingQueryProviderFactoryBean(SqlPagingQueryProviderFactoryBean) { bean ->
    bean.autowire = 'byName'
    bean.scope = 'step'
    dataSource = ref('dataSource')
    selectClause = 'some_timestamp, column2'
    fromClause = 'some_table'
    whereClause = 'some_timestamp >= cast(:start as timestamp) AND some_timestamp < cast(:until as timestamp)'
    sortKey = 'some_timestamp'
}

我收到各种错误,具体取决于我如何转换时间戳等,例如(对于上面的代码):

step.AbstractStep Encountered an error executing step myStep in job myJob org.springframework.dao.DataIntegrityViolationException: PreparedStatementCallback; SQL [SELECT some_timestamp, column2 FROM some_table WHERE some_timestamp >= cast(? as timestamp) AND some_timestamp < cast(? as timestamp) ORDER BY some_timestamp ASC LIMIT 10]; ERROR: invalid input syntax for type timestamp: "#{jobParameters['start']}"; nested exception is org.postgresql.util.PSQLException: ERROR: invalid input syntax for type timestamp: "#{jobParameters['start']}"nested exception is org.postgresql.util.PSQLException: ERROR: invalid input syntax for type timestamp: "#{jobParameters['start']}"



请问如何访问我的查询的时间戳?

最佳答案

好的,所以我用了this SO question作为线索,并没有将参数传递给 SqlPagingQueryProviderFactoryBean并在这里简单地使用后期绑定(bind)。

// within myReader, no need for parameters
// parameterValues = [
//        start: "#{jobParameters['start']}",
//        until: "#{jobParameters['until']}"
// ]


// within sqlPagingQueryProviderFactoryBean
whereClause = "some_timestamp >= '#{jobParameters[\'start\']}'::timestamptz AND some_timestamp < '#{jobParameters[\'until\']}'::timestamptz"

关于grails - 如何在 Grails Spring Batch 和 SQL 中使用日期作业参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29108083/

相关文章:

java - 使用 Spring 在后台运行进程的推荐方法是什么?

grails - Grails从分钟字段创建下拉列表

grails - 如何从 Controller 传递变量的值以查看grails?

grails - 在 Groovy 闭包内更新 "it"

hibernate - GORM createCriteria或带有别名的语句

java - Spring Batch - 将参数传递到作业参数生成器中

grails - 从Grails 2.3.2中删除了generate- *命令吗?

spring-batch - 如何使用单个读取器配置 Spring 批处理作业并根据返回的对象调用多个写入器

java - 使用 Spring Batch 写入多个文件

java - 使用 SpringBatch 的 ItemReaders 问题读取 S3 资源