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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Q&A

解決済

1回答

4293閲覧

spring batchを実行させるタイミングを変えたい

takuChiba

総合スコア7

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

0グッド

0クリップ

投稿2018/01/19 03:13

編集2018/01/25 07:16

###前提・実現したいこと
Spring Batchのjobをブラウザ上のリンクを押した時に実行させたいです。

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

プログラムを実行した際にjobも一緒に実行されてしまい、
リンクを押下した時のみ実行されるように試行錯誤しています。

###該当のソースコード

java

1package jp.co.sample.sampleTraining; 2 3import org.springframework.batch.core.Job; 4import org.springframework.batch.core.Step; 5import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing; 6import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; 7import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; 8import org.springframework.batch.core.launch.support.RunIdIncrementer; 9import org.springframework.batch.repeat.RepeatStatus; 10import org.springframework.beans.factory.annotation.Autowired; 11import org.springframework.context.annotation.Bean; 12import org.springframework.context.annotation.Configuration; 13 14//import org.springframework.web.bind.annotation.RequestMapping; 15//import org.springframework.stereotype.Controller; 16 17@Configuration 18@EnableBatchProcessing 19//ここに実験的に@Controller, @RequestMapping をつけたものの実行のタイミングは変わりませんでした。 20public class SampleBatchApplication { 21 22 @Autowired 23 private JobBuilderFactory jobs; 24 25 @Autowired 26 private StepBuilderFactory steps; 27 28 @Bean(name = "job1")//beanアノテーションにname属性を追加しました。※修正後追記 29 public Job job(JobBuilderFactory jobs, Step s) { 30 return jobs 31 .get("myJob") 32 .incrementer(new RunIdIncrementer()) 33 .start(s) 34 .build(); 35 } 36 37 @Bean(name = "s") 38 public Step step() { 39 return steps.get("step").tasklet((stepContribution, chunkContext) -> { 40       System.out.println("実行の確認"); 41 return RepeatStatus.FINISHED; 42 }).build(); 43 } 44}

html

1 2<!DOCTYPE html> 3<html lang="en" xmlns:th="http://www.thymeleaf.org"> 4<head> 5<meta charset="UTF-8" /> 6<meta name="viewport" content="width=device-width, initial-scale=1.0" /> 7</head> 8<body> 9 <div> 10 <!-- spring batchを起動させたいリンク --> 11 <a class="btn btn-default" href="/download/csvDownload"> 12 <i class="fa fa-plus-square-o"></i>CSV Download</a> 13 </div> 14</body> 15</html>

java

1//コントローラー加筆※修正後追加 2package jp.co.sample.sampleTraining.web.download; 3 4import java.util.HashMap; 5import java.util.Map; 6 7import javax.batch.operations.JobRestartException; 8 9import org.springframework.batch.core.Job; 10import org.springframework.batch.core.JobParameter; 11import org.springframework.batch.core.JobParameters; 12import org.springframework.batch.core.JobParametersInvalidException; 13import org.springframework.batch.core.launch.JobLauncher; 14import org.springframework.batch.core.repository.JobExecutionAlreadyRunningException; 15import org.springframework.batch.core.repository.JobInstanceAlreadyCompleteException; 16import org.springframework.beans.factory.annotation.Autowired; 17import org.springframework.stereotype.Controller; 18import org.springframework.web.bind.annotation.RequestMapping; 19 20@Controller 21@RequestMapping("/download") 22public class DownloadController { 23 24 @Autowired 25 JobLauncher jobLauncher; 26 27 @Autowired 28 Job job1; 29 30 @RequestMapping("/csvDownload") 31 public String csvDownload() 32 throws JobExecutionAlreadyRunningException, JobRestartException, JobInstanceAlreadyCompleteException, 33 JobParametersInvalidException, org.springframework.batch.core.repository.JobRestartException { 34 jobLauncher.run(job1, createInitialJobParameterMap()); 35 return "/item/downloadPage"; 36 } 37 38 private JobParameters createInitialJobParameterMap() { 39 Map<String, JobParameter> m = new HashMap<>(); 40 m.put("time", new JobParameter(System.currentTimeMillis())); 41 JobParameters p = new JobParameters(m); 42 return p; 43 } 44 45} 46

###試したこと
ネットで調べたのですが、中々それらしい記事は見つかりませんでした。
spring batchを使用するのは初めてだったので、見当がつきません。

<以降追記部分>
違うだろうなと思いつつアノテーション(@RequestMapping)などをつけてみたりしていました。
あとは何かspring batchに実行条件を変える設定等があるのではないかと考え調べています。

<以降解決後追記>
まず、jobのbeanアノテーションにnameをつけました。
そしてリンクに飛ぶようrequestmappingアノテーションをつけたcontrollerクラスの
メソッドにjobLuncherクラスのrunメソッドを作成し、第一引数にjobのbeanアノテーションにつけた
nameを入れたところ、実行タイミングを変える事が出来ました。
念のため修正後のコードも記載しておきます。

###補足情報(言語/FW/ツール等のバージョンなど)
java/spring mvc/sts

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

回答1

0

ベストアンサー

参考URL
上記の参考URLのページで、「ジョブを非同期で実行する方法」「プログラム上からジョブを実行する方法」を参考にしてやりたいことは実現できないでしょうか?

投稿2018/01/23 06:43

unz.hori

総合スコア1057

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takuChiba

2018/01/24 06:16

ご回答ありがとうございます。 commandLineJobRunnerを使用して…など考えておりましたが、 ページをしっかり拝見するとクラスにbeanを定義して jobにRequestMappingのアノテーションを使用する方法があるのですね。 再度挑戦したいと思います!
takuChiba

2018/01/24 08:16

助言頂きありがとうございました。 参考サイトをちゃんと見たところ実装する事ができました。 ありがとうございます。
unz.hori

2018/01/24 09:24

おお、できましたか。良かったです。
unz.hori

2018/01/24 09:40

解決したのでしたら、クローズしてくださいね。できればどう解決したのかを記述していただけると似たような問題で悩んでる人の解になると思います。
takuChiba

2018/01/25 06:56

色々とありがとう御座います。 本当に助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問