質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.59%

Spring Batchのコマンド実行でエラー発生

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 3,858

momo1124

score 13

開発環境EclipseでSpring Batchを使用しバッチアプリケーションを作成しています。
Eclipse上で実行に成功しましたが、コマンドからの実行でエラーが発生してしまいます。
解消方法を教えていただきたく思います。

Eclipse環境上では以下で実行ができました。
Javaアプリケーションの実行構成
・メイン・クラス(M):org.springframework.batch.core.launch.support.CommandLineJobRunner
・プログラムの引数(A):com.test.batch.BatchJob job
で設定し実行
BatchJobはJavaで作成したJobクラスを指します。
jobはJavaクラス内の起動Jobを指します。

 application.propertiesの構成は以下となります。

この問題解消後外だしする予定です。

#接続DB設定(テスト用)
spring.datasource.url=jdbc:oracle:thin:@○○○○○:○○○
spring.datasource.username=○○○○○○
spring.datasource.password=○○○○○○
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver

#メタテーブルDDL実行制御
spring.batch.initializer.enabled=false

問題となっているコマンドプロンプトからの実行方法は以下となります。
①Eclipse上で対象プロジェクトを右クリック→「実行」→「Maven clean」→「Maven install」
target配下に実行用TestBatch.jarが作成される。
②TestBatch.jarを[C:\test\kidou]に配置
③コマンドプロンプトで[C:\test\kidou]に移動し、
[java -jar TestBatch.jar org.springframework.batch.core.launch.support.CommandLineJobRunner BOOT-INF/classes/com/test/batch/TestBatch job]をたたく
コマンドは↓様を参考にさせていただきました。
http://javatechnology.net/spring/spring-batch-job-execute-jar/

 発生している問題・エラーメッセージ

2018-11-25 20:53:45.507[main][INFO ][com.test.batch.BatchApplication] No active profile set, falling back to default profiles: default
2018-11-25 20:53:46.765[main][WARN ][org.springframework.context.annotation.AnnotationConfigApplicationContext] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'testTableDao' defined in URL [jar:file:/C:/test/kidou/TestBatch.jar!/BOOT-INF/classes!/com/test/db/dao/TestTableDao.class]: Unsatisfied dependency expressed through bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [org/mybatis/spring/boot/autoconfigure/MybatisAutoConfiguration.class]: Unsatisfied dependency expressed through method 'sqlSessionFactory' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.zaxxer.hikari.HikariDataSource]: Factory method 'dataSource' threw exception; nested exception is java.lang.IllegalStateException: Cannot load driver class: oracle.jdbc.driver.OracleDriver
2018-11-25 20:53:46.777[main][INFO ][org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener] 

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2018-11-25 20:53:46.783[main][ERROR][org.springframework.boot.SpringApplication] Application run failed


oraclejdbcに関するエラーですが、
jar作成後にjarの中を見てみると
C:\test\kidou\TestBatch.jar\BOOT-INF\libにoraclejdbc以外の依存関係は入っていました。
oraclejdbcは含まれていなかったため、jarファイルと同ディレクトリにjdbcを配置し、
環境変数-システム環境変数のCLASSPATHにC:\test\kidou\ojdbc8.jarを指定しましたが、エラー内容は変わりませんでした。
Eclipse上では動作したため、oraclejdbcのパスの通し方や実行時のコマンドの指定に誤りがあるかと思います。
多くのサイトを拝見しましたが解決できずにいます。

コマンドでの実行で正常に動作できる方法を教えていただきたく思います。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • rubytomato

    2018/11/26 08:38

    CLASSPATHを設定した後に、コマンドプロンプトを開きなおし、echo %CLASSPATH%で設定が反映されているか確認してください。それとOracle JDBCの依存関係をRuntimeではなくcompileにしてjarに含めてみるのはどうでしょうか?

    キャンセル

  • momo1124

    2018/11/27 00:16

    回答ありがとうございます。返答が遅くなり済みません。 CLASSPATHは通っていました。 pomファイルに設定したOracle JDBCの依存関係はscopeがsystemになっていて、systemPathを指定していました。 <systemPath>${basedir}/lib/ojdbc8.jar</systemPath> 解決のヒントになりました。ありがとうございました。

    キャンセル

回答 2

checkベストアンサー

0

JDBCドライバが内包されない問題については、mavenのpom.xmlに含まれていないか、スコープがprovidedだからでしょう。

http://www.techscore.com/tech/Java/ApacheJakarta/Maven/3/

内包させたい場合は、mavenのローカルリポジトリに対象のjarファイルをインポートする方法があります。
手動でクラスパス設定をすると実行環境依存となるのであまり良い方法ではありません。

なお、実行可能jarファイルのクラスパスはMETA-INFのMANIFEST.MFに記載されますが、mavenで実行していればこれらを修正する必要はありません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/11/27 00:18

    回答ありがとうございます。返答が遅くなり済みません。
    pomファイルに設定したOracle JDBCの依存関係はscopeがsystemになっていて、systemPathを指定していました。
    ご指摘していただいた点を参考に解決しました。ありがとうございました。

    キャンセル

0

みなさんのご指摘を参考に解決しましたので、展開します。
①pomファイルのoracle jdbcの依存関係のscopeをsystemからcompileに修正
②①と同様にsystemPathも設定していたため削除
③libファイル内のoracle jdbcを参照していたためlibファイルを削除
④mvnコマンドでoracle jdbcをダウンロード
⑤コマンドjava -jar BatchJobを実行
→問題となっていたエラーは解決しました。
⑥jobではなく、メインのみ実行されたため、メインからjobを呼ぶロジックを作成

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.59%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る