1、pom文件中添加jar包依赖
<!--分布式调度定时任务相关-->
<dependency>
<groupId>com.dangdang</groupId>
<artifactId>elastic-job-lite-core</artifactId>
<version>2.1.5</version>
</dependency>
<dependency>
<groupId>com.dangdang</groupId>
<artifactId>elastic-job-lite-spring</artifactId>
<version>2.1.5</version>
</dependency>
<!--分布式调度定时任务相关-->
2、修改application.properties
# 分布式调度定时任务相关
regCenter.serverList=192.168.164.101:2181,192.168.164.102:2181,192.168.164.103:2181
regCenter.namespace=springboot-demo
3、 elastic-job 的zookeeper注册中心配置
@Configuration
@ConditionalOnExpression("'${regCenter.serverList}'.length() > 0")
public class ElasticJobRegistryCenterConfig {
@Bean(initMethod = "init")
public ZookeeperRegistryCenter regCenter(@Value("${regCenter.serverList}") final String serverList,
@Value("${regCenter.namespace}") final String namespace) {
return new ZookeeperRegistryCenter(new ZookeeperConfiguration(serverList, namespace));
}
}
4、定义两个示例定时任务
public class TestAJob implements SimpleJob {
private static final Logger logger = LoggerFactory.getLogger(TestAJob.class);
@Override
public void execute(ShardingContext shardingContext) {
logger.info("TestAJob------------------");
}
private String cron = "0 0 0 * * ?"; // 0点执行
private String jobParameters = "";
private String description = "TestAJob的描述信息";
public String getCron() {
return cron;
}
public String getJobParameters() {
return jobParameters;
}
public String getDescription() {
return description;
}
}
public class TestBJob implements SimpleJob{
private static final Logger logger = LoggerFactory.getLogger(TestBJob.class);
@Override
public void execute(ShardingContext shardingContext) {
logger.info("TestBJob..................");
}
private String cron = "0 0 0 * * ?"; // 0点执行
private String jobParameters = "";
private String description = "TestBJob的描述信息";
public String getCron() {
return cron;
}
public String getJobParameters() {
return jobParameters;
}
public String getDescription() {
return description;
}
}
5、配置任务
配置任务的时候,这里定义了五个参数,分别是:
- cron:cron表达式,用于控制作业触发时间。
- shardingTotalCount:作业分片总数
- shardingItemParameters:分片序列号和参数用等号分隔,多个键值对用逗号分隔,分片序列号从0开始,不可大于或等于作业分片总数。如:0=a,1=b,2=c
- jobParameters:作业自定义参数
- description:作业描述
/**
* @author jushisi
* @description 配置任务
*/
@Configuration
public class JobConfig {
// private final int shardingTotalCount = 3;
// private final String shardingItemParameters = "0=A,1=B,2=C";
private final int shardingTotalCount = 1;
private final String shardingItemParameters = "";
@Resource
private ZookeeperRegistryCenter regCenter;
@Bean
public TestAJob testAJob() {
return new TestAJob();
}
@Bean(initMethod = "init")
public SpringJobScheduler simpleJobScheduler(final TestAJob testAJob) {
LiteJobConfiguration liteJobConfig = getLiteJobConfiguration(testAJob.getClass(), testAJob.getCron(), testAJob.getJobParameters(), testAJob.getDescription());
return new SpringJobScheduler(testAJob, regCenter, liteJobConfig);
}
@Bean
public TestBJob testBJob() {
return new TestBJob();
}
@Bean(initMethod = "init")
public SpringJobScheduler mySimpleJobScheduler(final TestBJob testBJob) {
LiteJobConfiguration liteJobConfig = getLiteJobConfiguration(testBJob.getClass(), testBJob.getCron(), testBJob.getJobParameters(), testBJob.getDescription());
return new SpringJobScheduler(testBJob, regCenter, liteJobConfig);
}
/**
* @description 构建作业配置
* @author jushisi
*/
private LiteJobConfiguration getLiteJobConfiguration(final Class<? extends SimpleJob> jobClass,
final String cron,
final String jobParameters,
final String description) {
// 定义作业核心配置
String jobName = jobClass.getName();
JobCoreConfiguration coreConfig =
JobCoreConfiguration.newBuilder(jobName, cron, shardingTotalCount)
.shardingItemParameters(shardingItemParameters)
.description(description)
.jobParameter(jobParameters)
.build();
// 定义SIMPLE类型配置
SimpleJobConfiguration simpleJobConfig = new SimpleJobConfiguration(coreConfig, jobClass.getCanonicalName());
// 定义Lite作业根配置
LiteJobConfiguration simpleJobRootConfig = LiteJobConfiguration.newBuilder(simpleJobConfig).overwrite(true).build();
return simpleJobRootConfig;
}
}
运行示例:
Elastic-Job编译部署运维平台 Console的用法参考:https://blog.csdn.net/jushisi/article/details/109319385