2016-08-29 21 views
2

Delow設定を使用して、メモリベースのデータベースhsqldbでバネ処理を行いました。Springバッチ-BatchDatabaseInitializer:initメソッドの呼び出しに失敗しました

@Bean 
public ResourcelessTransactionManager transactionManager() { 
    return new ResourcelessTransactionManager(); 
} 

@Bean 
public JobRepository jobRepository(ResourcelessTransactionManager transactionManager) throws Exception { 
    MapJobRepositoryFactoryBean mapJobRepositoryFactoryBean = new MapJobRepositoryFactoryBean(transactionManager); 
    mapJobRepositoryFactoryBean.setTransactionManager(transactionManager); 
    return mapJobRepositoryFactoryBean.getObject(); 
} 

@Bean 
public SimpleJobLauncher jobLauncher(JobRepository jobRepository) { 
    SimpleJobLauncher simpleJobLauncher = new SimpleJobLauncher(); 
    simpleJobLauncher.setJobRepository(jobRepository); 
    return simpleJobLauncher; 
} 

しかし、DB2データベースのバッチに接続すると、以下のエラーが表示されます。例外の下に取得frenzykrygerで言及:プロパティ(/org/springframework/batch/core/schema-db2.sql spring.batch.schema =クラスパス)を追加した後

class path resource [org/springframework/batch/core/schema-db2zos.sql] cannot be opened because it does not exist 
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'batchDatabaseInitializer': Invocation of init method failed; nested exception is org.springframework.jdbc.datasource.init.CannotReadScriptException: Cannot read SQL script from class path resource [org/springframework/batch/core/schema-db2zos.sql]; nested exception is java.io.FileNotFoundException: class path resource [org/springframework/batch/core/schema-db2zos.sql] cannot be opened because it does not exist 

Failed to execute SQL script statement #1 of resource class path resource [org/springframework/batch/core/schema-db2.sql]: CREATE TABLE BATCH_JOB_INSTANCE (JOB_INSTANCE_ID BIGINT NOT NULL PRIMARY KEY , VERSION BIGINT , JOB_NAME VARCHAR(100) NOT NULL, JOB_KEY VARCHAR(32) NOT NULL, constraint JOB_INST_UN unique (JOB_NAME, JOB_KEY)) 
com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-551, SQLSTATE=42501, SQLERRMC=AK51602;CREATE TABLE;DSNDB04, DRIVER=4.19.26 
    at com.ibm.db2.jcc.am.kd.a(Unknown Source) 
    at com.ibm.db2.jcc.am.kd.a(Unknown Source) 
xception in thread "main" java.lang.IllegalStateException: Failed to execute CommandLineRunner 
    at org.springframework.boot.SpringApplication.runCommandLineRunners(SpringApplication.java:675) 
    at org.springframework.boot.SpringApplication.afterRefresh(SpringApplication.java:690) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:321) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:957) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:946) 
    at com.deere.sample.main.Application.main(Application.java:22) 
Caused by: org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [SELECT JOB_INSTANCE_ID, JOB_NAME from BATCH_JOB_INSTANCE where JOB_NAME = ? order by JOB_INSTANCE_ID desc]; nested exception is com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-204, SQLSTATE=42704, SQLERRMC=U90JDCPT.BATCH_JOB_INSTANCE, DRIVER=4.19.26 
    at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:231) 
Caused by: com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-204, SQLSTATE=42704, SQLERRMC=U90JDCPT.BATCH_JOB_INSTANCE, DRIVER=4.19.26 
    at com.ibm.db2.jcc.am.kd.a(Unknown Source) 
    at com.ibm.db2.jcc.am.kd.a(Unknown Source) 

プロパティ(spring.batch.initializer.enabled = false)を追加した後に、例外が発生する。

Exception in thread "main" java.lang.IllegalStateException: Failed to execute CommandLineRunner 
    at org.springframework.boot.SpringApplication.runCommandLineRunners(SpringApplication.java:675) 
    at org.springframework.boot.SpringApplication.afterRefresh(SpringApplication.java:690) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:321) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:957) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:946) 
    at com.deere.sample.main.Application.main(Application.java:22) 
Caused by: org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [SELECT JOB_INSTANCE_ID, JOB_NAME from BATCH_JOB_INSTANCE where JOB_NAME = ? order by JOB_INSTANCE_ID desc]; nested exception is com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-204, SQLSTATE=42704, SQLERRMC=U90JDCPT.BATCH_JOB_INSTANCE, DRIVER=4.19.26 
    at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:231) 
Caused by: com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-204, SQLSTATE=42704, SQLERRMC=U90JDCPT.BATCH_JOB_INSTANCE, DRIVER=4.19.26 
    at com.ibm.db2.jcc.am.kd.a(Unknown Source) 
    at com.ibm.db2.jcc.am.kd.a(Unknown Source) 

答えて

0

spring-batch-coreにはdb2zosスキーマはありませんが、db2のスキーマはあります。プロパティで明示的に指定してみてください:

spring.batch.schema=classpath:/org/springframework/batch/core/schema-db2.sql 

更新

完全に無効にスキーマの初期化は、単に次のプロパティを使用するには:複数の基準について

spring.batch.initializer.enabled=false 

をちょうどorg.springframework.boot.autoconfigure.batch.BatchPropertiesクラスを参照してください。フィールドはspring.batch.*のプロパティにマップされています。

このような場合、スキーマはいくつかの外部手段で作成する必要があります。または、org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBeanを使用してデータベース内のスプリングバッチ状態を保持しないでください。

+0

プロパティを指定した後でも、同じ問題が発生します。 –

+0

申し訳ありませんが、私はあなたに不正なプロパティを与えました(彼らは春の起動スターターバッチでは動作しません)。私は答えを更新しました。このプロパティはうまくいくはずです。 – frenzykryger

+0

上記のプロパティを追加していただきありがとうございます。バッチが失敗したためにメタデータテーブルを作成しようとしましたが、SQLスクリプトエラーを実行できませんでした。私の要件は、データを作成することではありません。ResourcelessTransactionManagerを使用するバッチのメタデータテーブル。私は上記のプロパティファイルを置いた後に私が得るエラーで私の質問を更新しました。 –

関連する問題