天天看點

springboot配置Elastic-Job示例

加入maven依賴包

<!-- 引入elastic-job-lite核心子產品 -->
		<dependency>
			<groupId>com.dangdang</groupId>
			<artifactId>elastic-job-lite-core</artifactId>
			<version>2.1.5</version>
		</dependency>

		<!-- 使用springframework自定義命名空間時引入 -->
		<dependency>
			<groupId>com.dangdang</groupId>
			<artifactId>elastic-job-lite-spring</artifactId>
			<version>2.1.5</version>
		</dependency>
           

1.配置properties

zookeeper.serverList=xxx.xxx.xxx.xxx:8060,xxx.xxx.xxx.xxx:8060,xxx.xxx.xxx.xxx:8060
zookeeper.namespace.elasticJob=elastic-job-lite-springboot
elasticJob.cron.myjob=0/5 * * * * ?
elasticJob.shardingTotalCount.myjob=2
elasticJob.shardingItemParameters.myjob=0=p0,1=p1
           

2.ZookeeperConfig

@Configuration
@ConditionalOnExpression("'${regCenter.serverListt}'.length() > 0")
public class ZookeeperConfig {

	@Value("${zookeeper.serverList}")
	private String serverList;
	@Value("${zookeeper.namespace.elasticJob}")
	private String namespace;

	@Bean
	public ZookeeperConfiguration zkConfig() {
		return new ZookeeperConfiguration(serverList, namespace);
	}

	@Bean(initMethod = "init", destroyMethod = "close")
	public ZookeeperRegistryCenter regCenter(ZookeeperConfiguration config) {
		return new ZookeeperRegistryCenter(config);
	}
}
           

3.建立示例JOB

@Component
public class MyElasticJob implements SimpleJob {

	@Override
	public void execute(ShardingContext context) {
		System.out.println(String.format("------Thread ID: %s, 任務總片數: %s, "
						+ "目前分片項: %s.目前參數: %s,"
						+ "目前任務名稱: %s.目前任務參數: %s",
				Thread.currentThread().getId(),
				context.getShardingTotalCount(),
				context.getShardingItem(),
				context.getShardingParameter(),
				context.getJobName(),
				context.getJobParameter()));
		switch (context.getShardingItem()) {
			case 0:
				System.out.println("do something by sharding item 0");
				break;
			case 1:
				System.out.println("do something by sharding item 1");
				break;
			case 2:
				System.out.println("do something by sharding item 2");
				break;
			default:
				break;
		}
	}
}
           

4.ElasticJobConfig

@Configuration
public class ElasticJobConfig {

	@Autowired
	private ZookeeperRegistryCenter regCenter;

	@Autowired
	private  MyElasticJob myElasticJob;

	//定時任務的cron表達式
	@Value("${elasticJob.cron.myjob}")
	private String cron;
	//為任務的分片數量(即同時同時開幾個定時任務)
	@Value("${elasticJob.shardingTotalCount.myjob}")
	private int shardingTotalCount;
	//為任務分片攜帶的參數
	@Value("${elasticJob.shardingItemParameters.myjob}")
	private String shardingItemParameters;

	public ElasticJobConfig() {
	}

	@Bean(initMethod = "init")
	public JobScheduler simpleJobScheduler() {
		LiteJobConfiguration liteJobConfiguration
				= getLiteJobConfiguration(myElasticJob.getClass(), cron, shardingTotalCount, shardingItemParameters);
		JobScheduler jobScheduler
				= new SpringJobScheduler(myElasticJob, regCenter, liteJobConfiguration);
		return jobScheduler;
	}

	/**
	 *@Description  任務配置類
	 */
	private LiteJobConfiguration getLiteJobConfiguration(final Class<? extends SimpleJob> jobClass,
			final String cron,
			final int shardingTotalCount,
			final String shardingItemParameters){
		JobCoreConfiguration jobCoreConfiguration = JobCoreConfiguration.newBuilder(
						jobClass.getName(), cron, shardingTotalCount)
						.shardingItemParameters(shardingItemParameters)
						.build();
		SimpleJobConfiguration simpleJobConfiguration = new SimpleJobConfiguration(jobCoreConfiguration,jobClass.getCanonicalName());
		return LiteJobConfiguration.newBuilder(simpleJobConfiguration).overwrite(true).build();

	}
}
           

5.啟動springboot,JOB即可執行

springboot配置Elastic-Job示例

繼續閱讀