2015-10-21 177 views
8

我剛剛使用Spring Batch框架創建了一個批處理作業,但我沒有數據庫特權來運行CREATE SQL。當我嘗試運行批處理作業時,我在框架嘗試創建TABLE_BATCH_INSTANCE時遇到錯誤。我嘗試禁用Spring批處理框架 - 自動創建批處理表

<jdbc:initialize-database data-source="dataSource" enabled="false">  
... 
</jdbc:initialize-database> 

但我試過之後,我還是打了錯誤

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 java.sql.SQLSyntaxErrorException: ORA-00942: table or view does not exist 

反正可以禁用SQL,我只是想正確測試我的讀寫器和處理器的工作。

回答

4

Spring Batch使用數據庫爲其恢復/重試功能保存元數據。

如果你不能在數據庫中創建,然後you have to disable this behaviour

表如果您可以創建批處理元數據表,但不能在運行,那麼你可能create them manually

+0

使用MapJobRepositoryFactoryBean和ResourcelessTransactionManager禁用SQL謝謝 –

+0

Sergio,只是一個簡單的問題,我可以刪除/避免創建這些表?我只是使用spring batch從DB – Sushi

+0

Sushi的表中獲取數據,這就是我列出的第一個選項(「如果您無法在數據庫中創建表格,那麼......」) – Sergio

0

<jdbc:initialize-database/>標籤由Spring使用InitializeDatabaseBeanDefinitionParser解析。您可以嘗試在IDE中調試此類,以確保爲enabled屬性提取了哪些值。此外,可以使用JVM參數禁用此值-Dspring.batch.initializer.enabled=false

+0

對於CREATE SQL它不顯示錯誤,所以我認爲它被禁用。只是當我重新運行批處理作業時,它會再次提示我SQL錯誤,但這一次與SELECT SQL有關。 –

+0

嘗試從數據庫客戶端運行「SELECT JOB_INSTANCE_ID,BATCH_JOB_INSTANCE中的JOB_NAME,其中JOB_NAME = xxx和JOB_KEY = xxx」,並使用您用於Spring Batch數據源配置的憑據查看是否有任何訪問問題。 – Shailendra

0
<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
     http://www.springframework.org/schema/jdbc 
     http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd"> 


    <!-- database --> 
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
     <property name="url" value="jdbc:mysql://localhost:3306/springbatch" /> 
     <property name="username" value="root" /> 
     <property name="password" value="" /> 
    </bean> 

    <!-- transaction manager --> 
    <bean id="transactionManager" class="org.springframework.batch.support.transaction.ResourcelessTransactionManager" /> 

    <!-- create job-meta tables automatically --> 
    <jdbc:initialize-database data-source="dataSource"> 
     <jdbc:script location="org/springframework/batch/core/schema-drop-mysql.sql" /> 
     <jdbc:script location="org/springframework/batch/core/schema-mysql.sql" /> 
    </jdbc:initialize-database> 
</beans> 

並確保您使用的是兼容spring-jdbc -version with spring-batch。 最有可能的是spring-jdbc-3.2.2.RELEASE.JAR兼容。