springboot简单集成elastic job

elastic job是当当网开源的一个分布式定时任务

1、安装zookeeper,可在官网http://zookeeper.apache.org/下载

2、添加依赖

<properties>
        <java.version>1.8</java.version>
        <elastic-job.version>2.1.5</elastic-job.version>
        <curator.version>2.10.0</curator.version>
       </properties>
            <dependency>
                <artifactId>elastic-job-common-core</artifactId>
                <groupId>com.dangdang</groupId>
                <version>${elastic-job.version}</version>
            </dependency>
            <dependency>
                <artifactId>elastic-job-lite-core</artifactId>
                <groupId>com.dangdang</groupId>
                <version>${elastic-job.version}</version>
            </dependency>
            <dependency>
                <artifactId>elastic-job-lite-spring</artifactId>
                <groupId>com.dangdang</groupId>
                <version>${elastic-job.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.curator</groupId>
                <artifactId>curator-test</artifactId>
                <version>${curator.version}</version>
            </dependency>

3、配置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.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author Administrator
 *@date 2017年9月28日
 */
@Configuration
@ConditionalOnExpression("'${regCenter.serverList}'.length() > 0")
public class RegistryCenterConfig {
    
    @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、持久化配置

import javax.annotation.Resource;
import javax.sql.DataSource;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.dangdang.ddframe.job.event.JobEventConfiguration;
import com.dangdang.ddframe.job.event.rdb.JobEventRdbConfiguration;

/**
 * @author Administrator
 * @date 2017年9月28日
 */
@Configuration
public class JobEventConfig {

	@Resource
	private DataSource dataSource;

	@Bean
	public JobEventConfiguration jobEventConfiguration() {
		return new JobEventRdbConfiguration(dataSource);
	}
}

 5、配置文件application.properties配置,配置zookeeper和elastic job的执行时间、分片数、和定义分片参即shardingItemParameter,可以和分片项匹配对应关系,用于将分片项的数字转换为更加可读的业务代码

regCenter.serverList= 127.0.0.1:2181
regCenter.namespace= elastic-job

simpleJob.cron=0/5 * * * * ?
simpleJob.shardingTotalCount=3
simpleJob.shardingItemParameters=0=A,1=B,2=C

6、任务配置类

import javax.annotation.Resource;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.chaos.webapi.job.ProfitLossOrderJob;
import com.chaos.webapi.job.SpringSimpleJob;
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.event.JobEventConfiguration;
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;

/**
 * @author Administrator
 *@date 2017年9月28日
 */
@Configuration
public class SimpleJobConfig {
    
    @Resource
    private ZookeeperRegistryCenter regCenter;
    
    @Resource
    private JobEventConfiguration jobEventConfiguration;
    
    @Bean
    public SimpleJob simpleJob() {
        return new SpringSimpleJob(); 
    }
    
    @Bean
    public ProfitLossOrderJob pofitLossOrderJob() {
        return new ProfitLossOrderJob(); 
    }
    
    @Bean(initMethod = "init")
    public JobScheduler simpleJobScheduler(final SimpleJob simpleJob, @Value("${simpleJob.cron}") final String cron, @Value("${simpleJob.shardingTotalCount}") final int shardingTotalCount,
                                           @Value("${simpleJob.shardingItemParameters}") final String shardingItemParameters) {
        return new SpringJobScheduler(simpleJob, regCenter, getLiteJobConfiguration(simpleJob.getClass(), cron, shardingTotalCount, shardingItemParameters), jobEventConfiguration);
    }

    private LiteJobConfiguration getLiteJobConfiguration(final Class<? extends SimpleJob> jobClass, final String cron, final int shardingTotalCount, final String shardingItemParameters) {
        return LiteJobConfiguration.newBuilder(new SimpleJobConfiguration(JobCoreConfiguration.newBuilder(
                jobClass.getName(), cron, shardingTotalCount).shardingItemParameters(shardingItemParameters).build(), jobClass.getCanonicalName())).overwrite(true).build();
    }
}

 7、任务执行类

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

/**
 * @author Administrator
 *@date 2017年9月28日
 */
public class SpringSimpleJob implements SimpleJob {
    
    @Override
    public void execute(final ShardingContext shardingContext){
    	System.out.println("当前分片:"+shardingContext.getShardingItem()+"---"+shardingContext.getShardingParameter());
    }
}

 8、任务执行结果



 

扫描二维码关注公众号,回复: 234207 查看本文章

以上只是执行一个简单的打印语句,实际应用可以结合数据库的分库分表完成分片项和业务逻辑的对应关系。

猜你喜欢

转载自liaopeng.iteye.com/blog/2409763