diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLRU.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLRU.java index 609a8ff..3214d20 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLRU.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLRU.java @@ -16,10 +16,18 @@ public class ExecutorRouteLRU extends ExecutorRouter { private static ConcurrentHashMap> jobLRUMap = new ConcurrentHashMap>(); + private static long CACHE_VALID_TIME = 0; @Override public String route(int jobId, ArrayList addressList) { + // cache clear + if (System.currentTimeMillis() > CACHE_VALID_TIME) { + jobLRUMap.clear(); + CACHE_VALID_TIME = System.currentTimeMillis() + 1000*60*60*24; + } + + // init lru LinkedHashMap lruItem = jobLRUMap.get(jobId); if (lruItem == null) { /** @@ -31,12 +39,14 @@ jobLRUMap.put(jobId, lruItem); } + // put for (String address: addressList) { if (!lruItem.containsKey(address)) { lruItem.put(address, address); } } + // load String eldestKey = lruItem.entrySet().iterator().next().getKey(); String eldestValue = lruItem.get(eldestKey); return eldestValue; diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLRU.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLRU.java index 609a8ff..3214d20 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLRU.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLRU.java @@ -16,10 +16,18 @@ public class ExecutorRouteLRU extends ExecutorRouter { private static ConcurrentHashMap> jobLRUMap = new ConcurrentHashMap>(); + private static long CACHE_VALID_TIME = 0; @Override public String route(int jobId, ArrayList addressList) { + // cache clear + if (System.currentTimeMillis() > CACHE_VALID_TIME) { + jobLRUMap.clear(); + CACHE_VALID_TIME = System.currentTimeMillis() + 1000*60*60*24; + } + + // init lru LinkedHashMap lruItem = jobLRUMap.get(jobId); if (lruItem == null) { /** @@ -31,12 +39,14 @@ jobLRUMap.put(jobId, lruItem); } + // put for (String address: addressList) { if (!lruItem.containsKey(address)) { lruItem.put(address, address); } } + // load String eldestKey = lruItem.entrySet().iterator().next().getKey(); String eldestValue = lruItem.get(eldestKey); return eldestValue; diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRound.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRound.java index 4997c77..69b0d19 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRound.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRound.java @@ -11,7 +11,15 @@ public class ExecutorRouteRound extends ExecutorRouter { private static ConcurrentHashMap routeCountEachJob = new ConcurrentHashMap(); + private static long CACHE_VALID_TIME = 0; private static int count(int jobId) { + // cache clear + if (System.currentTimeMillis() > CACHE_VALID_TIME) { + routeCountEachJob.clear(); + CACHE_VALID_TIME = System.currentTimeMillis() + 1000*60*60*24; + } + + // count++ Integer count = routeCountEachJob.get(jobId); count = (count==null)?0:++count; routeCountEachJob.put(jobId, count); @@ -20,6 +28,9 @@ @Override public String route(int jobId, ArrayList addressList) { + + + return addressList.get(count(jobId)%addressList.size()); }