小编Dea*_*ark的帖子

在获取所有数据之前,Spring Batch ResultSet被其他人关闭

我正在尝试将DB2源设置为Batch元数据的持久性.我得到这个堆栈跟踪:

Caused by: org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; uncategorized SQLException for SQL [SELECT JOB_EXECUTION_ID, START_TIME, END_TIME, STATUS, EXIT_CODE, EXIT_MESSAGE, CREATE_TIME, LAST_UPDATED, VERSION, JOB_CONFIGURATION_LOCATION from rhall.BATCH_JOB_EXECUTION where JOB_INSTANCE_ID = ? order by JOB_EXECUTION_ID desc]; SQL state [null]; error code [-4470]; [jcc][t4][10120][10898][3.57.82] Invalid operation: result set is closed. ERRORCODE=-4470, SQLSTATE=null; nested exception is com.ibm.db2.jcc.am.SqlException: [jcc][t4][10120][10898][3.57.82] Invalid operation: result set is closed. ERRORCODE=-4470, SQLSTATE=null
   at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:84)
   at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
   at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
   at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:645)
   at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:680)
   at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:712)
   at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:722)
   at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:777)
   at org.springframework.batch.core.repository.dao.JdbcJobExecutionDao.findJobExecutions(JdbcJobExecutionDao.java:131)
   at org.springframework.batch.core.repository.support.SimpleJobRepository.getStepExecutionCount(SimpleJobRepository.java:253)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native …
Run Code Online (Sandbox Code Playgroud)

db2 spring-batch

16
推荐指数
1
解决办法
933
查看次数

Liquibase:diff总是生成索引

我正在使用带有liquibase-maven-plugin的spring-boot来根据我的类生成数据库更改,但是"mvn compile liquibase:diff"命令总是会生成索引和外键的删除和包含,即使数据库已更新并且类没有变化(因此数据库中应该没有变化).

任何人都知道这是对的还是如何避免它?我只想在项目的变更集中生成对数据库的新更改.

java spring liquibase maven spring-boot

11
推荐指数
1
解决办法
357
查看次数

Spring Batch - 使用带有列表列表的ItemWriter

我们的处理器返回List<?>(有效传递a List<List<?>>)到我们的ItemWriter.

现在,我们观察到JdbcBatchItemWriter没有编程处理item instanceof List.我们还观察到了处理项目instanceof List; 我们需要写一个自定义ItemSqlParameterSourceProvider.

但令人遗憾的是,它返回的SqlParameterSource只能处理一个item并且再也无法处理一个List.

那么,有人可以帮助我们了解如何处理列表中的列表JdbcBatchItemWriter吗?

java spring-batch

7
推荐指数
1
解决办法
7421
查看次数

Oracle - DB 似乎破坏了 JDBC 批量插入

我们的一个 ETL 应用程序遇到了一个奇怪的问题。实际上,该过程打开一个游标以从一个数据库中提取数据,执行一些转换,然后使用批量插入插入到另一个数据库中。

对于 ETL 中的所有表,我们的提交间隔设置为 1000 行。因此,在读取 1k 行的每个块并执行转换后,我们对目标数据库执行一次批量插入(使用 Java、Spring Batch、OJDBC7 v12.1.0.2)。

然而,有些表的速度非常慢。我们首先确保 FK 已关闭(确实如此)。然后我们检查以确保触发器已被禁用(它们是)。我们添加了日志记录来获取每个批量插入中的行(除了每个线程的最终插入之外,它是 1000 行)。

最后,查询v$sql,对于某些表,我们看到每次执行接近 1000 行,这正是我们所期望的。然而,对于痛苦的表,它通常徘徊在接近一个!我们预计大多数表的数据量都在 900 左右,因为线程的最终提交可能没有完整的 1k 行,但某些表上每次执行的异常低的行数确实令人头疼。

一些宽表(100+列)有问题,但其他的则没问题。一些高度分区(100+分区)的表很慢,但其他表则很好。所以我很困惑。有没有人见过这个?我的想法已经用完了!

谢谢!

这是我们看到的内容v$sql(表名被混淆):

SELECT *
FROM
  (SELECT REGEXP_SUBSTR (sql_text, 'Insert into [^\(]*') sql_text,
    sql_id,
    TRUNC(
    CASE
      WHEN SUM (executions) > 0
      THEN SUM (rows_processed) / SUM (executions)
    END,2) rows_per_execution
  FROM v$sql
  WHERE parsing_schema_name = 'PFT010_RAPP_PRO'
  AND sql_text LIKE 'Insert into%'
  GROUP BY sql_text,
    sql_id
  )
ORDER BY rows_per_execution ASC; …
Run Code Online (Sandbox Code Playgroud)

java oracle etl oracle12c

5
推荐指数
1
解决办法
636
查看次数

标签 统计

java ×3

spring-batch ×2

db2 ×1

etl ×1

liquibase ×1

maven ×1

oracle ×1

oracle12c ×1

spring ×1

spring-boot ×1