java 17 필요
주요 의존성 변경
데이터베이스 스키마 업데이트
BATCH_JOB_EXECUTION#JOB_CONFIGURATION_LOCATION 컬럼 삭제
더이상 사용되지 않아서 필요가 없어짐
일부 컬럼 삭제 및 추가
CREATE TABLE BATCH_JOB_EXECUTION_PARAMS (
JOB_EXECUTION_ID BIGINT NOT NULL ,
---TYPE_CD VARCHAR(6) NOT NULL ,
---KEY_NAME VARCHAR(100) NOT NULL ,
---STRING_VAL VARCHAR(250) ,
---DATE_VAL DATETIME(6) DEFAULT NULL ,
---LONG_VAL BIGINT ,
---DOUBLE_VAL DOUBLE PRECISION ,
+++PARAMETER_NAME VARCHAR(100) NOT NULL ,
+++PARAMETER_TYPE VARCHAR(100) NOT NULL ,
+++PARAMETER_VALUE VARCHAR(2500) ,
IDENTIFYING CHAR(1) NOT NULL ,
constraint JOB_EXEC_PARAMS_FK foreign key (JOB_EXECUTION_ID)
references BATCH_JOB_EXECUTION(JOB_EXECUTION_ID)
@EnableBatchProcessing 변경점
Map - based Job Repository랑 explorer가 완전히 삭제 되었음
따라서 @EnableBatchProcessing 어노테이션이 JDBC 기반 JobRepository를 설정함
DataSource랑 PlatformTransactionManager 빈을 어플리케이션 컨텍스트에서 찾음
필요할 경우 @EnableBatchProcessing 어노테이션이나 DefaultBatchConfiguration#getTransactionManager()를 오버라이딩 해서 사용자 지정 TransactionManager를 재지정할수있다.
새로운 annotaion 속성 추가
@Configuration
@EnableBatchProcessing(dataSourceRef = "batchDataSource", transactionManagerRef = "batchTransactionManager")
public class MyJobConfiguration {
@Bean
public Job job(JobRepository jobRepository) {
return new JobBuilder("myJob", jobRepository)
//define job flow as needed
.build();
}
}
```java
// Sample with v4
@Configuration
@EnableBatchProcessing
public class MyStepConfig {
@Autowired
private StepBuilderFactory stepBuilderFactory;
@Bean
public Step myStep() {
return this.stepBuilderFactory.get("myStep")
.tasklet(..) // or .chunk()
.build();
}
}
```
```java
// Sample with v5
@Configuration
@EnableBatchProcessing
public class MyStepConfig {
@Bean
public Tasklet myTasklet() {
return new MyTasklet();
}
@Bean
public Step myStep(JobRepository jobRepository, Tasklet myTasklet, PlatformTransactionManager transactionManager) {
return new StepBuilder("myStep", jobRepository)
.tasklet(myTasklet, transactionManager) // or .chunk(chunkSize, transactionManager)
.build();
}
}
```
chunk를 사용할때 TransactionManager를 명시적으로 지정해야 한다.
JobBuilderFactory랑 StepBuilderFactory Deprecated
// Sample with v5
@Configuration
@EnableBatchProcessing
public class MyJobConfig {
@Bean
public Job myJob(JobRepository jobRepository, Step step) {
return new JobBuilder("myJob", jobRepository)
.start(step)
.build();
}
}
jobRepository를 명시적으로 선언해야함
기존의 BuilderFactory가 아닌 Builder를 사용해야 하며 , Job이나 Step을 생성할때 JobRepository를 명시해야 한다.
@EnableBatchProcessing 어노테이션 대신 DefaultBatchCOnfiguration 클래스를 직접 사용할 수 있다.
getDataSource, getTransactionManager, getCharset등의 메소드를 오버라이딩 해서 새로운 값을 지정해서 사용 할 수 있다.
@Configuration
class MyJobConfiguration extends DefaultBatchConfiguration {
@Bean
public Job job(JobRepository jobRepository) {
return new JobBuilder("job", jobRepository)
// define job flow as needed
.build();
}
@Override
protected Charset getCharset() {
return StandardCharsets.ISO_8859_1;
}
}
모든 타입을 매개 변수로 사용할수 있게 지원
기존의 String ,long double ,date에서 변경
파라미터 표기법이 변경 되었다.
parameterName=parameterValue,parameterType,identificationFlag 형식으로 변경
parameterName='{"value": "parameterValue", "type":"parameterType", "identifying": "booleanValue"}'
json 형식으로도 가능하다
---public class JobParameter implements Serializable {
+++public class JobParameter<T> implements Serializable {
--- private Object parameter;
+++ private T value;
--- private ParameterType parameterType;
+++ private Class<T> type;
}