스프링 배치 및 스프링 작업 스케줄러를 사용하여 스케줄링 시간에 관계없이 두 작업을 실행하려고합니다. 두 작업 (태스크 릿)이 서로 다른 시간 간격으로 다른 작업을 수행 중입니다. 공용 클래스 CouponToggleActivationScheduler {스프링 배치에서 두 작업을 동시에 실행하는 방법
012 @EnableScheduling@EnableAsync
: 다음
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
\t xmlns:context="http://www.springframework.org/schema/context"
\t xmlns:batch="http://www.springframework.org/schema/batch" xmlns:task="http://www.springframework.org/schema/batch"
\t xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
\t xsi:schemaLocation="http://www.springframework.org/schema/beans
\t http://www.springframework.org/schema/beans/spring-beans.xsd
\t http://www.springframework.org/schema/batch
\t http://www.springframework.org/schema/batch/spring-batch.xsd
\t ">
\t <context:component-scan
\t \t base-package="com.mythribuswebservice.job,com.mythribuswebservice.job.scheduler" />
\t <bean id="deleteOldOTPS" class="com.mythribuswebservice.job.tasklet.DeleteOldOTPWeekly"></bean>
\t <bean id="couponToggleActivation"
\t \t class="com.mythribuswebservice.job.tasklet.CouponToggleActivation"></bean>
\t <batch:job id="otpJob" job-repository="jobRepository">
\t \t <batch:step id="step1">
\t \t \t <batch:tasklet ref="deleteOldOTPS">
\t \t \t </batch:tasklet>
\t \t </batch:step>
\t </batch:job>
\t <batch:job id="couponToggleActivation" job-repository="jobRepository">
\t \t <batch:step id="couponActivation">
\t \t \t <batch:tasklet ref="couponToggleActivation">
\t \t \t </batch:tasklet>
\t \t </batch:step>
\t </batch:job>
\t <bean id="jobRepository"
\t \t class="org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean">
\t \t <property name="transactionManager" ref="transactionManager" />
\t </bean>
\t <bean id="transactionManager"
\t \t class="org.springframework.batch.support.transaction.ResourcelessTransactionManager" />
\t <bean id="dataSource"
\t \t class="org.springframework.jdbc.datasource.DriverManagerDataSource">
\t \t <property name="driverClassName" value="com.mysql.jdbc.Driver" />
\t \t <property name="url" value="jdbc:mysql://orcl/mythribus" />
\t \t <property name="username" value="root" />
\t \t <property name="password" value="root" />
\t </bean>
\t <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
\t \t <property name="dataSource" ref="dataSource" />
\t </bean>
\t <bean id="jobLauncher"
\t \t class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
\t \t <property name="jobRepository" ref="jobRepository" />
\t </bean>
\t <bean id="oTPJobScheduler" class="com.mythribuswebservice.job.scheduler.OTPJobScheduler">
\t </bean>
\t <bean id="couponToggleActivationScheduler"
\t \t class="com.mythribuswebservice.job.scheduler.CouponToggleActivationScheduler">
\t </bean>
</beans>
가 CouponToggleActivationScheduler 및 OTPJobScheduler의 구현입니다 : 다음
는springConfig.xml 파일입니다 }
public class OTPJobScheduler {
@Autowired
JobLauncher jobLauncher;
@Autowired
Job otpJob;
final JobParametersBuilder jobParametersBuilder=new JobParametersBuilder();
@Scheduled(cron = "*/10 * * * * *")
public void runOTPDeleteJob() {
System.out.println("Ricks...." + new Date()+otpJob.hashCode());
jobParametersBuilder.addString("otpJobScheduler", UUID.randomUUID().toString(),true);
JobExecution execution;
execution = jobLauncher.run(otpJob, jobParametersBuilder.toJobParameters());
System.out.println("Exit Status : " + execution.getStatus());
}
} 3,516,
@Autowired
JobLauncher jobLauncher;
@Autowired
Job couponToggleActivation;
final JobParametersBuilder jobParametersBuilder=new JobParametersBuilder();
@Scheduled(cron = "*/10 * * * * *")
public void runCouponActivationScheduler() {
System.out.println("CouponToggleActivationScheduler" + new Date()+"-"+couponToggleActivation.hashCode());
JobExecution execution;
jobParametersBuilder.addString("couponToggleActivationScheduler", UUID.randomUUID().toString(), true);
execution = jobLauncher.run(couponToggleActivation, jobParametersBuilder.toJobParameters());
System.out.println("Exit Status : " + execution.getStatus());
}
가 각각 작업 할 태스크 릿 있습니다
:
는 공용 클래스 DeleteOldOTPWeekly이 태스크 릿을 {}
구현을 내가 가진Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'couponToggleActivation': Cannot create inner bean '(inner bean)#12e0f78' of type [org.springframework.batch.core.configuration.xml.SimpleFlowFactoryBean] while setting bean property 'flow'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#12e0f78': Cannot create inner bean '(inner bean)#693226' of type [org.springframework.batch.core.job.flow.support.StateTransition] while setting bean property 'stateTransitions' with key [0]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#693226': Cannot create inner bean '(inner bean)#758545' of type [org.springframework.batch.core.job.flow.support.state.StepState] while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#758545': Cannot resolve reference to bean 'couponActivation' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'couponActivation': Cannot resolve reference to bean 'couponToggleActivation' while setting bean property 'tasklet'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'couponToggleActivation': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalArgumentException: JobRepository must be set
\t at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:313)
\t at com.mythribuswebservice.MythribusWebserviceApplication.main(MythribusWebserviceApplication.java:15)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#12e0f78': Cannot create inner bean '(inner bean)#693226' of type [org.springframework.batch.core.job.flow.support.StateTransition] while setting bean property 'stateTransitions' with key [0]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#693226': Cannot create inner bean '(inner bean)#758545' of type [org.springframework.batch.core.job.flow.support.state.StepState] while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#758545': Cannot resolve reference to bean 'couponActivation' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'couponActivation': Cannot resolve reference to bean 'couponToggleActivation' while setting bean property 'tasklet'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'couponToggleActivation': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalArgumentException: JobRepository must be set
\t at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:299)
\t ... 16 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#693226': Cannot create inner bean '(inner bean)#758545' of type [org.springframework.batch.core.job.flow.support.state.StepState] while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#758545': Cannot resolve reference to bean 'couponActivation' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'couponActivation': Cannot resolve reference to bean 'couponToggleActivation' while setting bean property 'tasklet'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'couponToggleActivation': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalArgumentException: JobRepository must be set
\t at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:313)
\t ... 24 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#758545': Cannot resolve reference to bean 'couponActivation' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'couponActivation': Cannot resolve reference to bean 'couponToggleActivation' while setting bean property 'tasklet'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'couponToggleActivation': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalArgumentException: JobRepository must be set
\t
\t ... 32 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'couponActivation': Cannot resolve reference to bean 'couponToggleActivation' while setting bean property 'tasklet'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'couponToggleActivation': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalArgumentException: JobRepository must be set
\t
\t at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:351)
\t ... 40 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'couponToggleActivation': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalArgumentException: JobRepository must be set
\t
\t ... 50 more
Caused by: java.lang.IllegalArgumentException: JobRepository must be set
\t
\t ... 55 more
공용 클래스 CouponToggleActivation는 태스크 릿을 {} 나는 두 번째를 예약 할 때 일이 됐었 작업을 하나의 작업을 실행하고있는 경우
도는 예외를 제공합니다 구현 StackTrace를 제거했습니다.
의견입니다.
아니요. 문제가 없으며 제거하려고했습니다. 성공하지 못했습니다. –