方式一,jobDetail的bean利用MethodInvokingJobDetailFactoryBean 工厂包装 : (1)定义一个bean,执行具体的业务操作。 <bean id="updatePersonService" class="com.corop.packname.UpdatePersonService"/> (2)定义一个jobDetail,执行业务操作的作业。 <bean id="updatePersonJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <!-- 作业要执行的业务操作 bean --> <property name="targetObject"> <ref bean="updatePersonService" /> </property> <!-- 业务操作bean里面具体执行业务操作的方法--> <property name="targetMethod"> <value>updatePerson</value> </property> <!-- 作业不并发执行 --> <property name="concurrent"> <value>false</value> </property> </bean> (3)定义一个触发器,根据时间表达式定时触发执行作业 <bean id="updatePersonTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <!-- 要触发执行的作业 bean --> <property name="jobDetail"> <ref bean="updatePersonJob" /> </property> <!-- 触发作业的时间表达式 --> <property name="cronExpression"> <!--"0 59 23 * * ?" 每天晚上23点59触发--> <value>0 57 00 * * ?</value> </property> </bean> (4)定义一个任务调度器 <!--lazy-init=false 容器启动时启动调度器,默认值, singleton='true'这个bean是单独存在的--> <bean id="startQuertz" lazy-init="false" singleton='true' autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <!--触发器列表--> <list> <ref local="updatePersonTrigger"/> </list> </property> <!--自动启动调度器器--> <property name="autoStartup"> <value>true</value> </property> </bean> 方式二,jobDetail采用继承QuartzJobBean的方式: (1)定义的业务操作bean继承QuartzJobBean,重载方法 executeInternal(JobExecutionContext jobexecutioncontext) ,执行具体的业务操作。 class UpdatePersonService extends QuartzJobBean{ private Person person; public void setPerson(Person person){ this.person = person; } @Override public void executeInternal(JobExecutionContext ctx){ throws JobExecutionException //执行具体的业务操作 String param1 = ctx.getJobDetail().getJobDataMap().getString("param1"); } } (2)定义jobDetail的bean : <bean id = 'updatePersonJob' class= 'org.springframework.scheduling.quartz.JobDetailBean'> <!--定义业务操作类--> <property name="jobClass" value = 'com.corop.packname.UpdatePersonService' /> <!--定义执行业务操作需要的参数 --> <property name="jobDataAsMap"> <map> <entry key="timeout" value="0" /> <!-- 此参数是一个bean --> <entry key="person" value-ref = 'personBean' /> <!--可以从作业执行容器获取此参数--> <entry key="param1" value="com.custom.package.ClassName"/> </map> </property> </bean> <bean id = 'personBean' class= 'com.corop.packname.Person'/> (3)定义触发器,及(4)定义核心调度器 与 方式一同。