2016-11-10 31 views
2

我使用Spring Batch的3.0.5和Spring啓動,與作業啓動以來,但每當我跑我的工作,我得到以下錯誤:Spring Batch的+ HSQL DB錯誤 - 用戶沒有previlage

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 

編輯: 當我從版本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] 

回答

1

看來,你要麼尚未創建表/視圖BATCH_JOB_EXECUTION,或者沒有給予自己的權限給它,因爲你的錯誤是說:

user lacks privilege or object not found: BATCH_JOB_EXECUTION 

確保您」重新輸入正確的憑據集 - 如果您使用一個用戶名創建表,則可能會嘗試使用不同的用戶名和密碼訪問該表。

1

確保您指定了初始化腳本來創建Spring Batch框架表。各種數據庫的DDL捆綁在spring-batch-core中。

這會去你的測試方面的文件:

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

你好Dean,我使用java配置不是xml版本,有沒有辦法在java配置中做同樣的事情。我正在尋找一種方法來告訴spring不要將HSQLDB數據存儲到一定限度以上,因爲隨着時間的推移,它會增長並造成麻煩。 – ppmohapatra

0

一切都是因爲罐子版本missmatch的。彈簧靴,彈簧批和彈簧芯的特定組合僅適用。任何版本的錯過比賽都會像我遇到的那樣錯誤地結束。