Inject event publisher into TaskJobLauncherApplicationRunner
Polished on cherry-pick
This commit is contained in:
committed by
Glenn Renfro
parent
054d0d6440
commit
b19556c217
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2020-2020 the original author or authors.
|
||||
* Copyright 2020-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -26,6 +26,8 @@ import org.springframework.batch.core.repository.JobRepository;
|
||||
import org.springframework.beans.factory.FactoryBean;
|
||||
import org.springframework.boot.autoconfigure.batch.BatchProperties;
|
||||
import org.springframework.cloud.task.batch.handler.TaskJobLauncherApplicationRunner;
|
||||
import org.springframework.context.ApplicationEventPublisher;
|
||||
import org.springframework.context.ApplicationEventPublisherAware;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
@@ -36,23 +38,24 @@ import org.springframework.util.StringUtils;
|
||||
* @since 2.3.0
|
||||
*/
|
||||
public class TaskJobLauncherApplicationRunnerFactoryBean
|
||||
implements FactoryBean<TaskJobLauncherApplicationRunner> {
|
||||
implements FactoryBean<TaskJobLauncherApplicationRunner>, ApplicationEventPublisherAware {
|
||||
private final JobLauncher jobLauncher;
|
||||
|
||||
private JobLauncher jobLauncher;
|
||||
private final JobExplorer jobExplorer;
|
||||
|
||||
private JobExplorer jobExplorer;
|
||||
|
||||
private List<Job> jobs;
|
||||
private final List<Job> jobs;
|
||||
|
||||
private String jobNames;
|
||||
|
||||
private JobRegistry jobRegistry;
|
||||
private final JobRegistry jobRegistry;
|
||||
|
||||
private Integer order = 0;
|
||||
private Integer order;
|
||||
|
||||
private TaskBatchProperties taskBatchProperties;
|
||||
private final TaskBatchProperties taskBatchProperties;
|
||||
|
||||
private JobRepository jobRepository;
|
||||
private final JobRepository jobRepository;
|
||||
|
||||
private ApplicationEventPublisher applicationEventPublisher;
|
||||
|
||||
public TaskJobLauncherApplicationRunnerFactoryBean(JobLauncher jobLauncher,
|
||||
JobExplorer jobExplorer, List<Job> jobs,
|
||||
@@ -96,6 +99,9 @@ public class TaskJobLauncherApplicationRunnerFactoryBean
|
||||
if (this.order != null) {
|
||||
taskJobLauncherApplicationRunner.setOrder(this.order);
|
||||
}
|
||||
if (this.applicationEventPublisher != null) {
|
||||
taskJobLauncherApplicationRunner.setApplicationEventPublisher(this.applicationEventPublisher);
|
||||
}
|
||||
return taskJobLauncherApplicationRunner;
|
||||
}
|
||||
|
||||
@@ -104,4 +110,9 @@ public class TaskJobLauncherApplicationRunnerFactoryBean
|
||||
return TaskJobLauncherApplicationRunner.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
|
||||
this.applicationEventPublisher = applicationEventPublisher;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -43,6 +43,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.batch.JobExecutionEvent;
|
||||
import org.springframework.boot.autoconfigure.batch.JobLauncherApplicationRunner;
|
||||
import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.jdbc.EmbeddedDataSourceConfiguration;
|
||||
@@ -54,12 +55,14 @@ import org.springframework.cloud.task.configuration.SimpleTaskAutoConfiguration;
|
||||
import org.springframework.cloud.task.configuration.SingleTaskConfiguration;
|
||||
import org.springframework.cloud.task.repository.TaskExecution;
|
||||
import org.springframework.cloud.task.repository.TaskExplorer;
|
||||
import org.springframework.context.ApplicationListener;
|
||||
import org.springframework.context.ConfigurableApplicationContext;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Import;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
import org.springframework.scheduling.concurrent.ConcurrentTaskExecutor;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
|
||||
@@ -174,8 +177,11 @@ public class TaskJobLauncherApplicationRunnerTests {
|
||||
page.iterator().next().getExecutionId());
|
||||
|
||||
assertThat(jobExecutionIds.size()).isEqualTo(1);
|
||||
assertThat(taskExplorer.getTaskExecution(jobExecutionIds.iterator().next())
|
||||
.getExecutionId()).isEqualTo(1);
|
||||
|
||||
assertThat(taskExplorer.getTaskExecution(jobExecutionIds.iterator().next()).getExecutionId()).isEqualTo(1);
|
||||
|
||||
JobExecutionEventListener listener = this.applicationContext.getBean(JobExecutionEventListener.class);
|
||||
assertThat(listener.getEventCounter()).isEqualTo(1);
|
||||
}
|
||||
|
||||
private void validateForFail(String errorMessage, Class clazz, String[] enabledArgs) {
|
||||
@@ -192,9 +198,24 @@ public class TaskJobLauncherApplicationRunnerTests {
|
||||
});
|
||||
}
|
||||
|
||||
@Component
|
||||
private static class JobExecutionEventListener implements ApplicationListener<JobExecutionEvent> {
|
||||
|
||||
private int eventCounter = 0;
|
||||
|
||||
@Override
|
||||
public void onApplicationEvent(JobExecutionEvent event) {
|
||||
eventCounter++;
|
||||
}
|
||||
|
||||
public int getEventCounter() {
|
||||
return eventCounter;
|
||||
}
|
||||
|
||||
}
|
||||
@EnableBatchProcessing
|
||||
@TaskBatchTest
|
||||
@Import(EmbeddedDataSourceConfiguration.class)
|
||||
@Import({ EmbeddedDataSourceConfiguration.class, JobExecutionEventListener.class })
|
||||
@EnableTask
|
||||
public static class JobConfiguration {
|
||||
|
||||
@@ -224,7 +245,7 @@ public class TaskJobLauncherApplicationRunnerTests {
|
||||
BatchAutoConfiguration.class, TaskBatchAutoConfiguration.class,
|
||||
TaskJobLauncherAutoConfiguration.class, SingleTaskConfiguration.class,
|
||||
SimpleTaskAutoConfiguration.class })
|
||||
@Import(EmbeddedDataSourceConfiguration.class)
|
||||
@Import({EmbeddedDataSourceConfiguration.class, JobExecutionEventListener.class})
|
||||
@EnableTask
|
||||
public static class JobWithFailureConfiguration {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user