web-dev-qa-db-ja.com

Spring Batch Framework-バッチテーブルの自動作成

Spring Batchフレームワークを使用してバッチジョブを作成しましたが、CREATE SQLを実行するデータベース権限がありません。バッチジョブを実行しようとすると、フレームワークがTABLE_BATCH_INSTANCEを作成しようとしたときにエラーが発生しました。私は無効にしようとします

<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を無効にできますが、リーダーライターとプロセッサの動作を適切にテストしたいだけです。

20
Einn Hann

Spring Batchはデータベースを使用して、その回復/再試行機能のためにメタデータを保存します。

データベースにテーブルを作成できない場合は、- この動作を無効にする必要があります

バッチメタデータテーブルを作成できるが、ランタイムでは作成できない場合は、 手動で作成

13
Sergio

Spring Boot 2.0ではおそらくこれが必要です: https://docs.spring.io/spring-boot/docs/2.0.0.M7/reference/htmlsingle/#howto-initialize-a-spring-batch-データベース

spring.batch.initialize-schema=always

デフォルトでは、組み込みデータベースを使用している場合にのみテーブルが作成されます。

または

 spring.batch.initialize-schema=never

永久に無効にします。

26
Pim Hazebroek

春バッチデータスキーマの自動作成を有効にするには、次の行をspring application.propertiesファイルに追加します。

spring.batch.initialize-schema = always

Springバッチメタデータスキーマの詳細を理解するには:

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

5
BlaCk HoLe

ばかげているようですが、誰かが同じ問題を抱えている可能性があります。

データベースからすべてのテーブルを削除した後、このエラーを受け取りました。 Spring Batchを開始しようとすると、次のエラーが表示されました。

不正なSQL文法[SELECT_JOB_INSTANCE_ID、JOB_NAME from BATCH_JOB_INSTANCE where JOB_NAME =?およびJOB_KEY =?]

そして:

無効なオブジェクト名「BATCH_JOB_INSTANCE」

これは、私がサービスを再起動せずにテーブルを削除するであるために起こりました。サービスが開始され、データベースメタデータを受信しますwithデータベース上のバッチテーブル。サーバーを再起動せずにドロップした後、Spring Batchはテーブルがまだ存在していると考えました。

Spring Batchサーバーを再起動してバッチを再度実行すると、テーブルはエラーなしで作成されました。

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>

また、互換性のあるspring-jdbc -versionとspring-batchを使用していることを確認してください。おそらくspring-jdbc-3.2.2.RELEASE.JAR互換性があります。

0
Shalika

Spring Bootで実行する場合:

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

これで十分です:

spring:
    batch:
        initializer:
            enabled: false

初期化スキーマは、このSpringブートバージョンでは機能しませんでした。その後、これはWindows/Mac/Linuxでの自動テーブル作成の問題であったため、spring-core jarからSQLスクリプトをコピーし、テーブルの大文字化を変更することができました。

0
Investigator

<jdbc:initialize-database/>タグは、InitializeDatabaseBeanDefinitionParserを使用してSpringによって解析されます。このクラスのデバッグは、IDE=でenabled属性の値が選択されていることを確認します。JVMパラメーター-Dspring.batch.initializer.enabled=false

0
Shailendra

これは私のために働く:Spring boot 2.0

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