webentwicklung-frage-antwort-db.com.de

Spring Batch Framework - Stapeltabelle automatisch erstellen

Ich habe gerade einen Batch-Job mit dem Spring Batch-Framework erstellt, aber ich habe keine Datenbankberechtigungen zum Ausführen von CREATE SQL. Beim Versuch, den Batch-Job auszuführen, ist der Fehler aufgetreten, während das Framework versucht hat, TABLE_BATCH_INSTANCE zu erstellen. Ich versuche das zu deaktivieren

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

Aber nachdem ich es versucht habe, bin ich trotzdem auf den Fehler gestoßen

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

Auf jeden Fall kann SQL deaktiviert werden, ich möchte nur testen, ob Reader, Writer und Prozessor ordnungsgemäß funktionieren.

20
Einn Hann

Spring Batch verwendet die Datenbank, um Metadaten für die Wiederherstellungs-/Wiederholungsfunktion zu speichern.

Wenn Sie keine Tabellen in der Datenbank erstellen können, dann Sie müssen dieses Verhalten deaktivieren

Wenn Sie die Batch-Metadatentabellen erstellen können, jedoch nicht zur Laufzeit, können Sie manuell erstellen

13
Sergio

Mit Spring Boot 2.0 benötigen Sie wahrscheinlich Folgendes: https://docs.spring.io/spring-boot/docs/2.0.0.M7/reference/htmlsingle/#howto-initialize-a-spring-batch- Datenbank

spring.batch.initialize-schema=always

Standardmäßig werden die Tabellen nur erstellt, wenn Sie eine eingebettete Datenbank verwenden.

Oder

 spring.batch.initialize-schema=never

Um es dauerhaft zu deaktivieren.

26
Pim Hazebroek

Um die automatische Erstellung des Datenschemas für die Frühlingsstapel zu aktivieren, fügen Sie einfach diese Zeile zu Ihrer Datei spring application.properties hinzu:

spring.batch.initialize-schema = always

Um mehr über das Spring-Batch-Metadatenschema zu erfahren, gehen Sie wie folgt vor:

https://docs.spring.io/spring-batch/trunk/reference/html/metaDataSchema.html

5
BlaCk HoLe

Scheint albern, aber jemand kann das gleiche Problem haben.

Ich habe diesen Fehler erhalten, nachdem ich alle Tabellen aus einer Datenbank gelöscht habe. Als ich versuchte, den Frühlingsstapel zu starten, erhielt ich die Fehlermeldung:

schlechte SQL-Grammatik [SELECT JOB_INSTANCE_ID, JOB_NAME from BATCH_JOB_INSTANCE where JOB_NAME =? und JOB_KEY =?]

und:

Ungültiger Objektname "BATCH_JOB_INSTANCE"

Dies ist mir passiert, weil ich die Tabellen löschen, ohne den Dienst neu zu starten. Der Dienst wurde gestartet und erhielt die Datenbank-Metadaten mit der Batch-Tabellen in der Datenbank. Nachdem sie gelöscht und der Server nicht neu gestartet wurde, war der Spring Batch der Ansicht, dass die Tabellen noch vorhanden sind.

Nach dem Neustart des Spring Batch-Servers und der erneuten Ausführung des Batchs wurden die Tabellen fehlerfrei erstellt.

1
Dherik
<?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>

Und stellen Sie sicher, dass Sie kompatible spring-jdbc -Version mit spring-batch verwenden. Höchstwahrscheinlich spring-jdbc-3.2.2.RELEASE.JAR kompatibel.

0
Shalika

Beim Laufen mit Spring Boot:

Running with Spring Boot v1.5.14.RELEASE, Spring v4.3.18.RELEASE

Das sollte reichen:

spring:
    batch:
        initializer:
            enabled: false

Das Initialisierungsschema funktionierte für diese Spring-Boot-Version nicht. Danach konnte ich die SQL-Skripte aus dem Spring-Core-Jar kopieren und die Groß- und Kleinschreibung der Tabelle ändern, da dies mein Problem bei der automatischen Tabellenerstellung unter Windows/Mac/Linux war.

0
Investigator

Das <jdbc:initialize-database/> - Tag wird von Spring mit InitializeDatabaseBeanDefinitionParser analysiert. Sie können versuchen, diese Klasse in Ihrem IDE zu debuggen, um sicherzustellen, welche Werte für das enabled -Attribut erfasst werden. Dieser Wert kann auch mithilfe des JVM-Parameters -Dspring.batch.initializer.enabled=false

0
Shailendra

das funktioniert bei mir: spring boot 2.0

  batch:
        initialize-schema: never
        initializer:
            enabled: false
0
kozla13