Spring batch 对OpenEdge数据库的Spring批处理支持?

Spring batch 对OpenEdge数据库的Spring批处理支持?,spring-batch,openedge,Spring Batch,Openedge,我工作的公司必须支持不同的数据库,其中一个是OpenEdge,我以前从未使用过它。我们有一个使用SpringBoot、SpringDataJPA和SpringBatch的项目 我们添加了一些自定义类,以使Spring批处理能够与OpenEdge一起工作,但是我们遇到了DB锁定问题,而它对于MS SQL Server和Oracle来说工作得很好。有人用OpenEdge DB使用Spring批处理吗?有人知道SpringBatch是否会支持开箱即用的OpenEdge吗 我正在寻找一个由OpenEdg

我工作的公司必须支持不同的数据库,其中一个是OpenEdge,我以前从未使用过它。我们有一个使用SpringBoot、SpringDataJPA和SpringBatch的项目

我们添加了一些自定义类,以使Spring批处理能够与OpenEdge一起工作,但是我们遇到了DB锁定问题,而它对于MS SQL Server和Oracle来说工作得很好。有人用OpenEdge DB使用Spring批处理吗?有人知道SpringBatch是否会支持开箱即用的OpenEdge吗

我正在寻找一个由OpenEdge支持的作业存储库实现,以及关于如何将其与OpenEdge一起使用的建议,因为我有DB锁定问题。我得到的一个锁定错误是:

org.springframework.jdbc.UncategorizedSQLException:PreparedStatementCallback;SQL的未分类SQLException[选择步骤执行ID、步骤名称、开始时间、结束时间、状态、提交计数、读取计数、筛选计数、写入计数、退出代码、退出消息、读取跳过计数、写入跳过计数、处理跳过计数、回滚计数、上一次更新、来自DM SB步骤执行的版本,其中作业执行ID=?按步骤执行ID排序];SQL状态[HY000];错误代码[-210015];[DataDirect][OpenEdge JDBC Driver][OpenEdge]无法从表PUB.DM_SB_STEP_执行中获取记录锁定;嵌套异常为java.sql.SQLException:[DataDirect][OpenEdge JDBC Driver][OpenEdge]无法从表PUB.DM_SB_STEP_执行中获取记录锁定。
在org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:89)~[spring-jdbc-5.0.8.RELEASE.jar!/:5.0.8.RELEASE]
在org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)~[spring-jdbc-5.0.8.RELEASE.jar!/:5.0.8.RELEASE]
在org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)~[spring-jdbc-5.0.8.RELEASE.jar!/:5.0.8.RELEASE]
在org.springframework.jdbc.core.JdbcTemplate.translateException(JdbcTemplate.java:1402)~[spring-jdbc-5.0.8.RELEASE.jar!/:5.0.8.RELEASE]
在org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:620)~[spring-jdbc-5.0.8.RELEASE.jar!/:5.0.8.RELEASE]
在org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:657)~[spring-jdbc-5.0.8.RELEASE.jar!/:5.0.8.RELEASE]
在org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:688)~[spring-jdbc-5.0.8.RELEASE.jar!/:5.0.8.RELEASE]
在org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:700)~[spring-jdbc-5.0.8.RELEASE.jar!/:5.0.8.RELEASE]
在org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:756)~[spring-jdbc-5.0.8.RELEASE.jar!/:5.0.8.RELEASE]
在org.springframework.batch.core.repository.dao.JdbcStepExecutionDao.addStepExecutions(JdbcStepExecutionDao.java:299)~[spring-batch-core-4.0.1.RELEASE.jar!/:4.0.1.RELEASE]
在com.precisionsoftware.dem.batch.config.PrecisionSimpleJobRepository.getStepExecutionCount(PrecisionSimpleJobRepository.java:261)~[classes!/:7.1.0-0]
在org.springframework.batch.core.job.simplestphandler.shouldStart(simplestphandler.java:222)~[spring-batch-core-4.0.1.RELEASE.jar!/:4.0.1.RELEASE]
在org.springframework.batch.core.job.simplestphandler.handleStep(simplestphandler.java:126)~[spring-batch-core-4.0.1.RELEASE.jar!/:4.0.1.RELEASE]
在org.springframework.batch.core.job.AbstractJob.handleStep(AbstractJob.java:394)~[spring-batch-core-4.0.1.RELEASE.jar!/:4.0.1.RELEASE]
在org.springframework.batch.core.job.SimpleJob.doExecute(SimpleJob.java:135)~[spring-batch-core-4.0.1.RELEASE.jar!/:4.0.1.RELEASE]
在org.springframework.batch.core.job.AbstractJob.execute(AbstractJob.java:308)~[spring-batch-core-4.0.1.RELEASE.jar!/:4.0.1.RELEASE]
在com.precisionsoftware.dem.batch.config.PrecisionJobLauncher$1.run(PrecisionJobLauncher.java:185)[classes!/:7.1.0-0]
位于java.util.concurrent.ThreadPoolExecutor.runWorker(未知源)[na:1.8.0_161]
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(未知源)[na:1.8.0_161]
在java.lang.Thread.run(未知源代码)[na:1.8.0_161]
原因:java.sql.SQLException:[DataDirect][OpenEdge JDBC Driver][OpenEdge]无法从表PUB.DM_SB_STEP_执行中获取记录锁定。
在com.ddtek.jdbc.openedge.client.dde.ah(未知源)~[openedge-11.6.3.jar!/:na]
在com.ddtek.jdbc.openedge.client.dde.ag(未知源)~[openedge-11.6.3.jar!/:na]
在com.ddtek.jdbc.openedge.dde.a(未知源)~[openedge-11.6.3.jar!/:na]
在com.ddtek.jdbc.openedgebase.ddcq.aa(未知源)~[openedge-11.6.3.jar!/:na]
在com.ddtek.jdbc.openedgebase.dddm.next(未知源)~[openedge-11.6.3.jar!/:na]
在com.zaxxer.hikari.pool.HikariProxyResultSet.next(HikariProxyResultSet.java)~[HikariCP-2.7.9.jar!/:na]
在org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:92)~[spring-jdbc-5.0.8.RELEASE.jar!/:5.0.8.RELEASE]
在org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:60)~[spring-jdbc-5.0.8.RELEASE.jar!/:5.0.8.RELEASE]
在org.springframework.jdbc.core.JdbcTemplate$1.doInPreparedStatement(JdbcTemplate.java:667)~[spring-jdbc-5.0.8.RELEASE.jar!/:5.0.8.RELEASE]
在org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:605)~[spring-jdbc-5.0.8.RELEASE.jar!/:5.0.8.RELEASE]
…省略了15个公共帧
下面是创建导致问题的查询的代码:

public int getStepExecutionCount(JobInstance JobInstance,字符串stepName){
整数计数=0;
List jobExecutions=jobExecutionDao.findJobExecutions(jobInstance);
for(作业执行作业执行:作业执行){
步骤执行dao.addStepExecutions(作业执行);
用于(步骤执行)步骤执行
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">

<!-- Transactional configuration for Spring Batch -->
<tx:advice id="myTxAdvice" transaction-manager="springBatchTransactionManager">
    <tx:attributes>
        <tx:method name="create*" read-only="false" isolation="READ_COMMITTED" propagation="REQUIRES_NEW"/>
        <tx:method name="getLastJobExecution*" read-only="false" isolation="READ_COMMITTED" propagation="REQUIRES_NEW"/>
        <tx:method name="update*" read-only="false" isolation="READ_COMMITTED" propagation="REQUIRED"/>
        <tx:method name="add*" read-only="false" isolation="READ_COMMITTED" propagation="REQUIRED"/>
        <tx:method name="*" read-only="true" isolation="READ_UNCOMMITTED" propagation="REQUIRED"/>
    </tx:attributes>
</tx:advice>

<aop:config>
    <aop:advisor pointcut="execution(* com.company.dem.batch.config.*Repository+.*(..))" advice-ref="myTxAdvice"/>
</aop:config>