From 4ea9b9fa214f3fc594faf6ed8616a1d3166f1d04 Mon Sep 17 00:00:00 2001 From: Henning Poettker Date: Wed, 8 Feb 2023 22:51:32 +0100 Subject: [PATCH] Inject event publisher into `TaskJobLauncherApplicationRunner` --- ...bLauncherApplicationRunnerFactoryBean.java | 31 +++++++++++++------ ...TaskJobLauncherApplicationRunnerTests.java | 25 ++++++++++++++- 2 files changed, 46 insertions(+), 10 deletions(-) diff --git a/spring-cloud-task-batch/src/main/java/org/springframework/cloud/task/batch/configuration/TaskJobLauncherApplicationRunnerFactoryBean.java b/spring-cloud-task-batch/src/main/java/org/springframework/cloud/task/batch/configuration/TaskJobLauncherApplicationRunnerFactoryBean.java index 50861c83..7d3c20fd 100644 --- a/spring-cloud-task-batch/src/main/java/org/springframework/cloud/task/batch/configuration/TaskJobLauncherApplicationRunnerFactoryBean.java +++ b/spring-cloud-task-batch/src/main/java/org/springframework/cloud/task/batch/configuration/TaskJobLauncherApplicationRunnerFactoryBean.java @@ -1,5 +1,5 @@ /* - * Copyright 2020-2022 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; @@ -35,23 +37,26 @@ import org.springframework.util.StringUtils; * @author Glenn Renfro * @since 2.3.0 */ -public class TaskJobLauncherApplicationRunnerFactoryBean implements FactoryBean { +public class TaskJobLauncherApplicationRunnerFactoryBean + implements FactoryBean, ApplicationEventPublisherAware { - private JobLauncher jobLauncher; + private final JobLauncher jobLauncher; - private JobExplorer jobExplorer; + private final JobExplorer jobExplorer; - private List jobs; + private final List jobs; private String jobName; - 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 jobs, TaskBatchProperties taskBatchProperties, JobRegistry jobRegistry, JobRepository jobRepository, @@ -93,6 +98,9 @@ public class TaskJobLauncherApplicationRunnerFactoryBean implements FactoryBean< if (this.order != null) { taskJobLauncherApplicationRunner.setOrder(this.order); } + if (this.applicationEventPublisher != null) { + taskJobLauncherApplicationRunner.setApplicationEventPublisher(this.applicationEventPublisher); + } return taskJobLauncherApplicationRunner; } @@ -101,4 +109,9 @@ public class TaskJobLauncherApplicationRunnerFactoryBean implements FactoryBean< return TaskJobLauncherApplicationRunner.class; } + @Override + public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) { + this.applicationEventPublisher = applicationEventPublisher; + } + } diff --git a/spring-cloud-task-batch/src/test/java/org/springframework/cloud/task/batch/handler/TaskJobLauncherApplicationRunnerTests.java b/spring-cloud-task-batch/src/test/java/org/springframework/cloud/task/batch/handler/TaskJobLauncherApplicationRunnerTests.java index 15e979bf..297576a9 100644 --- a/spring-cloud-task-batch/src/test/java/org/springframework/cloud/task/batch/handler/TaskJobLauncherApplicationRunnerTests.java +++ b/spring-cloud-task-batch/src/test/java/org/springframework/cloud/task/batch/handler/TaskJobLauncherApplicationRunnerTests.java @@ -39,6 +39,7 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration; import org.springframework.boot.autoconfigure.batch.BatchProperties; +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; @@ -52,12 +53,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.Configuration; import org.springframework.context.annotation.Import; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; +import org.springframework.stereotype.Component; import org.springframework.transaction.PlatformTransactionManager; import static org.assertj.core.api.Assertions.assertThat; @@ -159,6 +162,9 @@ public class TaskJobLauncherApplicationRunnerTests { assertThat(jobExecutionIds.size()).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) { @@ -169,8 +175,24 @@ public class TaskJobLauncherApplicationRunnerTests { .withMessage(errorMessage); } + @Component + private static class JobExecutionEventListener implements ApplicationListener { + + private int eventCounter = 0; + + @Override + public void onApplicationEvent(JobExecutionEvent event) { + eventCounter++; + } + + public int getEventCounter() { + return eventCounter; + } + + } + @TaskBatchTest - @Import(EmbeddedDataSourceConfiguration.class) + @Import({ EmbeddedDataSourceConfiguration.class, JobExecutionEventListener.class }) @EnableTask public static class JobConfiguration { @@ -191,6 +213,7 @@ public class TaskJobLauncherApplicationRunnerTests { } @Configuration(proxyBeanMethods = false) + @Import(JobExecutionEventListener.class) public static class TransactionManagerTestConfiguration { @Bean