Skip to content

Commit 4ea9b9f

Browse files
committed
Inject event publisher into TaskJobLauncherApplicationRunner
1 parent 30ce8f9 commit 4ea9b9f

File tree

2 files changed

+46
-10
lines changed

2 files changed

+46
-10
lines changed

spring-cloud-task-batch/src/main/java/org/springframework/cloud/task/batch/configuration/TaskJobLauncherApplicationRunnerFactoryBean.java

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2020-2022 the original author or authors.
2+
* Copyright 2020-2023 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -26,6 +26,8 @@
2626
import org.springframework.beans.factory.FactoryBean;
2727
import org.springframework.boot.autoconfigure.batch.BatchProperties;
2828
import org.springframework.cloud.task.batch.handler.TaskJobLauncherApplicationRunner;
29+
import org.springframework.context.ApplicationEventPublisher;
30+
import org.springframework.context.ApplicationEventPublisherAware;
2931
import org.springframework.util.Assert;
3032
import org.springframework.util.StringUtils;
3133

@@ -35,23 +37,26 @@
3537
* @author Glenn Renfro
3638
* @since 2.3.0
3739
*/
38-
public class TaskJobLauncherApplicationRunnerFactoryBean implements FactoryBean<TaskJobLauncherApplicationRunner> {
40+
public class TaskJobLauncherApplicationRunnerFactoryBean
41+
implements FactoryBean<TaskJobLauncherApplicationRunner>, ApplicationEventPublisherAware {
3942

40-
private JobLauncher jobLauncher;
43+
private final JobLauncher jobLauncher;
4144

42-
private JobExplorer jobExplorer;
45+
private final JobExplorer jobExplorer;
4346

44-
private List<Job> jobs;
47+
private final List<Job> jobs;
4548

4649
private String jobName;
4750

48-
private JobRegistry jobRegistry;
51+
private final JobRegistry jobRegistry;
4952

50-
private Integer order = 0;
53+
private Integer order;
5154

52-
private TaskBatchProperties taskBatchProperties;
55+
private final TaskBatchProperties taskBatchProperties;
5356

54-
private JobRepository jobRepository;
57+
private final JobRepository jobRepository;
58+
59+
private ApplicationEventPublisher applicationEventPublisher;
5560

5661
public TaskJobLauncherApplicationRunnerFactoryBean(JobLauncher jobLauncher, JobExplorer jobExplorer, List<Job> jobs,
5762
TaskBatchProperties taskBatchProperties, JobRegistry jobRegistry, JobRepository jobRepository,
@@ -93,6 +98,9 @@ public TaskJobLauncherApplicationRunner getObject() {
9398
if (this.order != null) {
9499
taskJobLauncherApplicationRunner.setOrder(this.order);
95100
}
101+
if (this.applicationEventPublisher != null) {
102+
taskJobLauncherApplicationRunner.setApplicationEventPublisher(this.applicationEventPublisher);
103+
}
96104
return taskJobLauncherApplicationRunner;
97105
}
98106

@@ -101,4 +109,9 @@ public Class<?> getObjectType() {
101109
return TaskJobLauncherApplicationRunner.class;
102110
}
103111

112+
@Override
113+
public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
114+
this.applicationEventPublisher = applicationEventPublisher;
115+
}
116+
104117
}

spring-cloud-task-batch/src/test/java/org/springframework/cloud/task/batch/handler/TaskJobLauncherApplicationRunnerTests.java

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
4040
import org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration;
4141
import org.springframework.boot.autoconfigure.batch.BatchProperties;
42+
import org.springframework.boot.autoconfigure.batch.JobExecutionEvent;
4243
import org.springframework.boot.autoconfigure.batch.JobLauncherApplicationRunner;
4344
import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration;
4445
import org.springframework.boot.autoconfigure.jdbc.EmbeddedDataSourceConfiguration;
@@ -52,12 +53,14 @@
5253
import org.springframework.cloud.task.configuration.SingleTaskConfiguration;
5354
import org.springframework.cloud.task.repository.TaskExecution;
5455
import org.springframework.cloud.task.repository.TaskExplorer;
56+
import org.springframework.context.ApplicationListener;
5557
import org.springframework.context.ConfigurableApplicationContext;
5658
import org.springframework.context.annotation.Bean;
5759
import org.springframework.context.annotation.Configuration;
5860
import org.springframework.context.annotation.Import;
5961
import org.springframework.data.domain.Page;
6062
import org.springframework.data.domain.PageRequest;
63+
import org.springframework.stereotype.Component;
6164
import org.springframework.transaction.PlatformTransactionManager;
6265

6366
import static org.assertj.core.api.Assertions.assertThat;
@@ -159,6 +162,9 @@ private void validateContext() {
159162

160163
assertThat(jobExecutionIds.size()).isEqualTo(1);
161164
assertThat(taskExplorer.getTaskExecution(jobExecutionIds.iterator().next()).getExecutionId()).isEqualTo(1);
165+
166+
JobExecutionEventListener listener = this.applicationContext.getBean(JobExecutionEventListener.class);
167+
assertThat(listener.getEventCounter()).isEqualTo(1);
162168
}
163169

164170
private void validateForFail(String errorMessage, Class<?> clazz, String[] enabledArgs) {
@@ -169,8 +175,24 @@ private void validateForFail(String errorMessage, Class<?> clazz, String[] enabl
169175
.withMessage(errorMessage);
170176
}
171177

178+
@Component
179+
private static class JobExecutionEventListener implements ApplicationListener<JobExecutionEvent> {
180+
181+
private int eventCounter = 0;
182+
183+
@Override
184+
public void onApplicationEvent(JobExecutionEvent event) {
185+
eventCounter++;
186+
}
187+
188+
public int getEventCounter() {
189+
return eventCounter;
190+
}
191+
192+
}
193+
172194
@TaskBatchTest
173-
@Import(EmbeddedDataSourceConfiguration.class)
195+
@Import({ EmbeddedDataSourceConfiguration.class, JobExecutionEventListener.class })
174196
@EnableTask
175197
public static class JobConfiguration {
176198

@@ -191,6 +213,7 @@ public PlatformTransactionManager transactionManager() {
191213
}
192214

193215
@Configuration(proxyBeanMethods = false)
216+
@Import(JobExecutionEventListener.class)
194217
public static class TransactionManagerTestConfiguration {
195218

196219
@Bean

0 commit comments

Comments
 (0)