2017-01-06 2 views
0

스프링 배치 및 스프링 작업 스케줄러를 사용하여 스케줄링 시간에 관계없이 두 작업을 실행하려고합니다. 두 작업 (태스크 릿)이 서로 다른 시간 간격으로 다른 작업을 수행 중입니다. 공용 클래스 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
: 17,451,515,

공용 클래스 CouponToggleActivation는 태스크 릿을 {} 나는 두 번째를 예약 할 때 일이 됐었 작업을 하나의 작업을 실행하고있는 경우

도는 예외를 제공합니다 구현 StackTrace를 제거했습니다.

의견입니다.

답변

0

오류로 인해 couponToggleActivation에 JobRepository가 설정되지 않았습니다.

이는 otpJob 작업을 참조한다고 가정합니다.

+0

아니요. 문제가 없으며 제거하려고했습니다. 성공하지 못했습니다. –

0

감사합니다. 귀하의 노력에 감사드립니다.

오랜 시간 동안 고생하고 나면 couponToggleActivation의 Job 및 Tasklet을 선언 할 때 문제가 있음을 알 수있었습니다. 작업이 나를 위해 일한의 couponToggleActivation 그냥 이름을 변경하는 등

<batch:job id="couponToggleActivation" job-repository="jobRepository"> 
    <batch:step id="couponActivation"> 
     <batch:tasklet ref="couponToggleActivation"> 

     </batch:tasklet> 
    </batch:step> 
</batch:job> 

나는 작업 ID와 태스크 릿 심판을 작성했습니다.

IOC 컨테이너가 작업 ID 및 작업 분류기 구현 자 클래스 ref를 인식하지 못하고 모호성 상태 였기 때문에 문제가 발생했습니다.

나는 그것을 만들었습니다.

<batch:job id="couponToggleActivationJob" job-repository="jobRepository"> 
    <batch:step id="couponActivation"> 
     <batch:tasklet ref="couponToggleActivation"> 

     </batch:tasklet> 
    </batch:step> 
</batch:job> 
관련 문제