您的位置:首页 > 编程语言 > Java开发

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

2016-12-07 22:10 295 查看
最近发现一个更好的配置定时器的方法, 废话不多说,开搞:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  quartz spring