Quartz 定时器的使用之 XML 配置方式 (二)

来源:互联网 发布:云计算需求调研报告 编辑:程序博客网 时间:2024/06/05 09:28

最近发现一个更好的配置定时器的方法, 废话不多说,开搞:
1. 导入 jar 包,这里使用的 quartz 包是 spring 的所以无需引入其他 jar
2. 在你的配置文件目录下 创建一个 xml 文件
下面就是代码:
定义触发器管理器 我是这么叫

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">    <!-- <property name="startupDelay" value="180"/>  启动服务器后延迟启动定时任务 -->        <property name="triggers">            <list>                <ref bean="trigger1" />                <ref bean="trigger2" />                <ref bean="trigger3" />                <ref bean="trigger4" />            </list>        </property>        <property name="autoStartup" value="true" /><!--这里配置自动启动-->    </bean>

注册 triggerbean

<!-- 绑定 begin -->    <bean id="trigger1" class="org.springframework.scheduling.quartz.CronTriggerBean">        <property name="jobDetail" ref="jobDetail2" />        <property name="cronExpression" value="*/10 * * * * ?" /><!-- 每隔10秒钟触发一次 -->    </bean>

定义具体的 jobDetail

<bean id="sc_timerJobDetail2"        class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">        <property name="targetObject" ref=job1Class" />        <property name="targetMethod" value="execute" />        <property name="concurrent" value="false" />        <!-- 是否允许任务并发执行。当值为false时,表示必须等到前一个线程处理完毕后才再启一个新的线程 --></bean>

定义具体的 Job 类 这个类是咱们自己写的 就是上面的 job1Class
job1ClassProperty 就是这个类的成员属性啦

<bean id="job1Class"        class="xyz.spacexplore.Job1Class">        <property name="job1ClassProperty" ref="job1ClassProperty"></property>    </bean>

===========================================
现在看下各个引用到的 spring 的类,主要看他们的一些成员属性:
SchedulerFactoryBean

private Class<? extends SchedulerFactory> schedulerFactoryClass = StdSchedulerFactory.class;    private String schedulerName;    private Resource configLocation;//也是配置文件位置    private Properties quartzProperties;//quartz的配置文件 这个没用过    private Executor taskExecutor;    private DataSource dataSource;    private DataSource nonTransactionalDataSource;    private Map<String, ?> schedulerContextMap;    private ApplicationContext applicationContext;//上下文对象    private String applicationContextSchedulerContextKey;    private JobFactory jobFactory;    private boolean jobFactorySet = false;    private boolean autoStartup = true;//是否自动启动    private int startupDelay = 0;//设置延迟启动时长    private int phase = Integer.MAX_VALUE;    private boolean exposeSchedulerInRepository = false;    private boolean waitForJobsToCompleteOnShutdown = false;    private Scheduler scheduler;

CronTriggerBean

    private static final Constants constants = new Constants(CronTrigger.class);    private JobDetail jobDetail;//这个就不用说了    private String beanName;//更不用说了    private long startDelay = 0;//也是延迟启动

MethodInvokingJobDetailFactoryBean

    private static Class<?> jobDetailImplClass;//job的具体实现类    private static Method setResultMethod;        private String name;    private String group = Scheduler.DEFAULT_GROUP;    private boolean concurrent = true;    private String targetBeanName;    private String[] jobListenerNames;    private String beanName;    private ClassLoader beanClassLoader = ClassUtils.getDefaultClassLoader();    private BeanFactory beanFactory;    private JobDetail jobDetail;    //静态成员类public static class MethodInvokingJob extends QuartzJobBean
0 0
原创粉丝点击