定时任务

来源:互联网 发布:电脑测温度软件 编辑:程序博客网 时间:2024/06/05 16:10

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:2181namespaceString Zookeeper的命名空间base-sleep-time-millisecondsint否1000等待重试的间隔时间的初始值
单位:毫秒max-sleep-time-millisecondsint否3000等待重试的间隔时间的最大值
单位:毫秒max-retriesint否3最大重试次数session-timeout-millisecondsint否60000会话超时时间
单位:毫秒connection-timeout-millisecondsint否15000连接超时时间
单位:毫秒digestString否无验证连接Zookeeper的权限令牌
缺省为不需要权限验证nested-portint否-1内嵌Zookeeper的端口号
-1表示不开启内嵌Zookeepernested-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=cjob-parameterString否 作业自定义参数
可以配置多个相同的作业,但是用不同的参数作为不同的调度实例monitor-executionboolean否true监控作业运行时状态
每次作业执行时间和间隔时间均非常短的情况,建议不监控作业运行时状态以提升效率。因为是瞬时状态,所以无必要监控。请用户自行增加数据堆积监控。并且不能保证数据重复选取,应在作业中实现幂等性。
每次作业执行时间和间隔时间均较长的情况,建议监控作业运行时状态,可保证数据不会重复选取。monitor-portint否-1作业监控端口
建议配置作业监控端口, 方便开发者dump作业信息。
使用方法: echo “dump” | nc 127.0.0.1 9888max-time-diff-secondsint否-1最大允许的本机与注册中心的时间误差秒数
如果时间误差超过配置秒数则作业启动时将抛异常
配置为-1表示不校验时间误差failoverboolean否false是否开启失效转移
monitorExecution开启,失效转移才有效misfireboolean否true是否开启错过任务重新执行job-sharding-strategy-classString否true作业分片策略实现类全路径
默认使用平均分配策略
详情参见:作业分片策略descriptionString否 作业描述信息disabledboolean否false作业是否禁止启动
可用于部署作业时,先禁止启动,部署结束后统一启动overwriteboolean否false本地配置是否可覆盖注册中心配置
如果可覆盖,每次启动作业都以本地配置为准

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/

原创粉丝点击