当前主流的分布式任务调度:
ElasticJob 是面向互联网生态和海量任务的分布式调度解决方案,由两个相互独立的子项目 ElasticJob-Lite 和 ElasticJob-Cloud 组成。 它通过d性调度、资源管控、以及作业治理的功能,打造一个适用于互联网场景的分布式调度解决方案,并通过开放的架构设计,提供多元化的作业生态。 它的各个产品使用统一的作业 API,开发者仅需一次开发,即可随意部署。
ElasticJob 已于 2020 年 5 月 28 日成为 Apache ShardingSphere 的子项目。
2. 静态任务注意:使用elastic job 需要提前安装好ZK环境。
以下案例都基于Spring boot工程编写。
静态定时任务也就是指将定时执行的周期固定,每次都会按照指定时间执行,elasticjob实现该 *** 作比较简单。我们来实现一次该 *** 作。
*** 作步骤:
1.执行周期
2.分片
3.指定ZK中的命名空间
-
引入依赖
com.github.kuhn-he elastic-job-lite-spring-boot-starter2.1.5 -
配置elasticjob注册中心
修改bootstrap.yml配置zookeeper服务地址信息以及注册的命名空间名字:
elaticjob: zookeeper: server-lists: 127.0.0.1:2181 namespace: synctask
-
创建作业
@ElasticSimpleJob( cron = "0/10 * * * * ?", jobName = "synctask", shardingTotalCount = 1 ) @Component public class SyncStaticTask implements SimpleJob { //执行的流程 @Override public void execute(ShardingContext shardingContext) { System.out.println("elatic job执行静态任务。。。"); } }
-
测试
直接启动spring boot项目即可。
*** 作步骤:
- 注册当前服务-》ZK
- 创建作业配置
- jobName
- shardingTotalCount
- corn
- 创建任务
- 初始化启动任务
-
首先在yml中添加相关配置信息
#动态定时任务案例 dynamiczk: 127.0.0.1:2181 dynamicnamespace: dynamictask
-
注册服务
@Configuration public class DynamicConfig { @Value("${dynamiczk}") private String dynamiczk; @Value("${dynamicnamespace}") private String dynamicnamespace; @Bean public ZookeeperConfiguration zookeeperConfiguration() { return new ZookeeperConfiguration(dynamiczk, dynamicnamespace); } @Bean(initMethod = "init") public ZookeeperRegistryCenter zookeeperRegistryCenter(ZookeeperConfiguration zookeeperConfiguration) { return new ZookeeperRegistryCenter(zookeeperConfiguration); } }
-
创建作业调度
@Component public class DynamicTaskCreate { @Autowired private ZookeeperRegistryCenter zookeeperRegistryCenter; public void create(String jobName, String cron, int shardingTotalCount, SimpleJob instance, String parameters) { //1.配置作业->Builder->构建:LiteJobConfiguration LiteJobConfiguration.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 { //执行的作业 @Override public void execute(ShardingContext shardingContext) { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println("elastic job 动态任务:" + simpleDateFormat.format(new Date())); } }
-
测试
自行创建测试类或者编写接口访问也行
//创建任务调用,活动结束的时候执行 //cron表达式就是将我们正常的时间反过来写就OK SimpleDateFormat 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");
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)