From 8a6c7ac3c532639a026e423cc1c9d512c0fe06b8 Mon Sep 17 00:00:00 2001 From: Mahmoud Ben Hassine Date: Wed, 13 Sep 2023 16:04:44 +0200 Subject: [PATCH] Add utility method to get identifying job parameters --- .../batch/core/JobParameters.java | 15 +++++++++++++++ ...kson2ExecutionContextStringSerializer.java | 3 +++ .../batch/core/JobParametersTests.java | 19 +++++++++++++++++++ 3 files changed, 37 insertions(+) diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/JobParameters.java b/spring-batch-core/src/main/java/org/springframework/batch/core/JobParameters.java index be416811b..36cc3a1d4 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/JobParameters.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/JobParameters.java @@ -329,6 +329,21 @@ public class JobParameters implements Serializable { return Collections.unmodifiableMap(parameters); } + /** + * Get a map of identifying parameters. + * @since 5.1 + * @return an unmodifiable map containing identifying parameters. + */ + public Map> getIdentifyingParameters() { + Map> identifyingParameters = new HashMap<>(); + for (Map.Entry> entry : this.parameters.entrySet()) { + if (entry.getValue().isIdentifying()) { + identifyingParameters.put(entry.getKey(), entry.getValue()); + } + } + return Collections.unmodifiableMap(identifyingParameters); + } + /** * @return {@code true} if the parameters object is empty or {@code false} otherwise. */ diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/Jackson2ExecutionContextStringSerializer.java b/spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/Jackson2ExecutionContextStringSerializer.java index 4c6bad109..0d7472866 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/Jackson2ExecutionContextStringSerializer.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/Jackson2ExecutionContextStringSerializer.java @@ -176,6 +176,9 @@ public class Jackson2ExecutionContextStringSerializer implements ExecutionContex @JsonIgnore abstract boolean isEmpty(); + @JsonIgnore + abstract Map> getIdentifyingParameters(); + } private class JobParameterSerializer extends StdSerializer { diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/JobParametersTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/JobParametersTests.java index b3a4b310d..28c70c761 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/JobParametersTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/JobParametersTests.java @@ -187,6 +187,25 @@ class JobParametersTests { assertEquals(params, SerializationUtils.clone(params)); } + @Test + void testGetIdentifyingParameters() { + // given + Map> parametersMap = new HashMap<>(); + JobParameter jobParameter1 = new JobParameter<>("value1", String.class, true); + JobParameter jobParameter2 = new JobParameter<>("value2", String.class, false); + parametersMap.put("key1", jobParameter1); + parametersMap.put("key2", jobParameter2); + JobParameters parameters = new JobParameters(parametersMap); + + // when + Map> identifyingParameters = parameters.getIdentifyingParameters(); + + // then + assertEquals(1, identifyingParameters.size()); + JobParameter key1 = identifyingParameters.get("key1"); + assertEquals(jobParameter1, key1); + } + @Test void testLongReturnsNullWhenKeyDoesntExit() { assertNull(new JobParameters().getLong("keythatdoesntexist"));