【问题标题】:Spring Batch + HSQL DB error - user is not having previlageSpring Batch + HSQLDB 错误 - 用户没有权限
【发布时间】:2017-03-24 00:23:51
【问题描述】:

我正在使用 Spring Batch 3.0.5 和 Spring Boot 以及作业启动器,但每当我运行作业时,我都会收到以下错误:

org.springframework.jdbc.BadSqlGrammarException:
    PreparedStatementCallback; bad SQL grammar [SELECT VERSION FROM BATCH_JOB_EXECUTION WHERE JOB_EXECUTION_ID=?];
    nested exception is java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: BATCH_JOB_EXECUTION

Caused by: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: BATCH_JOB_EXECUTION
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCPreparedStatement.<init>(Unknown Source)
at org.hsqldb.jdbc.JDBCConnection.prepareStatement(Unknown Source)
at org.springframework.jdbc.core.JdbcTemplate$SimplePreparedStatementCreator.createPreparedStatement(JdbcTemplate.java:1557)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:638)

Caused by: org.springframework.dao.ConcurrencyFailureException:
    PreparedStatementCallback; SQL [INSERT into BATCH_JOB_INSTANCE(JOB_INSTANCE_ID, JOB_NAME, JOB_KEY, VERSION) values (?, ?, ?, ?)];
    transaction rollback: serialization failure; nested exception is java.sql.SQLTransactionRollbackException: transaction rollback: serialization failure

编辑: 当我将 Spring 从 4.0.0 版本更新到 4.2.3 版本时,该错误自行解决。

现在批处理正在运行,但在第一次运行后未执行步骤。

第一次运行时出现以下错误:

ERROR 8442 --- o.s.s.s.TaskUtils$LoggingErrorHandler    : Unexpected error occurred in scheduled task.
org.springframework.dao.ConcurrencyFailureException: PreparedStatementCallback; SQL [INSERT into BATCH_JOB_INSTANCE(JOB_INSTANCE_ID, JOB_NAME, JOB_KEY, VERSION) values (?, ?, ?, ?)]; transaction rollback: serialization failure; nested exception is java.sql.SQLTransactionRollbackException: transaction rollback: serialization failure

每次运行批处理后,我都会在命令行中获得以下输出。

INFO 8442 --- com.capitalone.schduler.BatchScheduler   : sendMailToCustomers Job ran at 11/10/2016 10:37:06
INFO 8442 --- com.capitalone.schduler.BatchScheduler   : triggering BatchConfiguration at time {}11/10/2016 10:37:06
INFO 8442 --- o.s.b.c.l.support.SimpleJobLauncher      : Job: [FlowJob: [name=queueInfoStep]] launched with the following parameters: [{JOB_START_DATE=Thu Nov 10 10:37:06 EST 2016}]
INFO 8442 --- o.s.batch.core.job.SimpleStepHandler     : Executing step: [queueInfoStep]
INFO 8442 --- o.s.b.c.l.support.SimpleJobLauncher      : Job: [FlowJob: [name=queueInfoStep]] completed with the following parameters: [{JOB_START_DATE=Thu Nov 10 10:37:06 EST 2016}] and the following status: [COMPLETED]

【问题讨论】:

    标签: java spring java-8 spring-batch hsqldb


    【解决方案1】:

    您似乎尚未创建表/视图BATCH_JOB_EXECUTION,或者可能尚未授予自己权限,因为您的错误是:

    user lacks privilege or object not found: BATCH_JOB_EXECUTION
    

    确保您也输入了正确的凭据集 - 如果您使用一个用户名创建表格,您可能会尝试使用不同的用户名和密码来访问它。

    【讨论】:

      【解决方案2】:

      确保指定初始化脚本来创建 Spring Batch 框架表。 spring-batch-core中捆绑了各种数据库的DDL。

      这将进入您的测试上下文文件:

      <jdbc:embedded-database id="dataSource" type="HSQL">
          <jdbc:script location="classpath:/org/springframework/batch/core/schema-hsqldb.sql" />
      </jdbc:embedded-database>
      

      【讨论】:

      • 您好 Dean,我使用的是 java 配置而不是 xml 版本,有没有办法在 java 配置中做同样的事情。我正在寻找一种方法来告诉 spring 不要将数据 HSQLDB 存储超过一定的限制,因为随着时间的推移它会增长并产生问题。
      【解决方案3】:

      都是因为 jar 版本不匹配。弹簧靴、弹簧批和弹簧芯的特定组合仅适用。任何版本的匹配失败都会像我遇到的那样出错。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-11-18
        • 2021-09-08
        • 2016-12-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-13
        相关资源
        最近更新 更多