ssung_항해일지/항해99_실전 프로젝트

실전 프로젝트 - 25일차

ssungcohol 2023. 4. 4. 23:35

Spring Batch 에러 잡아보기

 

코드 다 지우고 처음부터 다시 시작해보기

Case_1 : jpa 활용 방식?

  • BookEntityManagerFactoryConfiguration 생성
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "BookEntityManagerFactory", basePackages = {"study.godokprac.book.repository"})
class BookEntityManagerFactoryConfiguration {

	@Autowired
	@Qualifier("BookDataSource")
	private DataSource BookDataSource;

	@Primary
	@Bean(name = "BookEntityManagerFactory")
	public LocalContainerEntityManagerFactoryBean BookEntityManagerFactory(EntityManagerFactoryBuilder builder) {
		return builder
			.dataSource(BookDataSource)
			.packages("study.godokprac.book.entity")
			.persistenceUnit("Book")
			.build();
	}
}
  • DataSourceProperties 생성
@Configuration
@EnableConfigurationProperties
public class DataSourceProperties {

	@Primary
	@Bean(name = "BookDataSource")
	@ConfigurationProperties(prefix = "spring.datasource.hikari")
	public DataSource BookDatasource() {
		return DataSourceBuilder.create().type(HikariDataSource.class).build();
	}
}
  • JobConfiguration 생성
@RequiredArgsConstructor
@Configuration
public class InventoryJobConfiguration {

	private final JobBuilderFactory jobBuilderFactory;
	private final StepBuilderFactory stepBuilderFactory;

	@Autowired
	@Qualifier("BookEntityManagerFactory")
	private EntityManagerFactory BookEntityManagerFactory;

	private int chunkSize;
	@Value("${chunkSize:1000}")
	public void setChunkSize(int chunkSize) {
		this.chunkSize = chunkSize;
	}

	@Bean
	public Job inventoryJob() {
		return jobBuilderFactory.get("inventoryJob")
			.start(inventoryStep())
			.build();
	}

	@Bean
	public Step inventoryStep() {
		return stepBuilderFactory.get("inventoryStep")
			.transactionManager(new JpaTransactionManager(BookEntityManagerFactory))
			.<Book, Book>chunk(chunkSize)
			.reader(reader())
			.processor(Processor())
			.writer(Writer())
			.build();
	}

	@Bean
	public ItemReader<Book> reader() {
		return new JpaPagingItemReaderBuilder<Book>()
			.name("reader")
			.entityManagerFactory(BookEntityManagerFactory)
			.pageSize(chunkSize)
			.queryString("SELECT t FROM testbook t WHERE t.inventory = 5")
			.build();
	}

	@Bean
	public ItemProcessor<Book, Book> Processor() {
		return new ItemProcessor<Book, Book>() {
			@Override
			public Book process(Book book) throws Exception {

				book.setInventory(book.getInventory() + 10);

				return book;
			}
		};
	}

	@Bean
	public JpaItemWriter<Book> Writer() {
		JpaItemWriter<Book> writer = new JpaItemWriter<>();
		writer.setEntityManagerFactory(BookEntityManagerFactory);
		writer.setUsePersist(true);
		return writer;
	}

}

5시간? 6시간? 잡고있었음 - 실패 : 에러 잡지 못함...


 

728x90