
###前提・実現したいこと
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


回答1件
あなたの回答
tips
プレビュー