Skip to content

Commit 660c95f

Browse files
committed
Restore backward-compatible default job key format
Signed-off-by: MJY <jmoon0227@gmail.com>
1 parent b24a85e commit 660c95f

File tree

3 files changed

+34
-1
lines changed

3 files changed

+34
-1
lines changed

spring-batch-core/src/main/java/org/springframework/batch/core/job/DefaultJobKeyGenerator.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,15 @@ public String generateKey(JobParameters source) {
5050
for (String key : keys) {
5151
JobParameter<?> jobParameter = source.getParameter(key);
5252
if (jobParameter != null && jobParameter.identifying()) {
53-
stringBuffer.append(jobParameter);
53+
stringBuffer.append(key).append("=").append(asLegacyParameterValue(jobParameter)).append(";");
5454
}
5555
}
5656
return DigestUtils.md5DigestAsHex(stringBuffer.toString().getBytes(StandardCharsets.UTF_8));
5757
}
5858

59+
private static String asLegacyParameterValue(JobParameter<?> jobParameter) {
60+
return "{" + "value=" + jobParameter.value() + ", type=" + jobParameter.type() + ", identifying="
61+
+ jobParameter.identifying() + '}';
62+
}
63+
5964
}

spring-batch-core/src/test/java/org/springframework/batch/core/DefaultJobKeyGeneratorTests.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,15 @@ void testCreateJobKeyOrdering() {
7070
assertEquals(key1, key2);
7171
}
7272

73+
@Test
74+
void testCreateJobKeyBackwardCompatibility() {
75+
JobParameters jobParameters = new JobParametersBuilder().addString("foo", "bar")
76+
.addString("bar", "foo")
77+
.toJobParameters();
78+
String key = jobKeyGenerator.generateKey(jobParameters);
79+
assertEquals("0e2a48a17d785b4ec5f073a849a79c9d", key);
80+
}
81+
7382
@Test
7483
public void testCreateJobKeyForEmptyParameters() {
7584
JobParameters jobParameters1 = new JobParameters();

spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/jdbc/JdbcJobInstanceDaoTests.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
3535
import org.springframework.jdbc.support.incrementer.H2SequenceMaxValueIncrementer;
3636
import org.springframework.test.jdbc.JdbcTestUtils;
37+
import org.springframework.util.DigestUtils;
3738

3839
import static org.junit.jupiter.api.Assertions.*;
3940

@@ -191,4 +192,22 @@ void testCreateDuplicateInstance() {
191192
assertThrows(IllegalStateException.class, () -> jdbcJobInstanceDao.createJobInstance("job", jobParameters));
192193
}
193194

195+
@Test
196+
void testGetExistingLegacyJobInstance() {
197+
JobParameters jobParameters = new JobParametersBuilder().addString("foo", "bar")
198+
.addString("bar", "foo")
199+
.toJobParameters();
200+
String legacySerializedParameters = "bar={value=foo, type=class java.lang.String, identifying=true};"
201+
+ "foo={value=bar, type=class java.lang.String, identifying=true};";
202+
String legacyJobKey = DigestUtils.md5DigestAsHex(legacySerializedParameters.getBytes(StandardCharsets.UTF_8));
203+
204+
jdbcTemplate.update(
205+
"INSERT INTO BATCH_JOB_INSTANCE(JOB_INSTANCE_ID, JOB_NAME, JOB_KEY, VERSION) VALUES (?, ?, ?, ?)", 3L,
206+
"job", legacyJobKey, 0);
207+
208+
JobInstance jobInstance = jdbcJobInstanceDao.getJobInstance("job", jobParameters);
209+
assertNotNull(jobInstance);
210+
assertEquals(3L, jobInstance.getInstanceId());
211+
}
212+
194213
}

0 commit comments

Comments
 (0)