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
This commit is contained in:
Mahmoud Ben Hassine
2022-10-10 10:39:50 +02:00
parent c65e0f27d4
commit 2b258d1b88
11 changed files with 35 additions and 26 deletions

View File

@@ -50,11 +50,6 @@
<artifactId>spring-jdbc</artifactId>
<version>${spring-framework.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-core</artifactId>
@@ -67,6 +62,12 @@
</dependency>
<!-- optional production dependencies -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>jakarta.annotation</groupId>
<artifactId>jakarta.annotation-api</artifactId>

View File

@@ -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();
}
/**

View File

@@ -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) {

View File

@@ -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

View File

@@ -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;
}

View File

@@ -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();

View File

@@ -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<Map<String, Object>> serializer = (Serializer<Map<String, Object>>) ReflectionTestUtils
.getField(factory, "serializer");
assertTrue(serializer instanceof Jackson2ExecutionContextStringSerializer);
assertTrue(serializer instanceof DefaultExecutionContextSerializer);
}
@Test

View File

@@ -35,5 +35,5 @@
<constructor-arg ref="dataSource" />
</bean>
<bean id="serializer" class="org.springframework.batch.core.repository.dao.Jackson2ExecutionContextStringSerializer"/>
<bean id="serializer" class="org.springframework.batch.core.repository.dao.DefaultExecutionContextSerializer"/>
</beans>

View File

@@ -95,6 +95,12 @@
<version>${gson.version}</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.hibernate.orm</groupId>
<artifactId>hibernate-core</artifactId>

View File

@@ -80,6 +80,12 @@
<version>${spring-integration.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>

View File

@@ -151,6 +151,11 @@
<artifactId>simpleclient_pushgateway</artifactId>
<version>${prometheus_pushgateway.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<!-- test dependencies -->
<dependency>