定时任务

Elastic-Job的SimpleJob类型作业

Simple类型作业意为简单实现,未经任何封装的类型。需要继承AbstractSimpleElasticJob,该类只提供了一个方法用于覆盖,此方法将被定时执行。用于执行普通的定时任务,与Quartz原生接口相似,只是增加了弹性扩缩容和分片等功能。

引入maven依赖

elastic-job已经发布到中央仓库,可以在pom.xml文件中直接引入maven坐标。

<!-- 当当分布式任务调度 -->
<!-- 引入elastic-job核心模块 -->
<dependency>
  <groupId>com.dangdang</groupId>
  <artifactId>elastic-job-core</artifactId>
  <version>1.1.1</version>
</dependency>
<!-- 使用springframework自定义命名空间时引入 -->
<dependency>
  <groupId>com.dangdang</groupId>
  <artifactId>elastic-job-spring</artifactId>
  <version>1.1.1</version>
</dependency>
SimpleJob
@Component("simpleElasticJob")
public class DemoSimpleElasticJob extends AbstractSimpleElasticJob {

    @Override
    public void process(JobExecutionMultipleShardingContext jobExecutionMultipleShardingContext) {
        // do something by sharding items
    }
}
Spring命名空间配置
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:reg="http://www.dangdang.com/schema/ddframe/reg"
       xmlns:job="http://www.dangdang.com/schema/ddframe/job"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                        http://www.springframework.org/schema/beans/spring-beans.xsd
                        http://www.dangdang.com/schema/ddframe/reg
                        http://www.dangdang.com/schema/ddframe/reg/reg.xsd
                        http://www.dangdang.com/schema/ddframe/job
                        http://www.dangdang.com/schema/ddframe/job/job.xsd
                        ">

    <!--配置作业注册中心-->  
    <!--<reg:zookeeper id="regCenter" server-lists="${JOB_URL}"-->
                   <!--namespace="${namespace}" base-sleep-time-milliseconds="1000"-->
                   <!--max-sleep-time-milliseconds="3000" max-retries="3" />--> 

    <!--配置作业注册中心 -->
    <bean id="zkConfig" class="com.dangdang.ddframe.reg.zookeeper.ZookeeperConfiguration">
        <property name="serverLists" value="${worker.zk.servers.urls}"/>
        <property name="namespace" value="${namespace}"/>
        <property name="baseSleepTimeMilliseconds" value="1000"/>
        <property name="maxSleepTimeMilliseconds" value="3000"/>
        <property name="maxRetries" value="3"/>
    </bean>
    <bean id="regCenter" class="com.dangdang.ddframe.reg.zookeeper.ZookeeperRegistryCenter" init-method="init">
        <constructor-arg ref="zkConfig"/>
    </bean>

    <!-- 每隔三分钟执行一次测试任务 -->
    <job:simple id="simpleElasticJob" class="com.worker.service.worker.DemoSimpleElasticJob" registry-center-ref="regCenter" cron="0 0/3 * * * ?"   sharding-total-count="1" ></job:simple>
</beans>    
reg:bean命名空间属性详细说明
属性名类型是否必填缺省值描述
idString 注册中心在Spring容器中的主键
server-listsString 连接Zookeeper服务器的列表
包括IP地址和端口号
多个地址用逗号分隔
如: host1:2181,host2:2181
namespaceString Zookeeper的命名空间
base-sleep-time-millisecondsint1000等待重试的间隔时间的初始值
单位:毫秒
max-sleep-time-millisecondsint3000等待重试的间隔时间的最大值
单位:毫秒
max-retriesint3最大重试次数
session-timeout-millisecondsint60000会话超时时间
单位:毫秒
connection-timeout-millisecondsint15000连接超时时间
单位:毫秒
digestString无验证连接Zookeeper的权限令牌
缺省为不需要权限验证
nested-portint-1内嵌Zookeeper的端口号
-1表示不开启内嵌Zookeeper
nested-data-dirString 内嵌Zookeeper的数据存储路径
为空表示不开启内嵌Zookeeper
job:simple命名空间属性详细说明
属性名类型是否必填缺省值描述
idString 作业名称
classString 作业实现类,需实现ElasticJob接口,脚本型作业不需要配置
registry-center-refString 注册中心Bean的引用,需引用reg:zookeeper的声明
cronString cron表达式,用于配置作业触发时间
sharding-total-countint 作业分片总数
sharding-item-parametersString 分片序列号和参数用等号分隔,多个键值对用逗号分隔
分片序列号从0开始,不可大于或等于作业分片总数
如:
0=a,1=b,2=c
job-parameterString 作业自定义参数
可以配置多个相同的作业,但是用不同的参数作为不同的调度实例
monitor-executionbooleantrue监控作业运行时状态
每次作业执行时间和间隔时间均非常短的情况,建议不监控作业运行时状态以提升效率。因为是瞬时状态,所以无必要监控。请用户自行增加数据堆积监控。并且不能保证数据重复选取,应在作业中实现幂等性。
每次作业执行时间和间隔时间均较长的情况,建议监控作业运行时状态,可保证数据不会重复选取。
monitor-portint-1作业监控端口
建议配置作业监控端口, 方便开发者dump作业信息。
使用方法: echo “dump” | nc 127.0.0.1 9888
max-time-diff-secondsint-1最大允许的本机与注册中心的时间误差秒数
如果时间误差超过配置秒数则作业启动时将抛异常
配置为-1表示不校验时间误差
failoverbooleanfalse是否开启失效转移
monitorExecution开启,失效转移才有效
misfirebooleantrue是否开启错过任务重新执行
job-sharding-strategy-classStringtrue作业分片策略实现类全路径
默认使用平均分配策略
详情参见:作业分片策略
descriptionString 作业描述信息
disabledbooleanfalse作业是否禁止启动
可用于部署作业时,先禁止启动,部署结束后统一启动
overwritebooleanfalse本地配置是否可覆盖注册中心配置
如果可覆盖,每次启动作业都以本地配置为准

Spring集成Quartz定时任务

增加Quartz的Maven依赖
<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>2.2.1</version>
</dependency>
Spring配置
<?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:tx="http://www.springframework.org/schema/tx"
       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.springframework.org/schema/context 
            http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/tx  
            http://www.springframework.org/schema/tx/spring-tx.xsd"
       default-autowire="byName">
       <!-- CronTask -->
        <bean id="cronTaskTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
            <property name="jobDetail" ref="generateSettlementForNatureWeekTaskJob" />
            <property name="cronExpression" value="${ecc.worker.generate.settlement.nature.week}"></property>
        </bean>
        <bean id="cronTaskJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
            <!--实际调用类-->  
            <property name="targetObject" ref="cronTask" />
            <!--实际调用方法-->  
            <property name="targetMethod" value="execute" />
        </bean>
        <bean id="cronTask" class="com.b2b.worker.service.worker.CronTask" />
</beans>       

在线cron表达式:http://cron.qqe2.com/

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值