2012-07-19 6 views
3

나는 Spring의 SchedulerFactoryBean을 사용하여 작업을 동적으로 스케쥴한다.Spring의 Quartz 작업이 시작되지 않았다.

@Component 
public class MyJob extends QuartzJobBean { 

    @Override 
    public void executeInternal(JobExecutionContext context) throws JobExecutionException { 
     System.out.println("Start job..."); 
} 
} 

이 내가 동적으로 작업을 예약하고있어 어디 : 여기

내 일이다

@Configuration 
public class SpringConfigBean { 
    @Bean 
    public DataSource dataSource() throws NamingException{ 
     InitialContext ctx = new InitialContext(); 
     DataSource source = (DataSource) ctx.lookup(dataSourceName); 
     return source; 
    } 

    @Bean 
    public SchedulerFactoryBean schedulerFactoryBean() throws NamingException { 
     SchedulerFactoryBean schedulerFactoryBean = null; 
     try { 
      schedulerFactoryBean = new SchedulerFactoryBean(); 
      schedulerFactoryBean.setDataSource(dataSource()); 
      schedulerFactoryBean.setQuartzProperties(com.orca.integration.plugins.vs.broadpeak.admin.utils.Configuration.getQuartzProperties()); 
      schedulerFactoryBean.setAutoStartup(false); 
     } catch (SchedulingException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return schedulerFactoryBean; 
    } 

} : 여기 내 스프링 구성입니다

@Component 
public class MyManager { 
    @Autowired 
    private SchedulerFactoryBean schedulerFactoryBean; 

    public void myMethod(String text, Calendar startDate) { 
     logger.debug("BroadpeakDistributionManager.startRecordingChannel(); Parameters: recording channel ID=" + recordingChannel.getExternalId()); 

//  StartRecordJob.scheduleMe(text, startDate, "Start"); 

     JobDetailBean jobDetailBean = new JobDetailBean(); 
     jobDetailBean.setJobClass(MyJob.class); 
     jobDetailBean.setName("name"); 
     jobDetailBean.afterPropertiesSet(); 

     SimpleTriggerBean simpleTriggerBean = new SimpleTriggerBean(); 
     simpleTriggerBean.setJobDetail(jobDetailBean); 
     simpleTriggerBean.setName("Name"); 
     simpleTriggerBean.setStartTime(startDate.getTime()); 
     try { 
      simpleTriggerBean.afterPropertiesSet(); 
     } catch (ParseException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     schedulerFactoryBean.setTriggers(new Trigger[] {simpleTriggerBean}); 
     schedulerFactoryBean.start(); 
    } 
} 

작업이 시작되지 않았습니다. 내가 뭘 잘못하고 있니?

+2

MyMethod라는를 실행? – sinuhepop

답변

0

스프링을 사용한 프로그래밍 방식으로 구성한 경험이 없습니다. 그래서 저는 이것을 Quartz와 통합 한이 XML Spring 애플리케이션 컨텍스트 구성을 작성했습니다.

<!-- You can inject other sping beans here --> 
<bean id="myJob" class="your.package.here.MyJob "/> 

<!-- Define your target method --> 
<bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> 
    <property name="targetObject" ref="myJob" /> 
    <property name="targetMethod" value="executeInternal" /> 
</bean> 

<!-- trigger using unix expression --> 
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> 
    <property name="jobDetail" ref="jobDetail" /> 
    <!-- run every morning at 6 AM --> 
    <property name="cronExpression" value="0 0 6 * * ?" /> 
</bean> 
0

당신이 @EnableScheduling 주석 누락되지 않습니다

는보세요? 이 같은

뭔가 :

@Configuration 
@EnableScheduling 
public class SpringConfigBean { 
... 
} 
+0

SchedulerFactoryBean을 직접 사용할 때 @EnableScheduling 주석을 사용할 필요가 없습니다. – cuttcards

관련 문제