简介
QSchedule 使用方式
核心是获取 SchedulerProvider
的实例
基于 Java 代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| SchedulerProvider schedulerProvider = new SchedulerProvider(); schedulerProvider.init();
public class MyJobWorker implements Worker{ public void doWork(Parameter parameter) { } }
schedulerProvider.schedule("你的job名字", new MyJobWorker()));
schedulerProvider.destroy();
|
基于配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:qschedule="http://www.qunar.com/schema/qschedule" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.qunar.com/schema/qschedule http://www.qunar.com/schema/qschedule/qschedule.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <bean id="orderTask" class="com.qunar.hotel.tts.OrderTask"> <property name="orderDAO" ref="orderDAO" /> </bean> <qschedule:config port="被调度的端口号(可选,默认是20070)"/> <qschedule:task id="任务名称" ref="orderTask" method="processOrders"/> </beans>
|
基于注解
1 2 3 4 5 6 7 8 9 10 11 12
| <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:qschedule="http://www.qunar.com/schema/qschedule" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.qunar.com/schema/qschedule http://www.qunar.com/schema/qschedule/qschedule.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<qschedule:config port="20070"/> </beans>
|
在 application.xml 做了上面的配置后, 就可以直接在方法上使用 QSchedule
注解, 方法就可以被注册为
任务
auto-configuration
在 QSS 项目中对 QSchedule 进行了封装, 采用了 @Configuration
机制,进行了默认配置
可以直接在需要注册的任务方法上使用 @QSchdule
注解.
内部实现
与 Spring 框架的集成
SchedulerProvider
类的优化:
- 加入状态概念 NEW INIT START DESTORY
- 将 init 方法上的
@PostConstruct
注解去掉
- 将 destory 方法上的
@PreDestroy
注解去掉
doScheduleResultWorker
中验证当前状态,如果没有进行初始化,则调用 init 方法
任务注册
JobRegistryService
需要将
任务调度
qunar.tc.qschedule.executor.ScheduleMessageDistributor.addListener