What’s New in Spring Batch 4.3
New features
New synchronized ItemStreamWriter
SynchronizedItemStreamReader 와 유사하게, SynchronizedItemStreamWriter 가 도입되었다.
이 writer는 multi-threaded 스텝에서 concurrent 스레드가 서로의 writer에 오버라이드하지 않도록
동기화가 필요할 때 유용하다.
New JpaQueryProvider for named queries
이 릴리즈에서는 JpaPagingItemReader 를 사용할 때 JPA에 명명된 쿼리를 쉽게 설정하도록 JpaNativeQueryProvider 옆에 JpaNamedQueryProvider 를 도입했다.
JpaPagingItemReader<Foo> reader = new JpaPagingItemReaderBuilder<Foo>()
.name("fooReader")
.queryProvider(new JpaNamedQueryProvider("allFoos", Foo.class))
// set other properties on the reader
.build();
New JpaCursorItemReader Implementation
JPA 2.2 에서는 페이징만 지원하지 않고 커서로 결과를 스트리밍하는 기능이 추가되었다. 이번 릴리즈에서 이
기능을 사용하여 JdbcCursorItemReader 및 HibernateCursorItemReader 와 유사한 커서 기반
방식으로 결과를 스트림하는 새로운 JPA item reader를 추가했다.
New JobParametersIncrementer implementation
RunIdIncrementer 와 유사하게, Spring Framework의 DataFieldMaxValueIncrementer 기반으로 하는 JobParametersIncrementer 를 추가했다.
Java records Support
이번 릴리즈부터 chunk-oriented step에서 item으로 Java의 record 사용을 지원한다. 다음 예제와 같이,
새로 추가된 RecordFieldSetMapper 는 flat file에서 Java record에 데이터 맵핑을 지원한다.
@Bean
public FlatFileItemReader<Person> itemReader() {
return new FlatFileItemReaderBuilder<Person>()
.name("personReader")
.resource(new FileSystemResource("persons.csv"))
.delimited()
.names("id", "name")
.fieldSetMapper(new RecordFieldSetMapper<>(Person.class))
.build();
}
위 예제에서 Person 타입은 다음과 같이 정의된 Java record다.
public record Person(int id, String name) { }
FlatFileItemReader 는 새로운 RecordFieldSetMapper 를 사용하여 persons.csv 파일을 Person 타입의 레코드에 맵핑한다.
Performance improvements
Use bulk writes in RepositoryItemWriter
4.2 버전까지는 RepositoryItemWriter 에서 CrudRepository#saveAll 을 사용하기 위해 writer 구현 확장(extend) 혹은 write(List) 오버라이드가 필요했다.
이번 릴리즈에서 RepositoryItemWriter 는 기본 설정으로 CrudRepository#saveAll 을 사용하도록 변경되었다.
Dependency updates
이번 릴리즈에서 종속된 Spring 프로젝트를 다음과 같이 업데이트한다:
-
Spring Framework 5.3
-
Spring Data 2020.0
-
Spring Integration 5.4
-
Spring AMQP 2.3
-
Spring for Apache Kafka 2.6
-
Micrometer 1.5
Deprecations
API Deprecations
이번 릴리즈에서 더이상 사용하지 않는 API는 다음과 같다:
-
org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean -
org.springframework.batch.core.explore.support.MapJobExplorerFactoryBean -
org.springframework.batch.core.repository.dao.MapJobInstanceDao -
org.springframework.batch.core.repository.dao.MapJobExecutionDao -
org.springframework.batch.core.repository.dao.MapStepExecutionDao -
org.springframework.batch.core.repository.dao.MapExecutionContextDao -
org.springframework.batch.item.data.AbstractNeo4jItemReader -
org.springframework.batch.item.file.transform.Alignment -
org.springframework.batch.item.xml.StaxUtils -
org.springframework.batch.core.launch.support.ScheduledJobParametersFactory -
org.springframework.batch.item.file.MultiResourceItemReader#getCurrentResource() -
org.springframework.batch.core.JobExecution#stop()
권장되는 대체제는 각 API의 javadoc에서 찾을 수 있다.
SQLFire support deprecations
SQLFire는 2014년 11월 1일부로 종료(EOL)되었다. 이번 릴리즈에 job repository로 SQLFire 사용 지원을 중단하고 5.0 버전에서 제거할 예정이다.