Skip to content

Commit c319ed6

Browse files
committed
Fix null handling and re-enable tests after Batch migration
Add null check for properties in TaskJobLauncherApplicationRunner to handle cases where StringUtils.splitArrayElementsIntoProperties returns null instead of an empty Properties object. This prevents potential NullPointerException when running jobs without command line arguments. Re-enable previously disabled tests that are now compatible with Spring Batch 6.x infrastructure package changes. These tests were temporarily disabled during the migration and have been verified to work correctly with the new API. Disable incrementExistingExecution test as Spring Batch 7.x currently does not allow incrementers to set the `identifying` flag to true. This test will remain disabled until the upstream framework supports this functionality. Update test configurations to properly initialize `JobRegistry` beans and adjust imports to align with Spring Batch 7.x autoconfiguration requirements.
1 parent 4717e7c commit c319ed6

File tree

3 files changed

+39
-10
lines changed

3 files changed

+39
-10
lines changed

spring-cloud-task-batch/src/main/java/org/springframework/cloud/task/batch/handler/TaskJobLauncherApplicationRunner.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import java.util.HashSet;
2424
import java.util.List;
2525
import java.util.Map;
26+
import java.util.Properties;
2627
import java.util.Set;
2728

2829
import org.apache.commons.logging.Log;
@@ -107,7 +108,11 @@ public void setApplicationEventPublisher(ApplicationEventPublisher publisher) {
107108
@Override
108109
public void run(String... args) throws JobExecutionException {
109110
logger.info("Running default command line with: " + Arrays.asList(args));
110-
launchJobFromProperties(StringUtils.splitArrayElementsIntoProperties(args, "="));
111+
Properties properties = StringUtils.splitArrayElementsIntoProperties(args, "=");
112+
if (properties == null) {
113+
properties = new Properties();
114+
}
115+
launchJobFromProperties(properties);
111116
monitorJobExecutions();
112117
}
113118

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
import javax.sql.DataSource;
2323

24+
import org.junit.jupiter.api.Disabled;
2425
import org.junit.jupiter.api.Test;
2526

2627
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
@@ -77,6 +78,19 @@ void basicExecution() {
7778
});
7879
}
7980

81+
@Disabled("Disabled until Spring Batch allows a incrementer to set identifyable to true.")
82+
@Test
83+
void incrementExistingExecution() {
84+
this.contextRunner.run((context) -> {
85+
JobLauncherApplicationRunnerContext jobLauncherContext = new JobLauncherApplicationRunnerContext(context);
86+
Job job = jobLauncherContext.configureJob().incrementer(new RunIdIncrementer()).build();
87+
88+
jobLauncherContext.runner.execute(job, new JobParameters());
89+
jobLauncherContext.runner.execute(job, new JobParameters());
90+
assertThat(jobLauncherContext.jobInstances()).hasSize(2);
91+
});
92+
}
93+
8094
@Test
8195
void runDifferentInstances() {
8296
this.contextRunner.run((context) -> {

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

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,10 @@
2626
import org.junit.jupiter.api.Test;
2727
import org.junit.jupiter.api.function.Executable;
2828

29+
import org.springframework.batch.core.configuration.JobRegistry;
2930
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
3031
import org.springframework.batch.core.configuration.annotation.EnableJdbcJobRepository;
32+
import org.springframework.batch.core.configuration.support.MapJobRegistry;
3133
import org.springframework.batch.core.job.Job;
3234
import org.springframework.batch.core.job.builder.JobBuilder;
3335
import org.springframework.batch.core.repository.JobRepository;
@@ -37,6 +39,7 @@
3739
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
3840
import org.springframework.beans.factory.annotation.Autowired;
3941
import org.springframework.boot.SpringApplication;
42+
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
4043
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
4144
import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration;
4245
import org.springframework.boot.batch.autoconfigure.BatchAutoConfiguration;
@@ -83,7 +86,6 @@ public void tearDown() {
8386
}
8487
}
8588

86-
@Disabled
8789
@Test
8890
public void testTaskJobLauncherCLRSuccessFail() {
8991
String[] enabledArgs = new String[] { "--spring.cloud.task.batch.failOnJobFailure=true" };
@@ -103,7 +105,6 @@ public void testTaskJobLauncherCLRSuccessFailWithAnnotation() {
103105
TaskJobLauncherApplicationRunnerTests.JobWithFailureAnnotatedConfiguration.class, enabledArgs);
104106
}
105107

106-
@Disabled
107108
@Test
108109
public void testTaskJobLauncherCLRSuccessFailWithTaskExecutor() {
109110
String[] enabledArgs = new String[] { "--spring.cloud.task.batch.failOnJobFailure=true",
@@ -112,7 +113,6 @@ public void testTaskJobLauncherCLRSuccessFailWithTaskExecutor() {
112113
TaskJobLauncherApplicationRunnerTests.JobWithFailureTaskExecutorConfiguration.class, enabledArgs);
113114
}
114115

115-
@Disabled
116116
@Test
117117
public void testNoTaskJobLauncher() {
118118
String[] enabledArgs = new String[] { "--spring.cloud.task.batch.failOnJobFailure=true",
@@ -123,7 +123,6 @@ public void testNoTaskJobLauncher() {
123123
assertThat(jobRepository.getJobNames().size()).isEqualTo(0);
124124
}
125125

126-
@Disabled
127126
@Test
128127
public void testTaskJobLauncherPickOneJob() {
129128
String[] enabledArgs = new String[] { "--spring.cloud.task.batch.fail-on-job-failure=true",
@@ -141,7 +140,6 @@ public void testTaskJobLauncherPickOneJob() {
141140
validateContext();
142141
}
143142

144-
@Disabled
145143
@Test
146144
public void testApplicationRunnerSetToFalse() {
147145
String[] enabledArgs = new String[] {};
@@ -198,8 +196,10 @@ public int getEventCounter() {
198196
}
199197

200198
@EnableTask
201-
@Import({ EmbeddedDataSourceConfiguration.class, JobExecutionEventListener.class })
202-
@ImportAutoConfiguration({ SimpleTaskAutoConfiguration.class, PropertyPlaceholderAutoConfiguration.class })
199+
@Import({ JobExecutionEventListener.class })
200+
@EnableAutoConfiguration(exclude = TaskJobLauncherAutoConfiguration.class)
201+
@EnableBatchProcessing
202+
@Configuration
203203
public static class JobConfiguration {
204204

205205
@Bean
@@ -212,6 +212,11 @@ public Job job(JobRepository jobRepository, PlatformTransactionManager transacti
212212
.build();
213213
}
214214

215+
@Bean
216+
public JobRegistry jobRegistry() {
217+
return new MapJobRegistry();
218+
}
219+
215220
@Bean
216221
public PlatformTransactionManager transactionManager() {
217222
return new ResourcelessTransactionManager();
@@ -233,6 +238,11 @@ public BatchProperties batchProperties() {
233238
return new BatchProperties();
234239
}
235240

241+
@Bean
242+
public JobRegistry jobRegistry() {
243+
return new MapJobRegistry();
244+
}
245+
236246
@Bean
237247
DataSourceScriptDatabaseInitializer batchDataSourceInitializer(DataSource dataSource) {
238248
DatabaseInitializationSettings settings = new DatabaseInitializationSettings();
@@ -246,8 +256,8 @@ DataSourceScriptDatabaseInitializer batchDataSourceInitializer(DataSource dataSo
246256
@EnableJdbcJobRepository
247257
@ImportAutoConfiguration({ PropertyPlaceholderAutoConfiguration.class, BatchAutoConfiguration.class,
248258
TaskBatchAutoConfiguration.class, TaskJobLauncherAutoConfiguration.class, SingleTaskConfiguration.class,
249-
SimpleTaskAutoConfiguration.class, TransactionManagerTestConfiguration.class })
250-
@Import(EmbeddedDataSourceConfiguration.class)
259+
SimpleTaskAutoConfiguration.class, SimpleTaskAutoConfiguration.class })
260+
@Import({ EmbeddedDataSourceConfiguration.class, TransactionManagerTestConfiguration.class })
251261
@EnableTask
252262
public static class JobWithFailureConfiguration {
253263

0 commit comments

Comments
 (0)