一般情况下,quartz的job中使用autowired注解注入的对象为空,这时候我们就要使用spring-quartz提供的AdaptableJobFactory类。
自定义一个类:
第一步:自定义一个类:
public class MyJobFactory extends AdaptableJobFactory {
//这个对象Spring会帮我们自动注入进来,也属于Spring技术范畴.
@Autowired
private AutowireCapableBeanFactory capableBeanFactory;
protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
//调用父类的方法
Object jobInstance = super.createJobInstance(bundle);
//进行注入,这属于Spring的技术,不清楚的可以查看Spring的API.
capableBeanFactory.autowireBean(jobInstance);
return jobInstance;
}
}
第二步:在quartz.xml中修改为
<bean id="quartzJob" class="com.thinkgem.jeesite.modules.schedule.CrmSchedule"></bean><!--普通类-->
<bean id="jobFactory" class="com.thinkgem.jeesite.modules.schedule.MyJobFactory"></bean>
<!-- 定义调用对象和调用对象的方法 -->
<bean id="quartzTask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 调用的类 -->
<property name="targetObject">
<ref bean="quartzJob"/>
</property>
<!-- 调用类中的方法 -->
<property name="targetMethod">
<value>tips</value>
</property>
</bean>
<bean id="startQuertz" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="jobFactory" ref="jobFactory"/>
<property name="triggers">
<list>
<ref bean="jibDoTime"/>
</list>
</property>
<!--必须的设置 QuartzScheduler 延时启动,应用启动完后 QuartzScheduler 再启动 -->
<property name="startupDelay" value="5"/>
</bean>
第三步:
public class CrmSchedule{
@Resource
private WorksheetFlowService worksheetFlowService;
@Resource
private WorksheetStyleTService worksheetStyleTService;
@Resource
private WorksheetService worksheetService;
@Resource
private SystemService systemService;
public void tips() {
//testSevice.sayHi();
String time = new SimpleDateFormat("MMM d,yyyy KK:mm:ss a",Locale.ENGLISH).format(System.currentTimeMillis());
System.out.println("time:"+time);//time:Mar 29,2017 09:25:00 AM
//业务逻辑
}
以上就是我的解决方法