SpringBoot整合Elastic-Job 2.1.53版本任务调度,手动任务,动态添加任务演示

发布于:2024-07-25 ⋅ 阅读:(143) ⋅ 点赞:(0)

前提:zookeeper安装并成功运行

1 pom依赖

<dependency>
            <groupId>com.github.kuhn-he</groupId>
            <artifactId>elastic-job-lite-spring-boot-starter</artifactId>
            <version>2.1.53</version>
</dependency>

2 yml配置

#演示静态任务
elaticjob:
    zookeeper:
        server-lists: 127.0.0.1:2181
        namespace: synctask

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


手动任务,分片任务演示

import com.dangdang.ddframe.job.api.ShardingContext;
import com.dangdang.ddframe.job.api.simple.SimpleJob;
import com.dangdang.elasticjob.lite.annotation.ElasticSimpleJob;
import com.example.sdfsdfsdfsf_renwu.mapper.TbShopMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/***
 * 1:执行周期
 * 2:分片
 * 3:指定Zookeeper中的命名空间
 */
@ElasticSimpleJob(cron = "0/5 * * * * ?",
        jobName = "firstJob_1",
        shardingTotalCount = 3,
        jobParameter = "测试参数",
        shardingItemParameters = "0=zhangsan,1=lishi,2=wangwu")
@Component
@Slf4j
public class StaticJobTask implements SimpleJob {

    @Autowired
    private TbShopMapper tbShopMapper;

    //执行的作业
    @Override
    public void execute(ShardingContext shardingContext) {

        log.info("\nThread ID: {}\n任务总片数: {}\n当前分片项: {}\n当前参数: {}\n当前任务名称: {}\n当前任务参数: {}\n当前任务的id: {}\n",
                //获取当前线程的id
                Thread.currentThread().getId(),
                //获取任务总片数
                shardingContext.getShardingTotalCount(),
                //获取当前分片项
                shardingContext.getShardingItem(),
                //获取当前的参数
                shardingContext.getShardingParameter(),
                //获取当前的任务名称
                shardingContext.getJobName(),
                //获取当前任务参数
                shardingContext.getJobParameter(),
                //获取任务的id
                shardingContext.getTaskId()
        );

    }
}



动态添加执行任务演示


a zookeeper配置类

import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperConfiguration;
import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperRegistryCenter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class DynamicConfig {

    @Value("${dynamiczk}")
    private String dynamiczk;
    @Value("${dynamicnamespace}")
    private String dynamicnamespace;

    /****
     * 指定当前注册地址信息
     */
    @Bean
    public ZookeeperConfiguration zookeeperConfiguration() {
        return new ZookeeperConfiguration(dynamiczk,dynamicnamespace);
    }

    /****
     * 向Zookeeper服务注册
     */
    @Bean(initMethod = "init")
    public ZookeeperRegistryCenter zookeeperRegistryCenter(ZookeeperConfiguration zookeeperConfiguration){
        return new ZookeeperRegistryCenter(zookeeperConfiguration);
    }
}

b 执行任务的逻辑

import com.dangdang.ddframe.job.api.ShardingContext;
import com.dangdang.ddframe.job.api.simple.SimpleJob;

public class DynamicJob implements SimpleJob {

    //执行的作业
    @Override
    public void execute(ShardingContext shardingContext) {
        System.out.println("执行任务的逻辑");
    }
}

c 任务作业创建

import com.dangdang.ddframe.job.api.simple.SimpleJob;
import com.dangdang.ddframe.job.config.JobCoreConfiguration;
import com.dangdang.ddframe.job.config.simple.SimpleJobConfiguration;
import com.dangdang.ddframe.job.lite.config.LiteJobConfiguration;
import com.dangdang.ddframe.job.lite.spring.api.SpringJobScheduler;
import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperRegistryCenter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class DynamicTaskCreate {

    @Autowired
    private 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->构建:LiteJobConfiguration
        LiteJobConfiguration.Builder builder = LiteJobConfiguration.newBuilder(new SimpleJobConfiguration(
                JobCoreConfiguration.newBuilder(
                        jobName,
                        cron,
                        shardingTotalCount
                ).jobParameter(parameters).build(),
                instance.getClass().getName()
        )).overwrite(true);
        LiteJobConfiguration liteJobConfiguration = builder.build();

        //2.开启作业
        new SpringJobScheduler(instance,zookeeperRegistryCenter,liteJobConfiguration).init();
    }
}

d 创建作业任务的入口

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 动态添加任务
 */
@RestController
public class Controller_1 {

    @Autowired
    private DynamicTaskCreate dynamicTaskCreate;

    @RequestMapping("/addTask")
    public void addTask(SeckillActivity seckillActivity)
    {
        //创建任务调度,活动结束的时候执行
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("ss mm HH dd MM ? yyyy");
        String cron = simpleDateFormat.format(seckillActivity.getEndTime());
        System.out.println("cron:"+cron);

        //cron="3/3 * * * * ? *";

        dynamicTaskCreate.create("renwu_"+seckillActivity.getId(),
                cron,
                1,
                new DynamicJob(),
                "xingming=zhangsan");
    }
}

网站公告

今日签到

点亮在社区的每一天
去签到