1.引入maven依赖
<dependency>
<groupId>com.dangdang</groupId>
<artifactId>elastic-job-lite-spring</artifactId>
<version>2.1.5</version>
</dependency>
2.spring命名空间配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:reg="http://www.dangdang.com/schema/ddframe/reg"
xmlns:job="http://www.dangdang.com/schema/ddframe/job"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.dangdang.com/schema/ddframe/reg
http://www.dangdang.com/schema/ddframe/reg/reg.xsd
http://www.dangdang.com/schema/ddframe/job
http://www.dangdang.com/schema/ddframe/job/job.xsd" default-lazy-init="false">
<reg:zookeeper id="regCenter"
server-lists="${reg-center.server-list}"
namespace="${reg-center.namespace}"
base-sleep-time-milliseconds="${reg-center.baseSleepTimeMilliseconds}"
max-sleep-time-milliseconds="${reg-center.maxSleepTimeMilliseconds}"
max-retries="${reg-center.maxRetries}"
session-timeout-milliseconds="${reg-center.sessionTimeoutMilliseconds}"
connection-timeout-milliseconds="${reg-center.connectionTimeoutMilliseconds}"/>
<!-- 雨量站实时数据拉取 每20分钟-->
<job:simple id="RainfallDataSyncTask" registry-center-ref="regCenter" cron="0 0/20 * * * ?" sharding-total-count="1"
class="com.envcloud.drainage.task.RainfallDataSyncTask" overwrite="true"
sharding-item-parameters="0=A"/>
</beans>
3.新建任务类 继承简单任务接口SimpleJob
@Slf4j
public class RainfallDataSyncTask implements SimpleJob {
@Autowired
private RainRealDataManager rainRealDataManager;
@Autowired
public StringRedisTemplate stringRedisTemplate;
@Autowired
private ApplicationContext context;
@Override
public void execute(ShardingContext shardingContext) {
log.info("---------------开始同步雨量数据-------------------------");
//开始时间默认当前时间往前推24小时
ValueOperations<String, String> operations = stringRedisTemplate.opsForValue();
String lastUpdateTime = operations.get("updateTime");
Long currentMillis = System.currentTimeMillis();
//更新缓存
operations.set("updateTime", String.valueOf(currentMillis));
Long startTimeMillis = 0L;
if (StringUtils.isAllBlank(lastUpdateTime)) {
startTimeMillis = currentMillis - 24 * 60 * 60 * 1000;
} else {
//查询上一次同步时间到当前时间段内的数据
startTimeMillis = Long.valueOf(lastUpdateTime);
}
//得到站点最新的一组数据
List<RainfallDTO> array = rainRealDataManager.getRainRealData(startTimeMillis, currentMillis);
if (array.size() <= 0) {
log.info("未获取到雨量站数据:开始时间:{},结束时间:{}", startTimeMillis, currentMillis);
return;
}
List<TDeviceRealdataDTO> dtos = getData(array);
if (CollUtil.isNotEmpty(dtos)) {
//丢出数据
context.publishEvent(new ChannelMsgEvent(this, dtos));
} else {
log.info("查询数据为空");
}
log.info("----------------雨量数据同步完成-------------------");
}
}