|  | @@ -48,7 +48,8 @@ public class JobScheduleHelper {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                  while (!toStop) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                    // 匹配任务
 | 
	
		
			
				|  |  | +                    // 扫描任务
 | 
	
		
			
				|  |  | +                    long start = System.currentTimeMillis();
 | 
	
		
			
				|  |  |                      Connection conn = null;
 | 
	
		
			
				|  |  |                      PreparedStatement preparedStatement = null;
 | 
	
		
			
				|  |  |                      try {
 | 
	
	
		
			
				|  | @@ -143,10 +144,11 @@ public class JobScheduleHelper {
 | 
	
		
			
				|  |  |                              }
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  | +                    long cost = System.currentTimeMillis()-start;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                    // 随机休眠1s内
 | 
	
		
			
				|  |  | +                    // next second, align second
 | 
	
		
			
				|  |  |                      try {
 | 
	
		
			
				|  |  | -                        TimeUnit.MILLISECONDS.sleep(500+new Random().nextInt(500));
 | 
	
		
			
				|  |  | +                        TimeUnit.MILLISECONDS.sleep(cost<1000?(1000-cost):100);
 | 
	
		
			
				|  |  |                      } catch (InterruptedException e) {
 | 
	
		
			
				|  |  |                          if (!toStop) {
 | 
	
		
			
				|  |  |                              logger.error(e.getMessage(), e);
 | 
	
	
		
			
				|  | @@ -167,6 +169,7 @@ public class JobScheduleHelper {
 | 
	
		
			
				|  |  |              @Override
 | 
	
		
			
				|  |  |              public void run() {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +                // align second
 | 
	
		
			
				|  |  |                  try {
 | 
	
		
			
				|  |  |                      TimeUnit.MILLISECONDS.sleep(System.currentTimeMillis()%1000 );
 | 
	
		
			
				|  |  |                  } catch (InterruptedException e) {
 | 
	
	
		
			
				|  | @@ -178,6 +181,7 @@ public class JobScheduleHelper {
 | 
	
		
			
				|  |  |                  int lastSecond = -1;
 | 
	
		
			
				|  |  |                  while (!toStop) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +                    long start = System.currentTimeMillis();
 | 
	
		
			
				|  |  |                      try {
 | 
	
		
			
				|  |  |                          // second data
 | 
	
		
			
				|  |  |                          List<Integer> ringItemData = new ArrayList<>();
 | 
	
	
		
			
				|  | @@ -199,7 +203,7 @@ public class JobScheduleHelper {
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  |                          lastSecond = nowSecond;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +                        // ring trigger
 | 
	
		
			
				|  |  |                          logger.debug(">>>>>>>>>>> xxl-job, time-ring beat : " + nowSecond + " = " + Arrays.asList(ringItemData) );
 | 
	
		
			
				|  |  |                          if (ringItemData!=null && ringItemData.size()>0) {
 | 
	
		
			
				|  |  |                              // do trigger
 | 
	
	
		
			
				|  | @@ -215,9 +219,11 @@ public class JobScheduleHelper {
 | 
	
		
			
				|  |  |                              logger.error(">>>>>>>>>>> xxl-job, JobScheduleHelper#ringThread error:{}", e);
 | 
	
		
			
				|  |  |                          }
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  | +                    long cost = System.currentTimeMillis() - start;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +                    // next second, align second
 | 
	
		
			
				|  |  |                      try {
 | 
	
		
			
				|  |  | -                        TimeUnit.SECONDS.sleep(1);
 | 
	
		
			
				|  |  | +                        TimeUnit.MILLISECONDS.sleep(1000-cost);
 | 
	
		
			
				|  |  |                      } catch (InterruptedException e) {
 | 
	
		
			
				|  |  |                          if (!toStop) {
 | 
	
		
			
				|  |  |                              logger.error(e.getMessage(), e);
 |