쿼츠실행시 오류질문이요..
- 작성자 :
- 박*혁
- 작성일 :
- 2013-08-22 14:36:11
- 조회수 :
- 3,385
- 구분 :
- 실행환경
- 진행상태 :
- 완료
Q
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean" autowire="no">
<property name="triggers">
<list>
<ref bean="UserTrigger" />
</list>
</property>
<property name="quartzProperties">
<props>
<prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>
<prop key="org.quartz.threadPool.threadCount">5</prop>
<prop key="org.quartz.threadPool.threadPriority">4</prop>
<prop key="org.quartz.jobStore.class">org.quartz.simpl.RAMJobStore</prop>
<prop key="org.quartz.jobStore.misfireThreshold">60000</prop>
</props>
</property>
</bean>
<bean id="UserTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="UserJob" />
<property name="cronExpression" value="0/10 * * * * ?" />
</bean>
<bean id="UserJob" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="egovframework.dctoday.admin.controller.QuartzController" />
</bean>
다음과같이 10초마다 돌수있게 설정해놓고
@Controller
public class QuartzController extends QuartzJobBean {
@Autowired
private EventQuartzService eventQuartzService;
@Override
protected void executeInternal(JobExecutionContext context)
throws JobExecutionException {
// TODO Auto-generated method stub
int a = new Date().getSeconds();
System.out.println(a);
try{
eventQuartzService.eventUpdate();
}catch(Exception e){
e.printStackTrace();
}
System.out.println("1");
}
}
다음과같이 컨트롤러에서 사용할수있게만들어놨습니다..
일반적으로 service serviceimpl을통해 아이바티스로 들어갈수있는
eventQuartzService.eventUpdate();
이 부분에서
java.lang.NullPointerException
at egovframework.dctoday.admin.controller.QuartzController.executeInternal(QuartzController.java:26)
at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:86)
at org.quartz.core.JobRunShell.run(JobRunShell.java:216)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:549)
자꾸 널포인트가떨어지는데 널포인트가 떨어지는 이유를 도무지 모르겠네요...
질문이좀 허접하긴한것같지만 남겨봅니다..
<property name="triggers">
<list>
<ref bean="UserTrigger" />
</list>
</property>
<property name="quartzProperties">
<props>
<prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>
<prop key="org.quartz.threadPool.threadCount">5</prop>
<prop key="org.quartz.threadPool.threadPriority">4</prop>
<prop key="org.quartz.jobStore.class">org.quartz.simpl.RAMJobStore</prop>
<prop key="org.quartz.jobStore.misfireThreshold">60000</prop>
</props>
</property>
</bean>
<bean id="UserTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="UserJob" />
<property name="cronExpression" value="0/10 * * * * ?" />
</bean>
<bean id="UserJob" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="egovframework.dctoday.admin.controller.QuartzController" />
</bean>
다음과같이 10초마다 돌수있게 설정해놓고
@Controller
public class QuartzController extends QuartzJobBean {
@Autowired
private EventQuartzService eventQuartzService;
@Override
protected void executeInternal(JobExecutionContext context)
throws JobExecutionException {
// TODO Auto-generated method stub
int a = new Date().getSeconds();
System.out.println(a);
try{
eventQuartzService.eventUpdate();
}catch(Exception e){
e.printStackTrace();
}
System.out.println("1");
}
}
다음과같이 컨트롤러에서 사용할수있게만들어놨습니다..
일반적으로 service serviceimpl을통해 아이바티스로 들어갈수있는
eventQuartzService.eventUpdate();
이 부분에서
java.lang.NullPointerException
at egovframework.dctoday.admin.controller.QuartzController.executeInternal(QuartzController.java:26)
at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:86)
at org.quartz.core.JobRunShell.run(JobRunShell.java:216)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:549)
자꾸 널포인트가떨어지는데 널포인트가 떨어지는 이유를 도무지 모르겠네요...
질문이좀 허접하긴한것같지만 남겨봅니다..
A
안녕하세요. 박준혁님.
JobDetailBean을 통해 지정하신 jobClass의 경우는 일반적은 클래스로 동작하기 때문에 Spring의 DI(Dependency Injection)과 같은 기능을 사용하실 수 없습니다. 즉, @Autowired가 역할을 하지 못하기 때문에 대상 eventQuartzService가 null이기 때문에 NullPointerException가 발생합니다.
이 경우는 JobDetailBean가 아닌 MethodInvokingJobDetailFactoryBean를 다음과 같이 활용하셔야 합니다. (이 경우는 QuartzJobBean를 extends 하실 필요가 없기 때문에 Quartz에 대한 의존도도 낮추실 수 있습니다.)
<bean id="eventService"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="eventQuartzService" />
<property name="targetMethod" value="eventUpdate" />
<property name="concurrent" value="false" />
</bean>
보다 자세한 내용은 다음 가이드의 "MethodInvokingJobDetailFactoryBean" 부분을 참조하시면 되실 것 같습니다.
http://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte2:fdl:scheduling
그럼, 즐거운 하루되십시오.
감사합니다.
JobDetailBean을 통해 지정하신 jobClass의 경우는 일반적은 클래스로 동작하기 때문에 Spring의 DI(Dependency Injection)과 같은 기능을 사용하실 수 없습니다. 즉, @Autowired가 역할을 하지 못하기 때문에 대상 eventQuartzService가 null이기 때문에 NullPointerException가 발생합니다.
이 경우는 JobDetailBean가 아닌 MethodInvokingJobDetailFactoryBean를 다음과 같이 활용하셔야 합니다. (이 경우는 QuartzJobBean를 extends 하실 필요가 없기 때문에 Quartz에 대한 의존도도 낮추실 수 있습니다.)
<bean id="eventService"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="eventQuartzService" />
<property name="targetMethod" value="eventUpdate" />
<property name="concurrent" value="false" />
</bean>
보다 자세한 내용은 다음 가이드의 "MethodInvokingJobDetailFactoryBean" 부분을 참조하시면 되실 것 같습니다.
http://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte2:fdl:scheduling
그럼, 즐거운 하루되십시오.
감사합니다.