์๋ ํฌ์คํ ์์ ์ด์ด์ง ๋ด์ฉ์ ๋๋ค.
[springBoot] spring scheduler simpleBatch (feat. scheduler)
๋ชฉ์ฐจ Batch1 ๐ package com.dev.lsy.springbatchlog.batch; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.batch.core.Job; import org.springframework.batch.core.Step; import org.springframework.batch.co
yaga.tistory.com
์ผ์ ์๊ฐ์ A ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ ๊ฐ๊ณต ํ B ํ ์ด๋ธ์ insertํ๋ ๋ฐฐ์น ์์
JpaBatch1 ๐
package com.test.lsy.springbatchtest2.batch;
import com.test.lsy.springbatchtest2.domain.Dept;
import com.test.lsy.springbatchtest2.domain.Dept2;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.item.ItemProcessor;
import org.springframework.batch.item.database.JpaItemWriter;
import org.springframework.batch.item.database.JpaPagingItemReader;
import org.springframework.batch.item.database.builder.JpaPagingItemReaderBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.persistence.EntityManagerFactory;
@Slf4j
@RequiredArgsConstructor
@Configuration
public class JpaBatch1 {
private final JobBuilderFactory jobBuilderFactory;
private final StepBuilderFactory stepBuilderFactory;
private final EntityManagerFactory entityManagerFactory;
private int chunkSize = 100;
//step์ ํธ์ถํ๋ job ์์ฑ
@Bean
public Job jpaJob() {
return jobBuilderFactory.get("jpaPageJob2")
.start(jpaStep())
.build();
}
//๋ฐฐ์น์ ๋จ์๊ฐ ๋๋ step ์์ฑ
@Bean
public Step jpaStep() {
return stepBuilderFactory.get("jpaStep")
.<Dept, Dept2>chunk(chunkSize)
.reader(jpaReader())
.processor(jpaPageJob2_processor())
.writer(jpaWriter())
.build();
}
//reader
@Bean
public JpaPagingItemReader<Dept> jpaReader() {
return new JpaPagingItemReaderBuilder<Dept>()
.name("jpaReader")
.entityManagerFactory(entityManagerFactory)
.pageSize(chunkSize)
.queryString("SELECT d FROM Dept d order by dept_no asc")
.build();
}
//๊ฐ๊ณต
private ItemProcessor<Dept, Dept2> jpaPageJob2_processor() {
return dept -> {
// ๊ฐ๊ณตํ ๋ฐ์ดํฐ๋ฅผ ์๋ฏธ(์ ๋์ด๋ก "NEW_"๋ฅผ ๋ถ์)
return new Dept2(dept.getDeptNo(), "NEW_" + dept.getDName(), "NEW_" + dept.getLoc());
};
}
//writer
//dept2 ํ
์ด๋ธ์ ์ ์ฅํ๋ ์ญํ
@Bean
public JpaItemWriter<Dept2> jpaWriter() {
JpaItemWriter<Dept2> jpaItemWriter = new JpaItemWriter<>();
jpaItemWriter.setEntityManagerFactory(entityManagerFactory);
return jpaItemWriter;
}
}
Dept ๐
package com.test.lsy.springbatchtest2.domain;
import lombok.*;
import javax.persistence.Entity;
import javax.persistence.Id;
//์ด๊ฑด ์ํฐํฐ
@Getter
@Setter
@ToString
@AllArgsConstructor
@NoArgsConstructor
@Entity
public class Dept {
@Id
Integer deptNo;
String dName;
String loc;
}
DeptRepository ๐ค
package com.test.lsy.springbatchtest2.repository;
import com.test.lsy.springbatchtest2.domain.Dept;
import org.springframework.data.repository.CrudRepository;
public interface DeptRepository extends CrudRepository<Dept, Long> {
}
Scheduler ๐
package com.test.lsy.springbatchtest2.scheduler;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.JobParametersBuilder;
import org.springframework.batch.core.JobParametersInvalidException;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.batch.core.repository.JobExecutionAlreadyRunningException;
import org.springframework.batch.core.repository.JobInstanceAlreadyCompleteException;
import org.springframework.batch.core.repository.JobRestartException;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
@Component
@RequiredArgsConstructor
@EnableScheduling
@Slf4j
public class Scheduler {
private final JobLauncher jobLauncher;
private final Job jpaJob;
//์ค์ผ์ค์ ์ํ๋๋ฐ๋ก ์์
@Scheduled(cron = "0 10 19 * * *")
public void schedule() throws JobInstanceAlreadyCompleteException, JobExecutionAlreadyRunningException, JobParametersInvalidException, JobRestartException {
jobLauncher.run(jpaJob, new JobParametersBuilder()
.addString("date", LocalDateTime.now().toString())
.toJobParameters()
);
}
}
๊ฐ์ธ ์คํฐ๋ ๊ธฐ๋ก์ ๋ฉ๋ชจํ๋ ๊ณต๊ฐ์ด๋ผ ํ๋ฆฐ์ ์ด ์์ ์ ์์ต๋๋ค.
ํ๋ฆฐ ์ ์์ ๊ฒฝ์ฐ ๋๊ธ ๋ถํ๋๋ฆฝ๋๋ค.
๋ค์ ๋ด์ฉ
[springBoot] spring batch scheduler modularization (feat. DB)
๋ชฉ์ฐจ ์๋ ํฌ์คํ ์์ ์ด์ด์ง ๋ด์ฉ์ ๋๋ค. [springBoot] spring batch scheduler jpaRead/Writer (feat. DB) ๋ชฉ์ฐจ ์๋ ํฌ์คํ ์์ ์ด์ด์ง ๋ด์ฉ์ ๋๋ค. [springBoot] spring scheduler simpleBatch (feat. scheduler) ๋ชฉ์ฐจ Batch1 ๐ p
yaga.tistory.com
๋๊ธ