Changes in Spring Batch 5.0
Here's a summary of the changes in Spring Batch 5.0.
What's new?
@EnableBatchProcessing
is no longer recommended
@AutoConfiguration(after = { HibernateJpaAutoConfiguration.class, TransactionAutoConfiguration.class })
@ConditionalOnClass({ JobLauncher.class, DataSource.class, DatabasePopulator.class })
@ConditionalOnBean({ DataSource.class, PlatformTransactionManager.class })
@ConditionalOnMissingBean(value = DefaultBatchConfiguration.class, annotation = EnableBatchProcessing.class) // 5.0 부터 추가되었습니다.
@EnableConfigurationProperties(BatchProperties.class)
@Import(DatabaseInitializationDependencyConfigurer.class)
public class BatchAutoConfiguration {
// ...
}
In the past, you could activate Spring Batch's Spring Boot auto-configuration using the @EnableBatchProcessing
annotation. However, now you need to remove it to use Spring Boot's auto-configuration.
Specifying @EnableBatchProcessing
or inheriting from DefaultBatchConfiguration
now pushes back Spring Boot's
auto-configuration and is used for customizing application settings.
Therefore, using @EnableBatchProcessing
or DefaultBatchConfiguration
will cause default settings
like spring.batch.jdbc.initialize-schema
not to work. Additionally, Jobs won't run automatically when Boot is started,
so an implementation of a Runner is required.
Multiple Job Execution is no longer supported
Previously, if there were multiple Jobs in a batch, you could execute them all at once. However, now Boot will execute a
Job when it detects a single one. If there are multiple Jobs in the context, you need to specify the Job to be executed
using spring.batch.job.name
when starting Boot.
Expanded JobParameter support
In Spring Batch v4, Job parameters could only be of types Long
, String
, Date
, and Double
. In v5, you can now
implement converters to use any type as a JobParameter. However, the default conversion service in Spring Batch still
does not support LocalDate
and LocalDateTime
, causing exceptions. Although you can resolve this by implementing a
converter for the default conversion service, it is problematic that even though JobParametersBuilder
provides related
methods, the conversion does not actually occur and throws an exception.
An issue has been opened regarding this, and it is
expected to be fixed in 5.0.1
.
JobParameters jobParameters = jobLauncherTestUtils.getUniqueJobParametersBuilder()
.addLocalDate("date", LocalDate.now()) // if you use this method, it will throw an exception even though it is provided.
.toJobParameters();
The issue was resolved in the release of 5.0.1 on 2023-02-23.
initializeSchema
spring:
datasource:
url: jdbc:postgresql://localhost:5432/postgres?currentSchema=mySchema
username: postgres
password: 1234
driver-class-name: org.postgresql.Driver
batch:
jdbc:
initialize-schema: always
table-prefix: mySchema.BATCH_
sql:
init:
mode: always
Specify the currentSchema
option for proper functioning.