現在、ドキュメンテーションのspring-batch-bootの基本Webコンテナガイドラインを使用してTomcatサーバー上でスクリプトを実行しようとしています メインクラスを変更する前にjarファイルとしてスクリプトが正しく動作していましたが、サーブレットに変換しようとすると、サーバーの起動時にのみ起動する@PostConstruct
に関する問題が発生しています。このコードは、spring.batch.job.enabled=false
にapplication.propertiesを設定し、WebコンテナのSpringバッチを使用して@Postconstructを取得する方法は?
@SpringBootApplication
@EnableBatchProcessing
public class BatchApplication extends SpringBootServletInitializer{
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(BatchApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(BatchApplication.class, args);
}
としてTomcatのサーブレットを開始するには、メインアプリケーションと
@Controller
public class JobLauncherController {
@Autowired
JobLauncher jobLauncher;
@Autowired
Job job;
@RequestMapping("/jobLauncher.html")
public void handle() throws Exception{
jobLauncher.run(job, new JobParameters());
}
のコントローラを持っている問題は、私の仕事は、カスタム・アイテム・リーダーとライターを使用していることです@PostConstruct
を使用して実行する前に初期化します。サーバーの起動時に@PostConstructを実行します。これは、Beanの書き込みを初期化するのに役立ちます。 マイアイテムリーダー/ライターはBatchConfigurationは、私の質問は、私はこのことについて間違った道を進んでいれるか、またはそれを作るための方法がある
@Bean public IteamReader<Acct> CustomReader(){ return new CustomReader();}
としてほとんどの例のようにすべてを呼び出し、この
public class CustomReader extends ItemStreamSupport implements ItemReader<Acct>, ResourceAwareItemReaderItemStream<Acct> {
//basic autowiring
private int nextAcctIndex;
private List<Acct> acctsList = new ArrayList();
@PostConstruct
private void initialize() throws IOException {
//logic to parse files
acctsList = Collections.unmodifiableList(acctsList);
nextAcctIndex = 0;
}
@Override
public Acct read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException {
// System.out.println("Start Read");
Acct nextAcct = null;
if (nextAcctIndex < acctsList.size()) {
nextAcct = acctsList.get(nextAcctIndex);
nextAcctIndex++;
//System.out.println(nextAcct);
}
のように見えます@PostConstruct
はコントローラが要求したときにのみ呼び出すことができますか?あなたは
@BeforeStep
public void beforeStep(StepExecution stepExecution) {
init();
}
@PostConstruct
を使用する必要が
この場合、リーダー/ライターはステップまたはジョブスコープにする必要があります。どうやらあなたはシングルトンとしてそれらを作成します。しかし、なぜあなたは '@ PostConstruct'メソッドでそれをやっていますか?そのような必要はありません... –
'@ PostConstruct'で何をしようとしていますか?なぜこれを通常の春の注釈と比較して使用するのですか? –
それはそれでした。私は春に新しく、正確に何を求めようとしていたのか分からなかったが、StepExecutionListenerはBeforeStepとAfterStepで完璧だった –