From 2b258d1b88661c581c6f79294e9c1f96ed69a159 Mon Sep 17 00:00:00 2001 From: Mahmoud Ben Hassine Date: Mon, 10 Oct 2022 10:39:50 +0200 Subject: [PATCH] Change the default execution context serializer to DefaultExecutionContextSerializer This commit changes the default execution context serializer to DefaultExecutionContextSerializer, which makes Jackson an optional dependency. Resolves #4140 --- spring-batch-core/pom.xml | 11 ++++++----- .../support/DefaultBatchConfiguration.java | 6 +++--- .../core/explore/support/JobExplorerFactoryBean.java | 6 +++--- .../core/repository/dao/JdbcExecutionContextDao.java | 2 +- .../repository/support/JobRepositoryFactoryBean.java | 6 +++--- .../repository/dao/JdbcExecutionContextDaoTests.java | 8 -------- .../support/JobRepositoryFactoryBeanTests.java | 3 +-- .../batch/core/repository/dao/sql-dao-test.xml | 2 +- spring-batch-infrastructure/pom.xml | 6 ++++++ spring-batch-integration/pom.xml | 6 ++++++ spring-batch-samples/pom.xml | 5 +++++ 11 files changed, 35 insertions(+), 26 deletions(-) diff --git a/spring-batch-core/pom.xml b/spring-batch-core/pom.xml index f138264af..fd058a235 100644 --- a/spring-batch-core/pom.xml +++ b/spring-batch-core/pom.xml @@ -50,11 +50,6 @@ spring-jdbc ${spring-framework.version} - - com.fasterxml.jackson.core - jackson-databind - ${jackson.version} - io.micrometer micrometer-core @@ -67,6 +62,12 @@ + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + true + jakarta.annotation jakarta.annotation-api diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/support/DefaultBatchConfiguration.java b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/support/DefaultBatchConfiguration.java index eec1e6ee1..cc62922a6 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/support/DefaultBatchConfiguration.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/configuration/support/DefaultBatchConfiguration.java @@ -33,7 +33,7 @@ import org.springframework.batch.core.launch.support.TaskExecutorJobLauncher; import org.springframework.batch.core.repository.ExecutionContextSerializer; import org.springframework.batch.core.repository.JobRepository; import org.springframework.batch.core.repository.dao.AbstractJdbcBatchMetadataDao; -import org.springframework.batch.core.repository.dao.Jackson2ExecutionContextStringSerializer; +import org.springframework.batch.core.repository.dao.DefaultExecutionContextSerializer; import org.springframework.batch.core.repository.dao.JdbcExecutionContextDao; import org.springframework.batch.core.repository.dao.JdbcJobExecutionDao; import org.springframework.batch.core.repository.dao.JdbcStepExecutionDao; @@ -299,11 +299,11 @@ public class DefaultBatchConfiguration implements ApplicationContextAware { /** * A custom implementation of the {@link ExecutionContextSerializer}. The default, if - * not injected, is the {@link Jackson2ExecutionContextStringSerializer}. + * not injected, is the {@link DefaultExecutionContextSerializer}. * @return the serializer to use to serialize/deserialize the execution context */ protected ExecutionContextSerializer getExecutionContextSerializer() { - return new Jackson2ExecutionContextStringSerializer(); + return new DefaultExecutionContextSerializer(); } /** diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/explore/support/JobExplorerFactoryBean.java b/spring-batch-core/src/main/java/org/springframework/batch/core/explore/support/JobExplorerFactoryBean.java index 77df5e56d..fe3c5b9f9 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/explore/support/JobExplorerFactoryBean.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/explore/support/JobExplorerFactoryBean.java @@ -24,8 +24,8 @@ import javax.sql.DataSource; import org.springframework.batch.core.explore.JobExplorer; import org.springframework.batch.core.repository.ExecutionContextSerializer; import org.springframework.batch.core.repository.dao.AbstractJdbcBatchMetadataDao; +import org.springframework.batch.core.repository.dao.DefaultExecutionContextSerializer; import org.springframework.batch.core.repository.dao.ExecutionContextDao; -import org.springframework.batch.core.repository.dao.Jackson2ExecutionContextStringSerializer; import org.springframework.batch.core.repository.dao.JdbcExecutionContextDao; import org.springframework.batch.core.repository.dao.JdbcJobExecutionDao; import org.springframework.batch.core.repository.dao.JdbcJobInstanceDao; @@ -80,7 +80,7 @@ public class JobExplorerFactoryBean extends AbstractJobExplorerFactoryBean imple /** * A custom implementation of {@link ExecutionContextSerializer}. The default, if not - * injected, is the {@link Jackson2ExecutionContextStringSerializer}. + * injected, is the {@link DefaultExecutionContextSerializer}. * @param serializer The serializer used to serialize or deserialize an * {@link org.springframework.batch.item.ExecutionContext}. * @see ExecutionContextSerializer @@ -160,7 +160,7 @@ public class JobExplorerFactoryBean extends AbstractJobExplorerFactoryBean imple } if (serializer == null) { - serializer = new Jackson2ExecutionContextStringSerializer(); + serializer = new DefaultExecutionContextSerializer(); } if (this.conversionService == null) { diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/JdbcExecutionContextDao.java b/spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/JdbcExecutionContextDao.java index 3e858e4b0..65888dd51 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/JdbcExecutionContextDao.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/JdbcExecutionContextDao.java @@ -91,7 +91,7 @@ public class JdbcExecutionContextDao extends AbstractJdbcBatchMetadataDao implem private LobHandler lobHandler = new DefaultLobHandler(); - private ExecutionContextSerializer serializer; + private ExecutionContextSerializer serializer = new DefaultExecutionContextSerializer(); /** * Setter for {@link Serializer} implementation diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/repository/support/JobRepositoryFactoryBean.java b/spring-batch-core/src/main/java/org/springframework/batch/core/repository/support/JobRepositoryFactoryBean.java index 8ef3d3789..9e2545357 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/repository/support/JobRepositoryFactoryBean.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/repository/support/JobRepositoryFactoryBean.java @@ -27,8 +27,8 @@ import org.apache.commons.logging.LogFactory; import org.springframework.batch.core.repository.ExecutionContextSerializer; import org.springframework.batch.core.repository.dao.AbstractJdbcBatchMetadataDao; +import org.springframework.batch.core.repository.dao.DefaultExecutionContextSerializer; import org.springframework.batch.core.repository.dao.ExecutionContextDao; -import org.springframework.batch.core.repository.dao.Jackson2ExecutionContextStringSerializer; import org.springframework.batch.core.repository.dao.JdbcExecutionContextDao; import org.springframework.batch.core.repository.dao.JdbcJobExecutionDao; import org.springframework.batch.core.repository.dao.JdbcJobInstanceDao; @@ -100,7 +100,7 @@ public class JobRepositoryFactoryBean extends AbstractJobRepositoryFactoryBean i /** * A custom implementation of the {@link ExecutionContextSerializer}. The default, if - * not injected, is the {@link Jackson2ExecutionContextStringSerializer}. + * not injected, is the {@link DefaultExecutionContextSerializer}. * @param serializer used to serialize/deserialize * {@link org.springframework.batch.item.ExecutionContext} * @see ExecutionContextSerializer @@ -221,7 +221,7 @@ public class JobRepositoryFactoryBean extends AbstractJobRepositoryFactoryBean i } if (serializer == null) { - Jackson2ExecutionContextStringSerializer defaultSerializer = new Jackson2ExecutionContextStringSerializer(); + DefaultExecutionContextSerializer defaultSerializer = new DefaultExecutionContextSerializer(); serializer = defaultSerializer; } diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/JdbcExecutionContextDaoTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/JdbcExecutionContextDaoTests.java index 52f1929bd..d43b25012 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/JdbcExecutionContextDaoTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/JdbcExecutionContextDaoTests.java @@ -27,14 +27,6 @@ import static org.mockito.Mockito.mock; @SpringJUnitConfig(locations = { "sql-dao-test.xml" }) class JdbcExecutionContextDaoTests extends AbstractExecutionContextDaoTests { - @Test - void testNoSerializer() { - JdbcExecutionContextDao jdbcExecutionContextDao = new JdbcExecutionContextDao(); - jdbcExecutionContextDao.setJdbcTemplate(mock(JdbcOperations.class)); - Exception exception = assertThrows(IllegalStateException.class, jdbcExecutionContextDao::afterPropertiesSet); - assertEquals("ExecutionContextSerializer is required", exception.getMessage()); - } - @Test void testNullSerializer() { JdbcExecutionContextDao jdbcExecutionContextDao = new JdbcExecutionContextDao(); diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/repository/support/JobRepositoryFactoryBeanTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/repository/support/JobRepositoryFactoryBeanTests.java index 5f3477c31..268033750 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/repository/support/JobRepositoryFactoryBeanTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/repository/support/JobRepositoryFactoryBeanTests.java @@ -34,7 +34,6 @@ import org.springframework.batch.core.JobParameters; import org.springframework.batch.core.repository.ExecutionContextSerializer; import org.springframework.batch.core.repository.JobRepository; import org.springframework.batch.core.repository.dao.DefaultExecutionContextSerializer; -import org.springframework.batch.core.repository.dao.Jackson2ExecutionContextStringSerializer; import org.springframework.batch.item.database.support.DataFieldMaxValueIncrementerFactory; import org.springframework.core.serializer.Serializer; import org.springframework.dao.DataAccessException; @@ -172,7 +171,7 @@ class JobRepositoryFactoryBeanTests { factory.afterPropertiesSet(); Serializer> serializer = (Serializer>) ReflectionTestUtils .getField(factory, "serializer"); - assertTrue(serializer instanceof Jackson2ExecutionContextStringSerializer); + assertTrue(serializer instanceof DefaultExecutionContextSerializer); } @Test diff --git a/spring-batch-core/src/test/resources/org/springframework/batch/core/repository/dao/sql-dao-test.xml b/spring-batch-core/src/test/resources/org/springframework/batch/core/repository/dao/sql-dao-test.xml index a86fad53e..dd3ab71cb 100644 --- a/spring-batch-core/src/test/resources/org/springframework/batch/core/repository/dao/sql-dao-test.xml +++ b/spring-batch-core/src/test/resources/org/springframework/batch/core/repository/dao/sql-dao-test.xml @@ -35,5 +35,5 @@ - + diff --git a/spring-batch-infrastructure/pom.xml b/spring-batch-infrastructure/pom.xml index 74b23e473..68b660469 100644 --- a/spring-batch-infrastructure/pom.xml +++ b/spring-batch-infrastructure/pom.xml @@ -95,6 +95,12 @@ ${gson.version} true + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + true + org.hibernate.orm hibernate-core diff --git a/spring-batch-integration/pom.xml b/spring-batch-integration/pom.xml index 13ffe1608..9e17e38f7 100644 --- a/spring-batch-integration/pom.xml +++ b/spring-batch-integration/pom.xml @@ -80,6 +80,12 @@ ${spring-integration.version} test + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + test + org.apache.commons commons-dbcp2 diff --git a/spring-batch-samples/pom.xml b/spring-batch-samples/pom.xml index c6f8f406a..290ad72b0 100644 --- a/spring-batch-samples/pom.xml +++ b/spring-batch-samples/pom.xml @@ -151,6 +151,11 @@ simpleclient_pushgateway ${prometheus_pushgateway.version} + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} +