Skip to content

Commit 1cd023e

Browse files
committed
Move conversion service configuration to AbstractJdbcBatchMetadataDao
1 parent 0d49dba commit 1cd023e

File tree

2 files changed

+32
-36
lines changed

2 files changed

+32
-36
lines changed

spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/AbstractJdbcBatchMetadataDao.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,10 @@
1818

1919
import java.sql.Types;
2020

21+
import org.springframework.batch.core.converter.*;
2122
import org.springframework.beans.factory.InitializingBean;
23+
import org.springframework.core.convert.support.ConfigurableConversionService;
24+
import org.springframework.core.convert.support.DefaultConversionService;
2225
import org.springframework.jdbc.core.JdbcOperations;
2326
import org.springframework.util.Assert;
2427
import org.springframework.util.StringUtils;
@@ -47,6 +50,8 @@ public abstract class AbstractJdbcBatchMetadataDao implements InitializingBean {
4750

4851
private JdbcOperations jdbcTemplate;
4952

53+
private ConfigurableConversionService conversionService;
54+
5055
protected String getQuery(String base) {
5156
return StringUtils.replace(base, "%PREFIX%", tablePrefix);
5257
}
@@ -80,9 +85,34 @@ public void setClobTypeToUse(int clobTypeToUse) {
8085
this.clobTypeToUse = clobTypeToUse;
8186
}
8287

88+
/**
89+
* Set the conversion service to use to convert job parameters from String literals to
90+
* typed values and vice versa.
91+
*/
92+
public void setConversionService(ConfigurableConversionService conversionService) {
93+
Assert.notNull(conversionService, "conversionService must not be null");
94+
this.conversionService = conversionService;
95+
}
96+
97+
public ConfigurableConversionService getConversionService() {
98+
return conversionService;
99+
}
100+
83101
@Override
84102
public void afterPropertiesSet() throws Exception {
85103
Assert.state(jdbcTemplate != null, "JdbcOperations is required");
104+
if (this.conversionService == null) {
105+
DefaultConversionService conversionService = new DefaultConversionService();
106+
conversionService.addConverter(new DateToStringConverter());
107+
conversionService.addConverter(new StringToDateConverter());
108+
conversionService.addConverter(new LocalDateToStringConverter());
109+
conversionService.addConverter(new StringToLocalDateConverter());
110+
conversionService.addConverter(new LocalTimeToStringConverter());
111+
conversionService.addConverter(new StringToLocalTimeConverter());
112+
conversionService.addConverter(new LocalDateTimeToStringConverter());
113+
conversionService.addConverter(new StringToLocalDateTimeConverter());
114+
this.conversionService = conversionService;
115+
}
86116
}
87117

88118
}

spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/jdbc/JdbcJobExecutionDao.java

Lines changed: 2 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -39,20 +39,10 @@
3939
import org.springframework.batch.core.job.JobInstance;
4040
import org.springframework.batch.core.job.parameters.JobParameter;
4141
import org.springframework.batch.core.job.parameters.JobParameters;
42-
import org.springframework.batch.core.converter.DateToStringConverter;
43-
import org.springframework.batch.core.converter.LocalDateTimeToStringConverter;
44-
import org.springframework.batch.core.converter.LocalDateToStringConverter;
45-
import org.springframework.batch.core.converter.LocalTimeToStringConverter;
46-
import org.springframework.batch.core.converter.StringToDateConverter;
47-
import org.springframework.batch.core.converter.StringToLocalDateConverter;
48-
import org.springframework.batch.core.converter.StringToLocalDateTimeConverter;
49-
import org.springframework.batch.core.converter.StringToLocalTimeConverter;
5042
import org.springframework.batch.core.repository.dao.AbstractJdbcBatchMetadataDao;
5143
import org.springframework.batch.core.repository.dao.JobExecutionDao;
5244
import org.springframework.batch.core.repository.dao.NoSuchObjectException;
5345
import org.springframework.beans.factory.InitializingBean;
54-
import org.springframework.core.convert.support.ConfigurableConversionService;
55-
import org.springframework.core.convert.support.DefaultConversionService;
5646
import org.springframework.dao.EmptyResultDataAccessException;
5747
import org.springframework.dao.OptimisticLockingFailureException;
5848
import org.springframework.jdbc.core.RowCallbackHandler;
@@ -157,23 +147,8 @@ SELECT COUNT(*)
157147

158148
private DataFieldMaxValueIncrementer jobExecutionIncrementer;
159149

160-
private ConfigurableConversionService conversionService;
161-
162150
private final Lock lock = new ReentrantLock();
163151

164-
public JdbcJobExecutionDao() {
165-
DefaultConversionService conversionService = new DefaultConversionService();
166-
conversionService.addConverter(new DateToStringConverter());
167-
conversionService.addConverter(new StringToDateConverter());
168-
conversionService.addConverter(new LocalDateToStringConverter());
169-
conversionService.addConverter(new StringToLocalDateConverter());
170-
conversionService.addConverter(new LocalTimeToStringConverter());
171-
conversionService.addConverter(new StringToLocalTimeConverter());
172-
conversionService.addConverter(new LocalDateTimeToStringConverter());
173-
conversionService.addConverter(new StringToLocalDateTimeConverter());
174-
this.conversionService = conversionService;
175-
}
176-
177152
/**
178153
* Public setter for the exit message length in database. Do not set this if you
179154
* haven't modified the schema.
@@ -192,15 +167,6 @@ public void setJobExecutionIncrementer(DataFieldMaxValueIncrementer jobExecution
192167
this.jobExecutionIncrementer = jobExecutionIncrementer;
193168
}
194169

195-
/**
196-
* Set the conversion service to use to convert job parameters from String literals to
197-
* typed values and vice versa.
198-
*/
199-
public void setConversionService(@NonNull ConfigurableConversionService conversionService) {
200-
Assert.notNull(conversionService, "conversionService must not be null");
201-
this.conversionService = conversionService;
202-
}
203-
204170
@Override
205171
public void afterPropertiesSet() throws Exception {
206172
super.afterPropertiesSet();
@@ -432,7 +398,7 @@ private <T> void insertParameter(PreparedStatement preparedStatement, Long execu
432398

433399
String identifyingFlag = identifying ? "Y" : "N";
434400

435-
String stringValue = this.conversionService.convert(value, String.class);
401+
String stringValue = getConversionService().convert(value, String.class);
436402

437403
preparedStatement.setLong(1, executionId);
438404
preparedStatement.setString(2, key);
@@ -459,7 +425,7 @@ protected JobParameters getJobParameters(Long executionId) {
459425
throw new RuntimeException(e);
460426
}
461427
String stringValue = rs.getString("PARAMETER_VALUE");
462-
Object typedValue = conversionService.convert(stringValue, parameterType);
428+
Object typedValue = getConversionService().convert(stringValue, parameterType);
463429

464430
boolean identifying = rs.getString("IDENTIFYING").equalsIgnoreCase("Y");
465431

0 commit comments

Comments
 (0)