Showing
1 changed file
with
35 additions
and
22 deletions
@@ -8,9 +8,13 @@ import java.util.Date; | @@ -8,9 +8,13 @@ import java.util.Date; | ||
8 | import java.util.HashMap; | 8 | import java.util.HashMap; |
9 | import java.util.List; | 9 | import java.util.List; |
10 | import java.util.Map; | 10 | import java.util.Map; |
11 | +import java.util.Random; | ||
12 | +import java.util.concurrent.TimeUnit; | ||
11 | import java.util.concurrent.locks.Lock; | 13 | import java.util.concurrent.locks.Lock; |
12 | import java.util.concurrent.locks.ReentrantLock; | 14 | import java.util.concurrent.locks.ReentrantLock; |
13 | 15 | ||
16 | +import javax.annotation.Resource; | ||
17 | + | ||
14 | import org.apache.commons.lang3.StringUtils; | 18 | import org.apache.commons.lang3.StringUtils; |
15 | import org.slf4j.Logger; | 19 | import org.slf4j.Logger; |
16 | import org.slf4j.LoggerFactory; | 20 | import org.slf4j.LoggerFactory; |
@@ -19,6 +23,7 @@ import org.springframework.dao.QueryTimeoutException; | @@ -19,6 +23,7 @@ import org.springframework.dao.QueryTimeoutException; | ||
19 | import org.springframework.scheduling.annotation.Scheduled; | 23 | import org.springframework.scheduling.annotation.Scheduled; |
20 | import org.springframework.stereotype.Component; | 24 | import org.springframework.stereotype.Component; |
21 | 25 | ||
26 | +import com.yoho.unions.common.redis.RedisValueCache; | ||
22 | import com.yoho.unions.dal.IUnionClickLogsDAO; | 27 | import com.yoho.unions.dal.IUnionClickLogsDAO; |
23 | import com.yoho.unions.dal.UnionClickCountDayMapper; | 28 | import com.yoho.unions.dal.UnionClickCountDayMapper; |
24 | import com.yoho.unions.dal.model.UnionClickCount; | 29 | import com.yoho.unions.dal.model.UnionClickCount; |
@@ -41,34 +46,42 @@ public class UnionClickCountDayTask { | @@ -41,34 +46,42 @@ public class UnionClickCountDayTask { | ||
41 | // 防止交错执行 | 46 | // 防止交错执行 |
42 | private Lock lock = new ReentrantLock(); | 47 | private Lock lock = new ReentrantLock(); |
43 | 48 | ||
49 | + @Resource | ||
50 | + private RedisValueCache redisValueCache; | ||
51 | + | ||
44 | // 每天01:30分执行 | 52 | // 每天01:30分执行 |
45 | @Scheduled(cron = "* 30 1 * * ?") | 53 | @Scheduled(cron = "* 30 1 * * ?") |
46 | //@Scheduled(cron = "* 0/2 * * * ?") | 54 | //@Scheduled(cron = "* 0/2 * * * ?") |
47 | public void run() { | 55 | public void run() { |
48 | - | ||
49 | - try { | ||
50 | - InetAddress addr = InetAddress.getLocalHost(); | ||
51 | - String ip = addr.getHostAddress(); | ||
52 | - logger.info("当前ip是:{}", ip); | ||
53 | - if (!StringUtils.equals("172.31.70.253", ip)) { | ||
54 | - logger.info("当前环境不是目标环境,不执行操作!"); | ||
55 | - return; | 56 | + |
57 | + String key = "yh:union:uniontype:UnionClickCountDayTask:" | ||
58 | + + formatDay.format(new Date(System.currentTimeMillis())); | ||
59 | + String value = Long.toString(System.nanoTime()) + Long.toString(new Random().nextInt(Integer.MAX_VALUE)); | ||
60 | + | ||
61 | + logger.info("UnionClickCountDayTask run time={} , exKey={}, exValue={}", format.format(new Date()), key, value); | ||
62 | + redisValueCache.setIfAbsent(key, value); | ||
63 | + String getValue = redisValueCache.get(key, String.class); | ||
64 | + logger.info("UnionClickCountDayTask run time={} , getKeyValue={}", format.format(new Date()), getValue); | ||
65 | + if (getValue != null && getValue.equals(value)) { | ||
66 | + logger.info("UnionClickCountDayTask run time={} , redis lock success", format.format(new Date())); | ||
67 | + try { | ||
68 | + Calendar time = Calendar.getInstance(); | ||
69 | + time.set(Calendar.HOUR_OF_DAY, 0); | ||
70 | + time.set(Calendar.MINUTE, 0); | ||
71 | + time.set(Calendar.SECOND, 0); | ||
72 | + time.set(Calendar.MILLISECOND, 0); | ||
73 | + int dayStart = (int) (time.getTimeInMillis() / 1000); | ||
74 | + int begin = dayStart - 24 * 60 * 60; | ||
75 | + int end = dayStart; | ||
76 | + exeTask(begin, end); | ||
77 | + } finally { | ||
78 | + logger.info("UnionClickCountDayTask run time={} , exe over set lock key timeout", | ||
79 | + format.format(new Date())); | ||
80 | + redisValueCache.set(key, value, 1, TimeUnit.HOURS); | ||
56 | } | 81 | } |
57 | - } catch (UnknownHostException e1) { | ||
58 | - logger.error("获取ip地址出错!"); | ||
59 | - return; | 82 | + } else { |
83 | + logger.info("UnionClickCountDayTask run time={} , redis can not get lock", format.format(new Date())); | ||
60 | } | 84 | } |
61 | - | ||
62 | - Calendar time = Calendar.getInstance(); | ||
63 | - time.set(Calendar.HOUR_OF_DAY, 0); | ||
64 | - time.set(Calendar.MINUTE, 0); | ||
65 | - time.set(Calendar.SECOND, 0); | ||
66 | - time.set(Calendar.MILLISECOND, 0); | ||
67 | - int dayStart = (int) (time.getTimeInMillis() / 1000); | ||
68 | - int begin = dayStart - 24 * 60 * 60; | ||
69 | - int end = dayStart; | ||
70 | - | ||
71 | - exeTask(begin, end); | ||
72 | } | 85 | } |
73 | 86 | ||
74 | public String exeTask(int begin, int end) { | 87 | public String exeTask(int begin, int end) { |
-
Please register or login to post a comment