文档地址:http://elasticjob.io/docs/elastic-job-lite/00-overview/intro/
源码地址:https://github.com/elasticjob
源码解析:https://blog.csdn.net/spy19881201/article/details/61631799
<dependency> <groupId>com.github.kuhn-hegroupId> <artifactId>elastic-job-lite-spring-boot-starterartifactId> <version>2.1.5version> dependency>
elaticjob.zookeeper.server-lists=10.140.6.18:2181,10.140.6.19:2181 elaticjob.zookeeper.namespace=my-project
import com.dangdang.elasticjob.lite.annotation.ElasticSimpleJob; import org.springframework.stereotype.Component; import com.dangdang.ddframe.job.api.ShardingContext; cron = "* * * * * ?", jobName = "test123", shardingTotalCount = 2, jobParameter = "测试参数", shardingItemParameters = "0=A,1=B") ( public class MySimpleJob implements com.dangdang.ddframe.job.api.simple.SimpleJob { public void execute(ShardingContext shardingContext) { System.out.println(String.format("------Thread ID: %s, 任务总片数: %s, " + "当前分片项: %s.当前参数: %s," + "当前任务名称: %s.当前任务参数: %s" , Thread.currentThread().getId(), shardingContext.getShardingTotalCount(), shardingContext.getShardingItem(), shardingContext.getShardingParameter(), shardingContext.getJobName(), shardingContext.getJobParameter() )); } }
执行: java -jar xxx.jar --server.port=8081
------Thread ID: 83, 任务总片数: 2, 当前分片项: 0.当前参数: A,当前任务名称: com.willow.elasticJob.MySimpleJob.当前任务参数: ------Thread ID: 84, 任务总片数: 2, 当前分片项: 1.当前参数: B,当前任务名称: com.willow.elasticJob.MySimpleJob.当前任务参数: ------Thread ID: 89, 任务总片数: 2, 当前分片项: 0.当前参数: A,当前任务名称: com.willow.elasticJob.MySimpleJob.当前任务参数: ------Thread ID: 90, 任务总片数: 2, 当前分片项: 1.当前参数: B,当前任务名称: com.willow.elasticJob.MySimpleJob.当前任务参数:
当前暂未解决的问题: 动态添加的任务只能在添加的机器上运行,平行部署的其他机器上不会运行该任务
在上边配置的基础上添加以下配置:
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.api.JobScheduler; import com.dangdang.ddframe.job.lite.config.LiteJobConfiguration; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperConfiguration; import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperRegistryCenter; public class ElasticJobConfig { initMethod = "init") ( public ZookeeperRegistryCenter regCenter( ("${elaticjob.zookeeper.server-lists}") final String serverList, ("${elaticjob.zookeeper.namespace}") final String namespace) { return new ZookeeperRegistryCenter(new ZookeeperConfiguration(serverList, namespace)); } private ZookeeperRegistryCenter regCenter; /** * 动态添加 * @param jobClass * @param cron * @param shardingTotalCount * @param shardingItemParameters */ public void addSimpleJobScheduler(final Class extends SimpleJob> jobClass, final String cron, final int shardingTotalCount, final String shardingItemParameters){ JobCoreConfiguration coreConfig = JobCoreConfiguration.newBuilder(jobClass.getName(), cron, shardingTotalCount).shardingItemParameters(shardingItemParameters).jobParameter("job参数").build(); SimpleJobConfiguration simpleJobConfig = new SimpleJobConfiguration(coreConfig, jobClass.getCanonicalName()); JobScheduler jobScheduler = new JobScheduler(regCenter, LiteJobConfiguration.newBuilder(simpleJobConfig).build()); jobScheduler.init(); } }
import com.willow.elasticJob.MySimpleJob; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; public class TestController { private ElasticJobConfig elasticJobConfig; "/addJob") ( public void addJob() { int shardingTotalCount = 2; elasticJobConfig.addSimpleJobScheduler(new MySimpleJob().getClass(),"* * * * * ?",shardingTotalCount,"0=A,1=B"); } }
<dependency> <groupId>com.dangdanggroupId> <artifactId>elastic-job-lite-coreartifactId> <version>2.1.5version> dependency> <dependency> <groupId>com.dangdanggroupId> <artifactId>elastic-job-lite-springartifactId> <version>2.1.5version> dependency>
server.port=8766 spring.application.name=scheduler-service # zookeeper注册中心 spring.elasticjob.serverList = 192.168.7.108:2181 spring.elasticjob.namespace = elastic-job-lite-springboot # stockJob.cron = 0/5 * * * * ? stockJob.shardingTotalCount = 2 stockJob.shardingItemParameters = 0=Chengdu0,1=Chengdu1
package com.willow.config; 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.boot.autoconfigure.condition.ConditionalOnExpression; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; "'${spring.elasticjob.serverList}'.length() > 0") //判断是否配置了zookeeper 地址 (public class JobRegistryCenterConfig { initMethod = "init") ( public ZookeeperRegistryCenter regCenter( ("${spring.elasticjob.serverList}") final String serverList, ("${spring.elasticjob.namespace}") final String namespace) { return new ZookeeperRegistryCenter(new ZookeeperConfiguration(serverList, namespace)); } }
package com.willow.config; 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.api.JobScheduler; 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.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; public class StockJobConfig { private JobRegistryCenterConfig jobRegistryCenterConfig; private ZookeeperRegistryCenter regCenter; public StockJobConfig() { } initMethod = "init") ( public JobScheduler simpleJobScheduler(final StockSimpleJob simpleJob, ("${stockJob.cron}") final String cron, ("${stockJob.shardingTotalCount}") final int shardingTotalCount, "${stockJob.shardingItemParameters}") final String shardingItemParameters) { ( return new SpringJobScheduler(simpleJob, regCenter, simpleJobConfigBuilder(simpleJob.getClass(), cron, shardingTotalCount, shardingItemParameters)); } /** *@Description 任务配置类 */ private LiteJobConfiguration simpleJobConfigBuilder(final Class extends SimpleJob> jobClass, final String cron, final int shardingTotalCount, final String shardingItemParameters){ return LiteJobConfiguration .newBuilder( new SimpleJobConfiguration( JobCoreConfiguration.newBuilder( "my-jobName",cron,shardingTotalCount) .shardingItemParameters(shardingItemParameters).jobParameter("job-参数") .build() ,jobClass.getCanonicalName() ) ) .overwrite(true) .build(); } /** * 动态添加 * @param jobClass * @param cron * @param shardingTotalCount * @param shardingItemParameters */ public void addSimpleJobScheduler(final Class extends SimpleJob> jobClass, final String cron, final int shardingTotalCount, final String shardingItemParameters){ JobCoreConfiguration coreConfig = JobCoreConfiguration.newBuilder(jobClass.getName(), cron, shardingTotalCount).shardingItemParameters(shardingItemParameters).build(); SimpleJobConfiguration simpleJobConfig = new SimpleJobConfiguration(coreConfig, jobClass.getCanonicalName()); JobScheduler jobScheduler = new JobScheduler(regCenter, LiteJobConfiguration.newBuilder(simpleJobConfig).build()); jobScheduler.init(); } }
import com.dangdang.ddframe.job.api.ShardingContext; import com.dangdang.ddframe.job.api.simple.SimpleJob; import org.springframework.stereotype.Component; public class StockSimpleJob implements SimpleJob { public void execute(ShardingContext shardingContext) { System.out.println(String.format("------Thread ID: %s, 任务总片数: %s, " + "当前分片项: %s.当前参数: %s,"+ "当前任务名称: %s.当前任务参数: %s" , Thread.currentThread().getId(), shardingContext.getShardingTotalCount(), shardingContext.getShardingItem(), shardingContext.getShardingParameter(), shardingContext.getJobName(), shardingContext.getJobParameter() )); } }