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を無効にできますが、リーダーライターとプロセッサの動作を適切にテストしたいだけです。
Spring Batchはデータベースを使用して、その回復/再試行機能のためにメタデータを保存します。
データベースにテーブルを作成できない場合は、- この動作を無効にする必要があります
バッチメタデータテーブルを作成できるが、ランタイムでは作成できない場合は、 手動で作成
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
永久に無効にします。
春バッチデータスキーマの自動作成を有効にするには、次の行をspring application.propertiesファイルに追加します。
spring.batch.initialize-schema = always
Springバッチメタデータスキーマの詳細を理解するには:
https://docs.spring.io/spring-batch/trunk/reference/html/metaDataSchema.html
ばかげているようですが、誰かが同じ問題を抱えている可能性があります。
データベースからすべてのテーブルを削除した後、このエラーを受け取りました。 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サーバーを再起動してバッチを再度実行すると、テーブルはエラーなしで作成されました。
<?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互換性があります。
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スクリプトをコピーし、テーブルの大文字化を変更することができました。
<jdbc:initialize-database/>
タグは、InitializeDatabaseBeanDefinitionParser
を使用してSpringによって解析されます。このクラスのデバッグは、IDE=でenabled
属性の値が選択されていることを確認します。JVMパラメーター-Dspring.batch.initializer.enabled=false
これは私のために働く:Spring boot 2.0
batch:
initialize-schema: never
initializer:
enabled: false