2015-10-21 23 views
8

Ho appena creato un lavoro batch utilizzando il framework Spring Batch, ma non ho i privilegi di Database per eseguire CREATE SQL. Quando provo a eseguire il processo batch, ho riscontrato un errore mentre il framework ha tentato di creare TABLE_BATCH_INSTANCE. Cerco di disattivare ilSpring Batch Framework - Creazione automatica Tabella batch

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

Ma dopo che ho provato io ancora colpito l'errore

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 

In ogni caso in grado di disabilitare il codice SQL, voglio solo testare il mio scrittore lettore e il lavoro del processore correttamente.

risposta

4

Spring Batch utilizza il database per salvare i metadati per la sua funzionalità di recupero/ripetizione.

Se non è possibile creare le tabelle del database, allora you have to disable this behaviour

Se è possibile creare le tabelle di metadati in batch, ma non in fase di esecuzione allora si potrebbe create them manually

+0

use MapJobRepositoryFactoryBean e ResourcelessTransactionManager disabilitato SQL grazie –

+0

Sergio, solo una semplice domanda, posso rimuovere/evitare di creare quelle tabelle? Sto solo usando il batch di primavera per ottenere i dati da un tavolo da DB – Sushi

+0

Sushi, ecco qual è la prima delle opzioni che ho elencato ("Se non riesci a creare tabelle nel database allora ...") – Sergio

0

<jdbc:initialize-database/> tag viene analizzato da Spring utilizzando InitializeDatabaseBeanDefinitionParser. Puoi provare a eseguire il debug di questa classe nel tuo IDE per assicurarti quali valori vengono prelevati per l'attributo enabled. Anche questo valore può essere disabilitato utilizzando il parametro JVM -Dspring.batch.initializer.enabled=false

+0

Per CREATE SQL non mostra l'errore, quindi ho pensato che fosse disabilitato. Solo che quando rieseguo il lavoro in batch mi viene di nuovo richiesto l'errore SQL ma questa volta è legato a SELECT SQL. –

+0

Provare a eseguire "SELECT JOB_INSTANCE_ID, JOB_NAME da BATCH_JOB_INSTANCE dove JOB_NAME = xxx e JOB_KEY = xxx" dal client di database con le credenziali utilizzate per la configurazione dell'origine dati di Spring Batch e vedere se si hanno problemi di accesso. – 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> 

E assicurarsi che si sta utilizzando compatibile spring-jdbc -versione con spring-batch. Probabilmente spring-jdbc-3.2.2.RELEASE.JAR compatibile.

Problemi correlati