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 c360ac277..6fb8a8005 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 @@ -273,6 +273,7 @@ public class Jackson2ExecutionContextStringSerializer implements ExecutionContex "java.time.LocalDate", "java.time.LocalTime", "java.time.LocalDateTime", + "java.sql.Timestamp", "java.net.URL", "java.util.TreeMap", "java.util.HashMap", diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/Jackson2ExecutionContextStringSerializerTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/Jackson2ExecutionContextStringSerializerTests.java index 06ad612f5..066a91b19 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/Jackson2ExecutionContextStringSerializerTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/Jackson2ExecutionContextStringSerializerTests.java @@ -19,6 +19,8 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; +import java.sql.Timestamp; +import java.time.Instant; import java.util.Arrays; import java.util.HashMap; import java.util.List; @@ -185,4 +187,23 @@ public class Jackson2ExecutionContextStringSerializerTests extends AbstractExecu Assert.assertTrue(List.class.isAssignableFrom(deserializedValue.getClass())); Assert.assertTrue(((List)deserializedValue).containsAll(list)); } + + @Test + public void testSqlTimestampSerialization() throws IOException { + //given + Jackson2ExecutionContextStringSerializer serializer = new Jackson2ExecutionContextStringSerializer(); + Map context = new HashMap<>(1); + Timestamp timestamp = new Timestamp(Instant.now().toEpochMilli()); + context.put("timestamp", timestamp); + + // when + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + serializer.serialize(context, outputStream); + InputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray()); + Map deserializedContext = serializer.deserialize(inputStream); + + // then + Timestamp deserializedTimestamp = (Timestamp) deserializedContext.get("timestamp"); + Assert.assertEquals(timestamp, deserializedTimestamp); + } }