2014-12-22 3 views
0

현재 데이터베이스의 다중 플래그를 검사하고 플래그가 true 인 경우 서비스를 시작하는 여러 개의 Quartz 폴러가 있으며 파일을 읽는 스프링 배치 프로젝트가 하나 있고 업데이트 할 서비스가 있습니다. 그에 따라 정보.스프링 배치 : 작업 전용 서비스

스프링 배치 응용 프로그램을 사용하여 서비스를 5 분 (모든 비즈니스 로직을 처리 할 서비스를 호출하는 정보를 확인하지 않음)으로 만 호출 할 수 있다면 궁금합니다. 그래서 제거 할 수 있습니다. 내 응용 프로그램의 Quartz 작업이 모두 내 작업이 한 곳 (봄 배치 프로젝트)에 있습니까?

그렇다면 서비스를 시작하기 위해 스프링 배치 작업을 설정하기 위해 온라인으로 찾을 수있는 것이 없으므로 올바른 방향으로 나를 가리킬 수 있습니까?

+0

, 당신은 5 분 – Panther

+0

에 대한 스레드 수면과 루프에 대한 몇 가지 schedular 또는 간단한 무한으로 하나, 각 5 분 후 배치를 실행하는 데 필요한 전 5 분마다 트리거 할 수있는 Spring Batch 애플리케이션에 Quartz 작업을 설정할 수있다. 이 질문에 대한 제 질문은이 쿼트 일자리가 개별 서비스를 시작하는 것만 가능하다는 것입니다. 스프링 배치에서 독자, 프로세스 및 작가를 항상 보유해야합니까? –

+0

Quartz job에서 직접 서비스를 호출 할 수 있습니다. 스프링 배치 또는 모든 리더기 작성기가 필요하지 않습니다. – Panther

답변

0

Quartz 작업을 예약하고 스케쥴 클래스의 executeInternal 메소드에서 서비스를 호출 할 수있다. schedular 클래스에서 직접 서비스를 자동 응답 할 수 없으므로 jobDataas Map을 사용하여 서비스를 설정해야합니다.

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> 

    <property name="triggers"> 
     <list> 
      <bean id="cronTriggerCache" 
       class="org.springframework.scheduling.quartz.CronTriggerBean"> 
       <property name="jobDetail" ref="exampleJob" /> 
       <property name="cronExpression" value="your cron expression" /> 
      </bean> 
</list> 
</bean>  
<bean name="exampleJob"  class="org.springframework.scheduling.quartz.JobDetailFactoryBean"> 
<property name="jobClass" value="example.ExampleJob"/> 
<property name="jobDataAsMap"> 
    <map> 
     <entry key="myService" ref="myService"/> 
    </map> 
</property> 
</bean> 

package example; 

public class ExampleJob extends QuartzJobBean { 

private myService myService; 

/** 
* have getter setter for you service 
* 
*/ 


protected void executeInternal(JobExecutionContext ctx) throws JobExecutionException { 
    // do the actual work 
    //call your service method here 
} 

} 내가 스프링 배치가 자동으로에 수 있다고 생각하지 않습니다

관련 문제