抽取部分
<!--定时任务-->
<dependency>
<groupId>com.dangdang</groupId>
<artifactId>elastic-job-lite-core</artifactId>
<version>RELEASE</version>
</dependency>
<dependency>
<groupId>com.dangdang</groupId>
<artifactId>elastic-job-lite-spring</artifactId>
<version>RELEASE</version>
</dependency>
<dependency>
<groupId>com.mz.paascloud.common</groupId>
<artifactId>paascloud-common-elasticjob</artifactId>
<version>1.0</version>
<scope>compile</scope>
</dependency>
import com.dangdang.ddframe.job.lite.api.JobScheduler;
public abstract class AbsInitAddJob {
/**
* 添加定时任务配置
*
* @param elasticJobHandler
*/
public abstract JobScheduler addJob(ElasticJobHandler elasticJobHandler);
}
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 lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.annotation.Resource;
/**
* 配置定时器
*/
@Slf4j
@Configuration
public class ElasticJobConfig {
@Resource
private ElasticJobHandler elasticJobHandler;
@Autowired
AbsInitAddJob addJob;
public ElasticJobConfig() {
}
/**
* 创建任务调度器
*
* @return
*/
@Bean(initMethod = "init")
public JobScheduler simpleJobScheduler() {
return addJob.addJob(elasticJobHandler);
}
/**
* @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();
}
@Bean
public ElasticJobListener elasticJobListener() {
return new ElasticJobListener(100, 100);
}
}
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.stereotype.Component;
import javax.annotation.Resource;
@Component
public class ElasticJobHandler {
@Resource
private ZookeeperRegistryCenter registryCenter;
@Resource
private ElasticJobListener elasticJobListener;
/**
* @param jobName
* @param jobClass
* @param shardingTotalCount
* @param cron
* @param id 数据ID
* @return
*/
private static LiteJobConfiguration.Builder simpleJobConfigBuilder(String jobName,
Class<? extends SimpleJob> jobClass,
int shardingTotalCount,
String cron,
String id) {
return LiteJobConfiguration.newBuilder(new SimpleJobConfiguration(
JobCoreConfiguration.newBuilder(jobName, cron, shardingTotalCount).jobParameter(id).build(), jobClass.getCanonicalName().split("\\$\\$")[0]));
}
/**
* 添加定时任务通用方法
* @param jobName
* @param cron
* @param shardingTotalCount
* @param id
* @param simpleJob
*/
public void addJob(String jobName, String cron, Integer shardingTotalCount, String id, SimpleJob simpleJob) {
Class<? extends SimpleJob> aClass = simpleJob.getClass();
LiteJobConfiguration jobConfig = simpleJobConfigBuilder(jobName, aClass, shardingTotalCount, cron, id)
.overwrite(true).build();
new SpringJobScheduler(simpleJob, registryCenter, jobConfig, elasticJobListener).init();
}
}
import com.dangdang.ddframe.job.executor.ShardingContexts;
import com.dangdang.ddframe.job.lite.api.listener.AbstractDistributeOnceElasticJobListener;
public class ElasticJobListener extends AbstractDistributeOnceElasticJobListener {
public ElasticJobListener(long startedTimeoutMilliseconds, long completedTimeoutMilliseconds) {
super(startedTimeoutMilliseconds, completedTimeoutMilliseconds);
}
@Override
public void doBeforeJobExecutedAtLastStarted(ShardingContexts shardingContexts) {
}
@Override
public void doAfterJobExecutedAtLastCompleted(ShardingContexts shardingContexts) {
}
}
import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperConfiguration;
import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperRegistryCenter;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
/**
* 配置定时器
*/
@Component
@Data
@ConfigurationProperties(prefix = "zookeeper")
public class ZookeeperJobConfig {
private String serverlists;
private String namespace;
@Bean
public ZookeeperConfiguration zkConfig() {
return new ZookeeperConfiguration(serverlists, namespace);
}
@Bean(initMethod = "init")
public ZookeeperRegistryCenter regCenter(ZookeeperConfiguration config) {
return new ZookeeperRegistryCenter(config);
}
}
进行使用部分
@Component("*_ElasticJobConfig")
@Configuration
public class ElasticJobConfig extends AbsInitAddJob {
/**
* 定时任务开关
*/
@Value("${elasticJob.enable}")
private boolean enable;
//为任务的分片数量(即同时同时开几个定时任务)
@Value("${elasticJob.shardingTotalCount}")
private int shardingTotalCount;
@Value("${elasticJob.userReadLogJobCron}")
private String userReadLogJobCron;
@Value("${elasticJob.userCommentJobCron}")
private String userCommentJobCron;
@Value("${elasticJob.userFabulousJobCron}")
private String userFabulousJobCron;
@Value("${elasticJob.userSituationJobCron}")
private String userSituationJobCron;
@Value("${elasticJob.userReadLogDataArchivingJobCron}")
private String userReadLogDataArchivingJobCron;
@Value("${elasticJob.userCommentDataArchivingJobCron}")
private String userCommentDataArchivingJobCron;
@Value("${elasticJob.userFabulousDataArchivingJobCron}")
private String userFabulousDataArchivingJobCron;
@Value("${elasticJob.userSituationDataArchivingJobCron}")
private String userSituationDataArchivingJobCron;
@Autowired
private UserReadLogJob userReadLogJob;
@Autowired
private UserCommentJob userCommentJob;
@Autowired
private UserFabulousJob userFabulousJob;
@Autowired
private UserSituationJob userSituationJob;
@Autowired
private UserReadLogDataArchivingJob userReadLogDataArchivingJob;
@Autowired
private UserCommentDataArchivingJob userCommentDataArchivingJob;
@Autowired
private UserFabulousDataArchivingJob userFabulousDataArchivingJob;
@Autowired
private UserSitationDataArchivingJob userSitationDataArchivingJob;
@Override
public JobScheduler addJob(ElasticJobHandler elasticJobHandler) {
if (enable) {
elasticJobHandler.addJob("定时刷新数据录到es", userReadLogJobCron,
shardingTotalCount, UUID.randomUUID().toString(), userReadLogJob);
elasticJobHandler.addJob("************到es", userCommentJobCron,
shardingTotalCount, UUID.randomUUID().toString(), userCommentJob);
elasticJobHandler.addJob("************到es", userFabulousJobCron,
shardingTotalCount, UUID.randomUUID().toString(), userFabulousJob);
elasticJobHandler.addJob("************到es", userSituationJobCron,
shardingTotalCount, UUID.randomUUID().toString(), userSituationJob);
// elasticJobHandler.addJob("************", userReadLogDataArchivingJobCron,
// shardingTotalCount, UUID.randomUUID().toString(), userReadLogDataArchivingJob);
// elasticJobHandler.addJob("************", userCommentDataArchivingJobCron,
// shardingTotalCount, UUID.randomUUID().toString(), userCommentDataArchivingJob);
// elasticJobHandler.addJob("************", userFabulousDataArchivingJobCron,
// shardingTotalCount, UUID.randomUUID().toString(), userFabulousDataArchivingJob);
// elasticJobHandler.addJob("************", userSituationDataArchivingJobCron,
// shardingTotalCount, UUID.randomUUID().toString(), userSitationDataArchivingJob);
}
return null;
}
}
@Component
@Slf4j
public class UserReadLogJob implements SimpleJob {
@Autowired
private UserReadLogEsService userReadLogEsService;
@Autowired
private UserOpertionService userOpertionService;
@Override
public void execute(ShardingContext shardingContext) {
log.info("定时任务执行开始--------------------------------");
try {
String nowDate = DateUtil.dateFormat(new Date(), DateUtil.DATE_PATTERN);
String startTime = nowDate + " 00:00:00";
String endTime = nowDate + " 23:59:59";
List<String> list = userOpertionService.selectUserReadLogCompanyList(startTime, endTime);
list.stream().forEach(o -> {
userReadLogEsService.createIndex(o);
});
userReadLogEsService.insertDateToEs(startTime, endTime);
} catch (ParseException e) {
log.error("定时任务执行异常"+e.getMessage());
}
log.info("定时任务执行结束--------------------------------");
}
}
application.yml配置文件
zookeeper:
serverlists: 192.168.0.*:2181
namespace: *-job
elasticJob:
enable: true
shardingTotalCount: 1
userReadLogJobCron: 0 0/1 * * * ?
userCommentJobCron: 0 0/1 * * * ?
userFabulousJobCron: 0 0/1 * * * ?
userSituationJobCron: 0 0/1 * * * ?
#一个月归一次档
userReadLogDataArchivingJobCron: 0 0 0 1 * ? *
userCommentDataArchivingJobCron: 0 0 0 1 * ? *
userFabulousDataArchivingJobCron: 0 0 0 1 * ? *
userSituationDataArchivingJobCron: 0 0 0 1 * ? *