Transactions 带有H2数据库的Spring批处理不工作

Transactions 带有H2数据库的Spring批处理不工作,transactions,spring-batch,h2,Transactions,Spring Batch,H2,我已经用SpringBatch建立了一个基本的HelloWorld项目,同时使用H2数据库。您可以在此处找到所有代码: maven安装足以构建它,您可以使用以下命令运行作业: java -cp "target/dependency-jars/*;target/greeter-1.0-SNAPSHOT.jar" org.springframework.batch.core.launch.support.CommandLineJobRunner spring/batch/greeting.xml g

我已经用SpringBatch建立了一个基本的HelloWorld项目,同时使用H2数据库。您可以在此处找到所有代码:

maven安装足以构建它,您可以使用以下命令运行作业:

java -cp "target/dependency-jars/*;target/greeter-1.0-SNAPSHOT.jar" org.springframework.batch.core.launch.support.CommandLineJobRunner spring/batch/greeting.xml greetingJob
然而,我似乎无法让它工作,因为H2总是抱怨表不存在,或者之前添加到数据库中的条目不再存在

Sep 23, 2016 8:15:12 PM org.springframework.batch.core.launch.support.CommandLineJobRunner start
SEVERE: Job Terminated in error: PreparedStatementCallback; bad SQL grammar [SELECT JOB_INSTANCE_ID, JOB_NAME from BATCH_JOB_INSTANCE where JOB_NAME = ? and JOB_KEY = ?]; nested exception is org.h2.jdbc.JdbcSQLException: Table "BATCH_JOB_INSTANCE" not found; SQ
L statement:
SELECT JOB_INSTANCE_ID, JOB_NAME from BATCH_JOB_INSTANCE where JOB_NAME = ? and JOB_KEY = ? [42102-192]
org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [SELECT JOB_INSTANCE_ID, JOB_NAME from BATCH_JOB_INSTANCE where JOB_NAME = ? and JOB_KEY = ?]; nested exception is org.h2.jdbc.JdbcSQLException: Table "BATCH_JOB_INSTANC
E" not found; SQL statement:
SELECT JOB_INSTANCE_ID, JOB_NAME from BATCH_JOB_INSTANCE where JOB_NAME = ? and JOB_KEY = ? [42102-192]
        at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:231)
        at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73)
在调试模式下,我已检查是否添加了spring批处理所需的表。但一旦批处理作业本身尝试使用这些表,就好像它们从未存在过一样。当我不使用jdbc:initializedatabasespringframework元素并通过在数据库连接url中指定init脚本插入spring批处理模式时,如下所示

<property name="url" value="jdbc:h2:mem:.:;INIT=RUNSCRIPT FROM 'resources/spring/batch/schema/schema-all.sql'"/>

然后,批处理过程将达到另一个具有类似效果的点。它找不到刚刚创建的作业执行的db条目


将数据库更改为mysql可以让一切正常工作,但为什么h2不能正常工作呢?它不支持事务或其他什么吗?我非常希望对此进行解释,或者可能需要一个解决方案?

我在考虑您用于登录H2 db的“登录”有一个默认模式,它不是您为Spring Batch设置的模式。请看这里:我面临同样的问题。你最终能找到一个解决方案吗@Juru?是的,看看pete的答案。默认情况下,在每个连接关闭后,数据库都会被丢弃,您需要为另一个行为更改某些属性。我认为您用于登录H2 db的“登录”有一个默认架构,而不是您为Spring Batch设置的架构。请看这里:我面临同样的问题。你最终能找到一个解决方案吗@Juru?是的,看看pete的答案。默认情况下,在关闭每个连接后都会丢弃数据库,您需要为另一个行为更改某些属性。