This commit is contained in:
mindol1004
2024-10-08 16:20:54 +09:00
parent 630d615c8c
commit 698d7db4a2
24 changed files with 480 additions and 215 deletions

View File

@@ -23,8 +23,6 @@ import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.lang.NonNull;
import org.springframework.transaction.PlatformTransactionManager;
import com.spring.infra.batch.BatchJobInfoBeanPostProcessor.BatchJobInfoData;
/**
* 배치 작업을 정의하는 추상 클래스입니다.
* <p>
@@ -35,10 +33,10 @@ import com.spring.infra.batch.BatchJobInfoBeanPostProcessor.BatchJobInfoData;
* @version 1.0
*/
@Configuration
public abstract class AbstractBatchTask implements ApplicationContextAware, InitializingBean {
public abstract class AbstractBatchTask implements AbstractBatch, ApplicationContextAware, InitializingBean {
private final BatchJobInfo batchJobInfo;
private BatchJobInfoBeanPostProcessor batchJobInfoProcessor;
private BatchJobInfoService batchJobInfoService;
private BatchJobInfoData batchJobInfoData;
private ApplicationContext applicationContext;
private JobRepository jobRepository;
@@ -60,28 +58,33 @@ public abstract class AbstractBatchTask implements ApplicationContextAware, Init
@Override
public void setApplicationContext(@NonNull ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
this.batchJobInfoService = applicationContext.getBean(BatchJobInfoService.class);
}
@Override
public void afterPropertiesSet() throws Exception {
this.batchJobInfoProcessor = applicationContext.getBean(BatchJobInfoBeanPostProcessor.class);
initializeBatchJobInfo();
registerJobBean();
}
private void initializeBatchJobInfo() {
@Override
public void initializeBatchJobInfo() {
String beanName = applicationContext.getBeanNamesForType(this.getClass())[0];
this.batchJobInfoData = batchJobInfoProcessor.getBatchJobInfo(beanName);
this.batchJobInfoData = batchJobInfoService.getBatchJobInfo(removeScopedTargetPrefix(beanName));
}
/**
* 배치 작업을 Spring의 Bean으로 등록합니다.
*/
private void registerJobBean() {
@Override
public void registerJobBean() {
var beanFactory = ((ConfigurableApplicationContext) applicationContext).getBeanFactory();
var registry = (BeanDefinitionRegistry) beanFactory;
var beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(Job.class, this::createJob);
registry.registerBeanDefinition(batchJobInfoData.getJobName(), beanDefinitionBuilder.getBeanDefinition());
String jobBeanName = batchJobInfoData.getJobName();
if (!registry.containsBeanDefinition(jobBeanName)) {
var beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(Job.class, this::createJob);
registry.registerBeanDefinition(jobBeanName, beanDefinitionBuilder.getBeanDefinition());
}
}
/**
@@ -110,7 +113,8 @@ public abstract class AbstractBatchTask implements ApplicationContextAware, Init
* @return 생성된 Job 객체
* @throws IllegalStateException STEP이 정의되지 않은 경우 예외 발생
*/
private Job createJob() {
@Override
public Job createJob() {
List<Step> steps = createSteps();
if (steps.isEmpty()) {
throw new IllegalStateException("No steps defined for job: " + batchJobInfoData.getJobName());