900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > Spring boot 集成 Elastic-job 实现定时任务

Spring boot 集成 Elastic-job 实现定时任务

时间:2022-03-18 16:38:04

相关推荐

Spring boot 集成 Elastic-job 实现定时任务

1. 介绍

当前主流的分布式任务调度:

ElasticJob 是面向互联网生态和海量任务的分布式调度解决方案,由两个相互独立的子项目 ElasticJob-Lite 和 ElasticJob-Cloud 组成。 它通过弹性调度、资源管控、以及作业治理的功能,打造一个适用于互联网场景的分布式调度解决方案,并通过开放的架构设计,提供多元化的作业生态。 它的各个产品使用统一的作业 API,开发者仅需一次开发,即可随意部署。

ElasticJob 已于 年 5 月 28 日成为 Apache ShardingSphere 的子项目。

注意:使用elastic job 需要提前安装好ZK环境。

以下案例都基于Spring boot工程编写。

2. 静态任务

静态定时任务也就是指将定时执行的周期固定,每次都会按照指定时间执行,elasticjob实现该操作比较简单。我们来实现一次该操作。

操作步骤:

1.执行周期

2.分片

3.指定ZK中的命名空间

引入依赖

<!-- ElasticJobAutoConfiguration自动配置类作用--><dependency><groupId>com.github.kuhn-he</groupId><artifactId>elastic-job-lite-spring-boot-starter</artifactId><version>2.1.5</version></dependency>

配置elasticjob注册中心

修改bootstrap.yml配置zookeeper服务地址信息以及注册的命名空间名字:

elaticjob:zookeeper:server-lists: 127.0.0.1:2181namespace: synctask

创建作业

@ElasticSimpleJob(cron = "0/10 * * * * ?",jobName = "synctask",shardingTotalCount = 1)@Componentpublic class SyncStaticTask implements SimpleJob {//执行的流程@Overridepublic void execute(ShardingContext shardingContext) {System.out.println("elatic job执行静态任务。。。");}}

测试

直接启动spring boot项目即可。

3. 动态任务

操作步骤:

注册当前服务-》ZK创建作业配置 jobNameshardingTotalCountcorn 创建任务初始化启动任务

首先在yml中添加相关配置信息

#动态定时任务案例dynamiczk: 127.0.0.1:2181dynamicnamespace: dynamictask

注册服务

@Configurationpublic class DynamicConfig {@Value("${dynamiczk}")private String dynamiczk;@Value("${dynamicnamespace}")private String dynamicnamespace;/***** 指定当前注册地址信息*/@Beanpublic ZookeeperConfiguration zookeeperConfiguration() {return new ZookeeperConfiguration(dynamiczk, dynamicnamespace);}/***** 向Zookeeper服务注册*/@Bean(initMethod = "init")public ZookeeperRegistryCenter zookeeperRegistryCenter(ZookeeperConfiguration zookeeperConfiguration) {return new ZookeeperRegistryCenter(zookeeperConfiguration);}}

创建作业调度

@Componentpublic class DynamicTaskCreate {@Autowiredprivate ZookeeperRegistryCenter zookeeperRegistryCenter;/**** 作业创建* @param jobName:作业名字* @param cron:表达式* @param shardingTotalCount:分片数量* @param instance:作业实例* @param parameters:额外参数*/public void create(String jobName, String cron, int shardingTotalCount, SimpleJob instance, String parameters) {//1.配置作业->Builder->构建:LiteJobConfigurationLiteJobConfiguration.Builder builder = LiteJobConfiguration.newBuilder(new SimpleJobConfiguration(JobCoreConfiguration.newBuilder(jobName,cron,shardingTotalCount).jobParameter(parameters).build(),instance.getClass().getName())).overwrite(true); //overwrite 覆盖之前同名的任务LiteJobConfiguration liteJobConfiguration = builder.build();//2.开启作业new SpringJobScheduler(instance, zookeeperRegistryCenter, liteJobConfiguration).init();}}

创建定时任务

public class DynamicJob implements SimpleJob {//执行的作业@Overridepublic void execute(ShardingContext shardingContext) {SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println("elastic job动态任务:" + simpleDateFormat.format(new Date()));}}

测试

自行创建测试类或者编写接口访问也行

//创建任务调用,活动结束的时候执行//cron表达式就是将我们正常的时间反过来写就OKSimpleDateFormat simpleDateFormat = new SimpleDateFormat("ss mm HH dd MM ? yyyy");String cron = simpleDateFormat.format(seckillActivity.getEndTime());System.out.println("cron:" + cron);dynamicTaskCreate.create("jobname", cron, 1, new DynamicJob(), "param");

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。