Parcourir la source

review code with spring code style and update spring version and springboot version

kerry il y a 5 ans
Parent
révision
08a06a72d4
29 fichiers modifiés avec 632 ajouts et 537 suppressions
  1. 7 7
      pom.xml
  2. 1 1
      xxl-job-admin/config/application.properties
  3. 7 0
      xxl-job-admin/pom.xml
  4. 21 0
      xxl-job-admin/src/main/java/com/xxl/job/admin/config/StaticAware.java
  5. 44 0
      xxl-job-admin/src/main/java/com/xxl/job/admin/config/XxlJobConfiguration.java
  6. 7 4
      xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobApiController.java
  7. 3 1
      xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobInfoController.java
  8. 4 2
      xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java
  9. 13 116
      xxl-job-admin/src/main/java/com/xxl/job/admin/core/conf/XxlJobAdminConfig.java
  10. 14 1
      xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/ExecutorRouter.java
  11. 2 3
      xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteBusyover.java
  12. 1 2
      xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteFailover.java
  13. 18 49
      xxl-job-admin/src/main/java/com/xxl/job/admin/core/scheduler/XxlJobScheduler.java
  14. 35 172
      xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobFailMonitorHelper.java
  15. 29 14
      xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobLogReportHelper.java
  16. 27 11
      xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryMonitorHelper.java
  17. 31 12
      xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobScheduleHelper.java
  18. 25 17
      xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobTriggerPoolHelper.java
  19. 30 11
      xxl-job-admin/src/main/java/com/xxl/job/admin/core/trigger/XxlJobTrigger.java
  20. 43 24
      xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/I18nUtil.java
  21. 21 0
      xxl-job-admin/src/main/java/com/xxl/job/admin/service/AlarmService.java
  22. 2 3
      xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/AdminBizImpl.java
  23. 200 0
      xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/AlarmServiceImpl.java
  24. 13 28
      xxl-job-admin/src/main/resources/application-dev1.properties
  25. 14 29
      xxl-job-admin/src/main/resources/application-dev2.properties
  26. 12 26
      xxl-job-admin/src/main/resources/application.properties
  27. 2 2
      xxl-job-admin/src/main/resources/templates/common/common.macro.ftl
  28. 2 2
      xxl-job-admin/src/test/java/com/xxl/job/admin/util/I18nUtilTest.java
  29. 4 0
      xxl-job-core/src/main/java/com/xxl/job/core/util/XxlJobRemotingUtil.java

+ 7 - 7
pom.xml Voir le fichier

@@ -20,18 +20,18 @@
20 20
 		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
21 21
 		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
22 22
 		<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
23
-		<maven.compiler.source>1.7</maven.compiler.source>
24
-		<maven.compiler.target>1.7</maven.compiler.target>
23
+		<maven.compiler.source>1.8</maven.compiler.source>
24
+		<maven.compiler.target>1.8</maven.compiler.target>
25 25
 		<maven.test.skip>true</maven.test.skip>
26 26
 
27 27
 		<xxl-rpc.version>1.5.0</xxl-rpc.version>
28 28
 
29
-		<spring.version>4.3.25.RELEASE</spring.version>
30
-		<spring-boot.version>1.5.22.RELEASE</spring-boot.version>
31
-		<mybatis-spring-boot-starter.version>1.3.5</mybatis-spring-boot-starter.version>
32
-		<mysql-connector-java.version>5.1.48</mysql-connector-java.version>
29
+		<spring.version>5.2.2.RELEASE</spring.version>
30
+		<spring-boot.version>2.2.2.RELEASE</spring-boot.version>
31
+		<mybatis-spring-boot-starter.version>2.1.1</mybatis-spring-boot-starter.version>
32
+		<mysql-connector-java.version>8.0.18</mysql-connector-java.version>
33 33
 
34
-		<slf4j-api.version>1.7.29</slf4j-api.version>
34
+		<slf4j-api.version>1.7.30</slf4j-api.version>
35 35
 		<junit.version>4.12</junit.version>
36 36
 
37 37
 		<groovy.version>2.5.8</groovy.version>

+ 1 - 1
xxl-job-admin/config/application.properties Voir le fichier

@@ -1 +1 @@
1
-spring.profiles.active=production
1
+#spring.profiles.active=production

+ 7 - 0
xxl-job-admin/pom.xml Voir le fichier

@@ -73,6 +73,13 @@
73 73
             <version>${project.parent.version}</version>
74 74
         </dependency>
75 75
 
76
+        <dependency>
77
+            <groupId>org.projectlombok</groupId>
78
+            <artifactId>lombok</artifactId>
79
+            <version>1.18.10</version>
80
+            <scope>provided</scope>
81
+        </dependency>
82
+
76 83
     </dependencies>
77 84
 
78 85
     <build>

+ 21 - 0
xxl-job-admin/src/main/java/com/xxl/job/admin/config/StaticAware.java Voir le fichier

@@ -0,0 +1,21 @@
1
+package com.xxl.job.admin.config;
2
+
3
+import com.xxl.job.admin.core.conf.XxlJobAdminConfig;
4
+import com.xxl.job.admin.core.util.I18nUtil;
5
+import org.springframework.beans.BeansException;
6
+import org.springframework.context.ApplicationContext;
7
+import org.springframework.context.ApplicationContextAware;
8
+import org.springframework.stereotype.Component;
9
+
10
+/**
11
+ * @author VcKerry on 2020/1/6
12
+ */
13
+
14
+@Component
15
+public class StaticAware implements ApplicationContextAware {
16
+    @Override
17
+    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
18
+        final XxlJobAdminConfig bean = applicationContext.getBean(XxlJobAdminConfig.class);
19
+        I18nUtil.setI18n(bean.getI18n());
20
+    }
21
+}

+ 44 - 0
xxl-job-admin/src/main/java/com/xxl/job/admin/config/XxlJobConfiguration.java Voir le fichier

@@ -0,0 +1,44 @@
1
+package com.xxl.job.admin.config;
2
+
3
+/**
4
+ * @author VcKerry on 2020/1/6
5
+ */
6
+
7
+//@Configuration
8
+public class XxlJobConfiguration {
9
+
10
+ /*   @Bean
11
+    public JobTriggerPoolHelper jobTriggerPoolHelper() {
12
+        return new JobTriggerPoolHelper();
13
+    }
14
+
15
+
16
+    @Bean
17
+    public JobFailMonitorHelper jobFailMonitorHelper(JobTriggerPoolHelper jobTriggerPoolHelper) {
18
+        return new JobFailMonitorHelper(jobTriggerPoolHelper);
19
+    }
20
+
21
+
22
+    @Bean
23
+    public JobLogReportHelper jobLogReportHelper() {
24
+        return new JobLogReportHelper();
25
+    }
26
+
27
+    @Bean
28
+    public JobScheduleHelper jobScheduleHelper(JobTriggerPoolHelper jobTriggerPoolHelper) {
29
+        return new JobScheduleHelper(jobTriggerPoolHelper);
30
+    }
31
+*/
32
+
33
+   /* @Bean(destroyMethod = "destroy")
34
+    public XxlJobScheduler xxlJobScheduler(JobRegistryMonitorHelper jobRegistryMonitorHelper,
35
+                                           JobFailMonitorHelper jobFailMonitorHelper,
36
+                                           JobTriggerPoolHelper jobTriggerPoolHelper,
37
+                                           JobLogReportHelper jobLogReportHelper,
38
+                                           JobScheduleHelper jobScheduleHelper) throws Exception {
39
+        XxlJobScheduler xxlJobScheduler = new XxlJobScheduler(jobRegistryMonitorHelper, jobFailMonitorHelper, jobTriggerPoolHelper, jobLogReportHelper, jobScheduleHelper);
40
+        xxlJobScheduler.init();
41
+        return xxlJobScheduler;
42
+    }*/
43
+
44
+}

+ 7 - 4
xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobApiController.java Voir le fichier

@@ -1,7 +1,6 @@
1 1
 package com.xxl.job.admin.controller;
2 2
 
3 3
 import com.xxl.job.admin.controller.annotation.PermissionLimit;
4
-import com.xxl.job.admin.core.conf.XxlJobAdminConfig;
5 4
 import com.xxl.job.admin.core.exception.XxlJobException;
6 5
 import com.xxl.job.admin.core.util.JacksonUtil;
7 6
 import com.xxl.job.core.biz.AdminBiz;
@@ -9,6 +8,7 @@ import com.xxl.job.core.biz.model.HandleCallbackParam;
9 8
 import com.xxl.job.core.biz.model.RegistryParam;
10 9
 import com.xxl.job.core.biz.model.ReturnT;
11 10
 import com.xxl.job.core.util.XxlJobRemotingUtil;
11
+import org.springframework.beans.factory.annotation.Value;
12 12
 import org.springframework.stereotype.Controller;
13 13
 import org.springframework.web.bind.annotation.RequestBody;
14 14
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -28,6 +28,9 @@ public class JobApiController {
28 28
     @Resource
29 29
     private AdminBiz adminBiz;
30 30
 
31
+    @Value("${xxl.job.accessToken}")
32
+    private String accessToken;
33
+
31 34
 
32 35
     // ---------------------- base ----------------------
33 36
 
@@ -35,9 +38,9 @@ public class JobApiController {
35 38
      * valid access token
36 39
      */
37 40
     private void validAccessToken(HttpServletRequest request) {
38
-        if (XxlJobAdminConfig.getAdminConfig().getAccessToken() != null
39
-                && XxlJobAdminConfig.getAdminConfig().getAccessToken().trim().length() > 0
40
-                && !XxlJobAdminConfig.getAdminConfig().getAccessToken().equals(request.getHeader(XxlJobRemotingUtil.XXL_RPC_ACCESS_TOKEN))) {
41
+        if (accessToken != null
42
+                && accessToken.trim().length() > 0
43
+                && !accessToken.equals(request.getHeader(XxlJobRemotingUtil.XXL_RPC_ACCESS_TOKEN))) {
41 44
             throw new XxlJobException("The access token is wrong.");
42 45
         }
43 46
     }

+ 3 - 1
xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobInfoController.java Voir le fichier

@@ -40,6 +40,8 @@ public class JobInfoController {
40 40
     private XxlJobGroupDao xxlJobGroupDao;
41 41
     @Resource
42 42
     private XxlJobService xxlJobService;
43
+    @Resource
44
+    private JobTriggerPoolHelper jobTriggerPoolHelper;
43 45
 
44 46
     @RequestMapping
45 47
     public String index(HttpServletRequest request, Model model, @RequestParam(required = false, defaultValue = "-1") int jobGroup) {
@@ -140,7 +142,7 @@ public class JobInfoController {
140 142
             executorParam = "";
141 143
         }
142 144
 
143
-        JobTriggerPoolHelper.trigger(id, TriggerTypeEnum.MANUAL, -1, null, executorParam);
145
+        jobTriggerPoolHelper.trigger(id, TriggerTypeEnum.MANUAL, -1, null, executorParam);
144 146
         return ReturnT.SUCCESS;
145 147
     }
146 148
 

+ 4 - 2
xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobLogController.java Voir le fichier

@@ -44,6 +44,8 @@ public class JobLogController {
44 44
     public XxlJobInfoDao xxlJobInfoDao;
45 45
     @Resource
46 46
     public XxlJobLogDao xxlJobLogDao;
47
+    @Resource
48
+    private XxlJobScheduler xxlJobScheduler;
47 49
 
48 50
     @RequestMapping
49 51
     public String index(HttpServletRequest request, Model model, @RequestParam(required = false, defaultValue = "0") Integer jobId) {
@@ -137,7 +139,7 @@ public class JobLogController {
137 139
     @ResponseBody
138 140
     public ReturnT<LogResult> logDetailCat(String executorAddress, long triggerTime, long logId, int fromLineNum) {
139 141
         try {
140
-            ExecutorBiz executorBiz = XxlJobScheduler.getExecutorBiz(executorAddress);
142
+            ExecutorBiz executorBiz = xxlJobScheduler.getExecutorBiz(executorAddress);
141 143
             ReturnT<LogResult> logResult = executorBiz.log(triggerTime, logId, fromLineNum);
142 144
 
143 145
             // is end
@@ -171,7 +173,7 @@ public class JobLogController {
171 173
         // request of kill
172 174
         ReturnT<String> runResult = null;
173 175
         try {
174
-            ExecutorBiz executorBiz = XxlJobScheduler.getExecutorBiz(log.getExecutorAddress());
176
+            ExecutorBiz executorBiz = xxlJobScheduler.getExecutorBiz(log.getExecutorAddress());
175 177
             runResult = executorBiz.kill(jobInfo.getId());
176 178
         } catch (Exception e) {
177 179
             logger.error(e.getMessage(), e);

+ 13 - 116
xxl-job-admin/src/main/java/com/xxl/job/admin/core/conf/XxlJobAdminConfig.java Voir le fichier

@@ -1,63 +1,23 @@
1 1
 package com.xxl.job.admin.core.conf;
2 2
 
3
-import com.xxl.job.admin.core.scheduler.XxlJobScheduler;
4
-import com.xxl.job.admin.dao.*;
5
-import org.springframework.beans.factory.DisposableBean;
6
-import org.springframework.beans.factory.InitializingBean;
3
+import lombok.Data;
7 4
 import org.springframework.beans.factory.annotation.Value;
8
-import org.springframework.mail.javamail.JavaMailSender;
5
+import org.springframework.context.annotation.Configuration;
9 6
 import org.springframework.stereotype.Component;
10
-import org.springframework.web.client.RestTemplate;
11
-
12
-import javax.annotation.Resource;
13
-import javax.sql.DataSource;
14 7
 
15 8
 /**
16
- * xxl-job config
17
- *
18
- * @author xuxueli 2017-04-28
9
+ * @author VcKerry on 2020/1/6
19 10
  */
20 11
 
21
-@Component
22
-public class XxlJobAdminConfig implements InitializingBean, DisposableBean {
23
-
24
-    private static XxlJobAdminConfig adminConfig = null;
25
-
26
-    public static XxlJobAdminConfig getAdminConfig() {
27
-        return adminConfig;
28
-    }
29
-
30
-
31
-    // ---------------------- XxlJobScheduler ----------------------
32
-
33
-    private XxlJobScheduler xxlJobScheduler;
34
-
35
-    @Override
36
-    public void afterPropertiesSet() throws Exception {
37
-        adminConfig = this;
38
-
39
-        xxlJobScheduler = new XxlJobScheduler();
40
-        xxlJobScheduler.init();
41
-    }
42 12
 
43
-    @Override
44
-    public void destroy() throws Exception {
45
-        xxlJobScheduler.destroy();
46
-    }
47
-
48
-
49
-    // ---------------------- XxlJobScheduler ----------------------
13
+@Data
14
+@Configuration
15
+@Component
16
+public class XxlJobAdminConfig {
50 17
 
51
-    // conf
52 18
     @Value("${xxl.job.i18n}")
53 19
     private String i18n;
54 20
 
55
-    @Value("${xxl.job.accessToken}")
56
-    private String accessToken;
57
-
58
-    @Value("${spring.mail.username}")
59
-    private String emailUserName;
60
-
61 21
     @Value("${xxl.job.triggerpool.fast.max}")
62 22
     private int triggerPoolFastMax;
63 23
 
@@ -65,39 +25,7 @@ public class XxlJobAdminConfig implements InitializingBean, DisposableBean {
65 25
     private int triggerPoolSlowMax;
66 26
 
67 27
     @Value("${xxl.job.logretentiondays}")
68
-    private int logretentiondays;
69
-
70
-    // dao, service
71
-
72
-    @Resource
73
-    private XxlJobLogDao xxlJobLogDao;
74
-    @Resource
75
-    private XxlJobInfoDao xxlJobInfoDao;
76
-    @Resource
77
-    private XxlJobRegistryDao xxlJobRegistryDao;
78
-    @Resource
79
-    private XxlJobGroupDao xxlJobGroupDao;
80
-    @Resource
81
-    private XxlJobLogReportDao xxlJobLogReportDao;
82
-    @Resource
83
-    private JavaMailSender mailSender;
84
-    @Resource
85
-    private DataSource dataSource;
86
-    @Resource
87
-    private RestTemplate restTemplate;
88
-
89
-
90
-    public String getI18n() {
91
-        return i18n;
92
-    }
93
-
94
-    public String getAccessToken() {
95
-        return accessToken;
96
-    }
97
-
98
-    public String getEmailUserName() {
99
-        return emailUserName;
100
-    }
28
+    private int logRetentionDays;
101 29
 
102 30
     public int getTriggerPoolFastMax() {
103 31
         if (triggerPoolFastMax < 200) {
@@ -113,42 +41,11 @@ public class XxlJobAdminConfig implements InitializingBean, DisposableBean {
113 41
         return triggerPoolSlowMax;
114 42
     }
115 43
 
116
-    public int getLogretentiondays() {
117
-        if (logretentiondays < 7) {
118
-            return -1;  // Limit greater than or equal to 7, otherwise close
44
+    public int getLogRetentionDays() {
45
+        if (logRetentionDays < 7) {
46
+            // Limit greater than or equal to 7, otherwise close
47
+            return -1;
119 48
         }
120
-        return logretentiondays;
121
-    }
122
-
123
-    public XxlJobLogDao getXxlJobLogDao() {
124
-        return xxlJobLogDao;
125
-    }
126
-
127
-    public XxlJobInfoDao getXxlJobInfoDao() {
128
-        return xxlJobInfoDao;
129
-    }
130
-
131
-    public XxlJobRegistryDao getXxlJobRegistryDao() {
132
-        return xxlJobRegistryDao;
133
-    }
134
-
135
-    public XxlJobGroupDao getXxlJobGroupDao() {
136
-        return xxlJobGroupDao;
137
-    }
138
-
139
-    public XxlJobLogReportDao getXxlJobLogReportDao() {
140
-        return xxlJobLogReportDao;
141
-    }
142
-
143
-    public JavaMailSender getMailSender() {
144
-        return mailSender;
145
-    }
146
-
147
-    public DataSource getDataSource() {
148
-        return dataSource;
149
-    }
150
-
151
-    public RestTemplate getRestTemplate() {
152
-        return restTemplate;
49
+        return logRetentionDays;
153 50
     }
154 51
 }

+ 14 - 1
xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/ExecutorRouter.java Voir le fichier

@@ -1,18 +1,31 @@
1 1
 package com.xxl.job.admin.core.route;
2 2
 
3
+import com.xxl.job.admin.core.scheduler.XxlJobScheduler;
3 4
 import com.xxl.job.core.biz.model.ReturnT;
4 5
 import com.xxl.job.core.biz.model.TriggerParam;
5 6
 import org.slf4j.Logger;
6 7
 import org.slf4j.LoggerFactory;
8
+import org.springframework.beans.BeansException;
9
+import org.springframework.context.ApplicationContext;
10
+import org.springframework.context.ApplicationContextAware;
7 11
 
8 12
 import java.util.List;
9 13
 
10 14
 /**
11 15
  * Created by xuxueli on 17/3/10.
12 16
  */
13
-public abstract class ExecutorRouter {
17
+public abstract class ExecutorRouter implements ApplicationContextAware {
14 18
     protected static Logger logger = LoggerFactory.getLogger(ExecutorRouter.class);
15 19
 
20
+
21
+    protected XxlJobScheduler xxlJobScheduler;
22
+
23
+
24
+    @Override
25
+    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
26
+        xxlJobScheduler = applicationContext.getBean(XxlJobScheduler.class);
27
+    }
28
+
16 29
     /**
17 30
      * route address
18 31
      *

+ 2 - 3
xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteBusyover.java Voir le fichier

@@ -1,7 +1,6 @@
1 1
 package com.xxl.job.admin.core.route.strategy;
2 2
 
3 3
 import com.xxl.job.admin.core.route.ExecutorRouter;
4
-import com.xxl.job.admin.core.scheduler.XxlJobScheduler;
5 4
 import com.xxl.job.admin.core.util.I18nUtil;
6 5
 import com.xxl.job.core.biz.ExecutorBiz;
7 6
 import com.xxl.job.core.biz.model.ReturnT;
@@ -21,14 +20,14 @@ public class ExecutorRouteBusyover extends ExecutorRouter {
21 20
             // beat
22 21
             ReturnT<String> idleBeatResult = null;
23 22
             try {
24
-                ExecutorBiz executorBiz = XxlJobScheduler.getExecutorBiz(address);
23
+                ExecutorBiz executorBiz = xxlJobScheduler.getExecutorBiz(address);
25 24
                 idleBeatResult = executorBiz.idleBeat(triggerParam.getJobId());
26 25
             } catch (Exception e) {
27 26
                 logger.error(e.getMessage(), e);
28 27
                 idleBeatResult = new ReturnT<String>(ReturnT.FAIL_CODE, "" + e);
29 28
             }
30 29
             idleBeatResultSB.append((idleBeatResultSB.length() > 0) ? "<br><br>" : "")
31
-                    .append(I18nUtil.getString("jobconf_idleBeat") + ":")
30
+                    .append(I18nUtil.getString("jobconf_idleBeat")).append(":")
32 31
                     .append("<br>address:").append(address)
33 32
                     .append("<br>code:").append(idleBeatResult.getCode())
34 33
                     .append("<br>msg:").append(idleBeatResult.getMsg());

+ 1 - 2
xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteFailover.java Voir le fichier

@@ -1,7 +1,6 @@
1 1
 package com.xxl.job.admin.core.route.strategy;
2 2
 
3 3
 import com.xxl.job.admin.core.route.ExecutorRouter;
4
-import com.xxl.job.admin.core.scheduler.XxlJobScheduler;
5 4
 import com.xxl.job.admin.core.util.I18nUtil;
6 5
 import com.xxl.job.core.biz.ExecutorBiz;
7 6
 import com.xxl.job.core.biz.model.ReturnT;
@@ -22,7 +21,7 @@ public class ExecutorRouteFailover extends ExecutorRouter {
22 21
             // beat
23 22
             ReturnT<String> beatResult = null;
24 23
             try {
25
-                ExecutorBiz executorBiz = XxlJobScheduler.getExecutorBiz(address);
24
+                ExecutorBiz executorBiz = xxlJobScheduler.getExecutorBiz(address);
26 25
                 beatResult = executorBiz.beat();
27 26
             } catch (Exception e) {
28 27
                 logger.error(e.getMessage(), e);

+ 18 - 49
xxl-job-admin/src/main/java/com/xxl/job/admin/core/scheduler/XxlJobScheduler.java Voir le fichier

@@ -1,7 +1,5 @@
1 1
 package com.xxl.job.admin.core.scheduler;
2 2
 
3
-import com.xxl.job.admin.core.conf.XxlJobAdminConfig;
4
-import com.xxl.job.admin.core.thread.*;
5 3
 import com.xxl.job.admin.core.util.I18nUtil;
6 4
 import com.xxl.job.core.biz.ExecutorBiz;
7 5
 import com.xxl.job.core.enums.ExecutorBlockStrategyEnum;
@@ -12,7 +10,11 @@ import com.xxl.rpc.remoting.net.impl.netty_http.client.NettyHttpClient;
12 10
 import com.xxl.rpc.serialize.impl.HessianSerializer;
13 11
 import org.slf4j.Logger;
14 12
 import org.slf4j.LoggerFactory;
13
+import org.springframework.beans.factory.InitializingBean;
14
+import org.springframework.beans.factory.annotation.Value;
15
+import org.springframework.stereotype.Component;
15 16
 
17
+import javax.annotation.PostConstruct;
16 18
 import java.util.concurrent.ConcurrentHashMap;
17 19
 import java.util.concurrent.ConcurrentMap;
18 20
 
@@ -20,54 +22,17 @@ import java.util.concurrent.ConcurrentMap;
20 22
  * @author xuxueli 2018-10-28 00:18:17
21 23
  */
22 24
 
23
-public class XxlJobScheduler {
25
+@Component
26
+public class XxlJobScheduler implements InitializingBean {
24 27
     private static final Logger logger = LoggerFactory.getLogger(XxlJobScheduler.class);
25 28
 
29
+    @Value("${xxl.job.accessToken}")
30
+    private String accessToken;
26 31
 
27
-    public void init() throws Exception {
28
-        // init i18n
29
-        initI18n();
30
-
31
-        // admin registry monitor run
32
-        JobRegistryMonitorHelper.getInstance().start();
33
-
34
-        // admin monitor run
35
-        JobFailMonitorHelper.getInstance().start();
36
-
37
-        // admin trigger pool start
38
-        JobTriggerPoolHelper.toStart();
39
-
40
-        // admin log report start
41
-        JobLogReportHelper.getInstance().start();
42
-
43
-        // start-schedule
44
-        JobScheduleHelper.getInstance().start();
45
-
46
-        logger.info(">>>>>>>>> init xxl-job admin success.");
47
-    }
48
-
49
-
50
-    public void destroy() throws Exception {
51
-
52
-        // stop-schedule
53
-        JobScheduleHelper.getInstance().toStop();
54
-
55
-        // admin log report stop
56
-        JobLogReportHelper.getInstance().toStop();
57
-
58
-        // admin trigger pool stop
59
-        JobTriggerPoolHelper.toStop();
60
-
61
-        // admin monitor stop
62
-        JobFailMonitorHelper.getInstance().toStop();
63
-
64
-        // admin registry stop
65
-        JobRegistryMonitorHelper.getInstance().toStop();
66
-
67
-    }
68
-
69
-    // ---------------------- I18n ----------------------
70
-
32
+    /**
33
+     * I18n
34
+     */
35
+    @PostConstruct
71 36
     private void initI18n() {
72 37
         for (ExecutorBlockStrategyEnum item : ExecutorBlockStrategyEnum.values()) {
73 38
             item.setTitle(I18nUtil.getString("jobconf_block_".concat(item.name())));
@@ -77,7 +42,7 @@ public class XxlJobScheduler {
77 42
     // ---------------------- executor-client ----------------------
78 43
     private static ConcurrentMap<String, ExecutorBiz> executorBizRepository = new ConcurrentHashMap<String, ExecutorBiz>();
79 44
 
80
-    public static ExecutorBiz getExecutorBiz(String address) throws Exception {
45
+    public ExecutorBiz getExecutorBiz(String address) throws Exception {
81 46
         // valid
82 47
         if (address == null || address.trim().length() == 0) {
83 48
             return null;
@@ -100,7 +65,7 @@ public class XxlJobScheduler {
100 65
         referenceBean.setVersion(null);
101 66
         referenceBean.setTimeout(3000);
102 67
         referenceBean.setAddress(address);
103
-        referenceBean.setAccessToken(XxlJobAdminConfig.getAdminConfig().getAccessToken());
68
+        referenceBean.setAccessToken(accessToken);
104 69
         referenceBean.setInvokeCallback(null);
105 70
         referenceBean.setInvokerFactory(null);
106 71
 
@@ -110,4 +75,8 @@ public class XxlJobScheduler {
110 75
         return executorBiz;
111 76
     }
112 77
 
78
+    @Override
79
+    public void afterPropertiesSet() throws Exception {
80
+
81
+    }
113 82
 }

+ 35 - 172
xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobFailMonitorHelper.java Voir le fichier

@@ -1,21 +1,19 @@
1 1
 package com.xxl.job.admin.core.thread;
2 2
 
3
-import com.xxl.job.admin.core.conf.XxlJobAdminConfig;
4
-import com.xxl.job.admin.core.model.XxlJobGroup;
5 3
 import com.xxl.job.admin.core.model.XxlJobInfo;
6 4
 import com.xxl.job.admin.core.model.XxlJobLog;
7 5
 import com.xxl.job.admin.core.trigger.TriggerTypeEnum;
8 6
 import com.xxl.job.admin.core.util.I18nUtil;
9
-import com.xxl.job.core.biz.model.ReturnT;
7
+import com.xxl.job.admin.dao.XxlJobInfoDao;
8
+import com.xxl.job.admin.dao.XxlJobLogDao;
9
+import com.xxl.job.admin.service.AlarmService;
10 10
 import org.slf4j.Logger;
11 11
 import org.slf4j.LoggerFactory;
12
-import org.springframework.mail.javamail.MimeMessageHelper;
13
-import org.springframework.web.client.RestTemplate;
12
+import org.springframework.stereotype.Component;
14 13
 
15
-import javax.mail.internet.MimeMessage;
16
-import java.text.MessageFormat;
17
-import java.text.SimpleDateFormat;
18
-import java.util.*;
14
+import javax.annotation.PostConstruct;
15
+import javax.annotation.PreDestroy;
16
+import java.util.List;
19 17
 import java.util.concurrent.TimeUnit;
20 18
 
21 19
 /**
@@ -23,20 +21,33 @@ import java.util.concurrent.TimeUnit;
23 21
  *
24 22
  * @author xuxueli 2015-9-1 18:05:56
25 23
  */
24
+@Component
26 25
 public class JobFailMonitorHelper {
27 26
     private static Logger logger = LoggerFactory.getLogger(JobFailMonitorHelper.class);
28 27
 
29
-    private static JobFailMonitorHelper instance = new JobFailMonitorHelper();
30
-
31
-    public static JobFailMonitorHelper getInstance() {
32
-        return instance;
33
-    }
34
-
35 28
     // ---------------------- monitor ----------------------
36 29
 
37 30
     private Thread monitorThread;
38 31
     private volatile boolean toStop = false;
39 32
 
33
+
34
+    private final JobTriggerPoolHelper jobTriggerPoolHelper;
35
+    private final AlarmService alarmService;
36
+    private final XxlJobInfoDao xxlJobInfoDao;
37
+    private final XxlJobLogDao xxlJobLogDao;
38
+
39
+    public JobFailMonitorHelper(JobTriggerPoolHelper jobTriggerPoolHelper, XxlJobLogDao xxlJobLogDao, AlarmService alarmService, XxlJobInfoDao xxlJobInfoDao) {
40
+        this.jobTriggerPoolHelper = jobTriggerPoolHelper;
41
+        this.xxlJobLogDao = xxlJobLogDao;
42
+        this.alarmService = alarmService;
43
+        this.xxlJobInfoDao = xxlJobInfoDao;
44
+    }
45
+
46
+
47
+    /**
48
+     * admin monitor run
49
+     */
50
+    @PostConstruct
40 51
     public void start() {
41 52
         monitorThread = new Thread(new Runnable() {
42 53
 
@@ -47,24 +58,24 @@ public class JobFailMonitorHelper {
47 58
                 while (!toStop) {
48 59
                     try {
49 60
 
50
-                        List<Long> failLogIds = XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().findFailJobLogIds(1000);
61
+                        List<Long> failLogIds = xxlJobLogDao.findFailJobLogIds(1000);
51 62
                         if (failLogIds != null && !failLogIds.isEmpty()) {
52 63
                             for (long failLogId : failLogIds) {
53 64
 
54 65
                                 // lock log
55
-                                int lockRet = XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().updateAlarmStatus(failLogId, 0, -1);
66
+                                int lockRet = xxlJobLogDao.updateAlarmStatus(failLogId, 0, -1);
56 67
                                 if (lockRet < 1) {
57 68
                                     continue;
58 69
                                 }
59
-                                XxlJobLog log = XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().load(failLogId);
60
-                                XxlJobInfo info = XxlJobAdminConfig.getAdminConfig().getXxlJobInfoDao().loadById(log.getJobId());
70
+                                XxlJobLog log = xxlJobLogDao.load(failLogId);
71
+                                XxlJobInfo info = xxlJobInfoDao.loadById(log.getJobId());
61 72
 
62 73
                                 // 1、fail retry monitor
63 74
                                 if (log.getExecutorFailRetryCount() > 0) {
64
-                                    JobTriggerPoolHelper.trigger(log.getJobId(), TriggerTypeEnum.RETRY, (log.getExecutorFailRetryCount() - 1), log.getExecutorShardingParam(), log.getExecutorParam());
75
+                                    jobTriggerPoolHelper.trigger(log.getJobId(), TriggerTypeEnum.RETRY, (log.getExecutorFailRetryCount() - 1), log.getExecutorShardingParam(), log.getExecutorParam());
65 76
                                     String retryMsg = "<br><br><span style=\"color:#F39C12;\" > >>>>>>>>>>>" + I18nUtil.getString("jobconf_trigger_type_retry") + "<<<<<<<<<<< </span><br>";
66 77
                                     log.setTriggerMsg(log.getTriggerMsg() + retryMsg);
67
-                                    XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().updateTriggerInfo(log);
78
+                                    xxlJobLogDao.updateTriggerInfo(log);
68 79
                                 }
69 80
 
70 81
                                 // 2、fail alarm monitor
@@ -82,7 +93,7 @@ public class JobFailMonitorHelper {
82 93
                                     newAlarmStatus = 1;
83 94
                                 }
84 95
 
85
-                                XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().updateAlarmStatus(failLogId, -1, newAlarmStatus);
96
+                                xxlJobLogDao.updateAlarmStatus(failLogId, -1, newAlarmStatus);
86 97
                             }
87 98
                         }
88 99
 
@@ -111,6 +122,7 @@ public class JobFailMonitorHelper {
111 122
         monitorThread.start();
112 123
     }
113 124
 
125
+    @PreDestroy
114 126
     public void toStop() {
115 127
         toStop = true;
116 128
         // interrupt and wait
@@ -133,156 +145,7 @@ public class JobFailMonitorHelper {
133 145
         if (info == null || info.getAlarmEmail() == null || info.getAlarmEmail().trim().length() == 0) {
134 146
             return false;
135 147
         }
136
-        boolean alarmResult = true;
137
-
138
-        // email info
139
-        XxlJobGroup group = XxlJobAdminConfig.getAdminConfig().getXxlJobGroupDao().load(info.getJobGroup());
140
-        String personal = I18nUtil.getString("admin_name_full");
141
-        String title = I18nUtil.getString("jobconf_monitor");
142
-
143
-        Set<String> alarmAddressSet = new HashSet<String>(Arrays.asList(info.getAlarmEmail().split(",")));
144
-
145
-        for (String email : alarmAddressSet) {
146
-            try {
147
-                email = email.trim();
148
-                if (email.startsWith("http://") || email.startsWith("https://")) {
149
-                    final String content = textContent(group, info, jobLog, personal);
150
-                    alarmResult = failAlarmHttp(email, title, content, jobLog.getId());
151
-                } else if (email.startsWith("sms://")) {
152
-                    // sms 短信
153
-                } else {
154
-                    String content = emailContent(group, info, jobLog);
155
-                    alarmResult = failAlarmEmail(email, title, content, jobLog.getId(), personal);
156
-                }
157
-            } catch (Exception e) {
158
-                alarmResult = false;
159
-            }
160
-        }
161
-
162
-
163
-        // do something, custom alarm strategy, such as sms
164
-
165
-        return alarmResult;
148
+        return alarmService.alarmNotify(info, jobLog);
166 149
     }
167 150
 
168
-    // ---------------------- email alarm ----------------------
169
-
170
-    // email alarm template
171
-    private static final String mailBodyTemplate = "<h5>" + I18nUtil.getString("jobconf_monitor_detail") + ":</span>" +
172
-            "<table border=\"1\" cellpadding=\"3\" style=\"border-collapse:collapse; width:80%;\" >\n" +
173
-            "   <thead style=\"font-weight: bold;color: #ffffff;background-color: #ff8c00;\" >" +
174
-            "      <tr>\n" +
175
-            "         <td width=\"20%\" >" + I18nUtil.getString("jobinfo_field_jobgroup") + "</td>\n" +
176
-            "         <td width=\"10%\" >" + I18nUtil.getString("jobinfo_field_id") + "</td>\n" +
177
-            "         <td width=\"20%\" >" + I18nUtil.getString("jobinfo_field_jobdesc") + "</td>\n" +
178
-            "         <td width=\"10%\" >" + I18nUtil.getString("jobconf_monitor_alarm_title") + "</td>\n" +
179
-            "         <td width=\"40%\" >" + I18nUtil.getString("jobconf_monitor_alarm_content") + "</td>\n" +
180
-            "      </tr>\n" +
181
-            "   </thead>\n" +
182
-            "   <tbody>\n" +
183
-            "      <tr>\n" +
184
-            "         <td>{0}</td>\n" +
185
-            "         <td>{1}</td>\n" +
186
-            "         <td>{2}</td>\n" +
187
-            "         <td>" + I18nUtil.getString("jobconf_monitor_alarm_type") + "</td>\n" +
188
-            "         <td>{3}</td>\n" +
189
-            "      </tr>\n" +
190
-            "   </tbody>\n" +
191
-            "</table>";
192
-
193
-    private String emailContent(XxlJobGroup group, XxlJobInfo info, XxlJobLog jobLog) {
194
-        // alarmContent
195
-        String alarmContent = "Alarm Job LogId=" + jobLog.getId();
196
-        if (jobLog.getTriggerCode() != ReturnT.SUCCESS_CODE) {
197
-            alarmContent += "<br>TriggerMsg=<br>" + jobLog.getTriggerMsg();
198
-        }
199
-        if (jobLog.getHandleCode() > 0 && jobLog.getHandleCode() != ReturnT.SUCCESS_CODE) {
200
-            alarmContent += "<br>HandleCode=" + jobLog.getHandleMsg();
201
-        }
202
-        return MessageFormat.format(mailBodyTemplate,
203
-                group != null ? group.getTitle() : "null",
204
-                info.getId(),
205
-                info.getJobDesc(),
206
-                alarmContent);
207
-    }
208
-
209
-    /**
210
-     * Email
211
-     *
212
-     * @param email
213
-     * @param title
214
-     * @param content
215
-     * @param jobLogId for error
216
-     * @return
217
-     */
218
-    private boolean failAlarmEmail(String email, String title, String content, Long jobLogId, String personal) throws Exception {
219
-        // make mail
220
-        try {
221
-            MimeMessage mimeMessage = XxlJobAdminConfig.getAdminConfig().getMailSender().createMimeMessage();
222
-            MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
223
-            helper.setFrom(XxlJobAdminConfig.getAdminConfig().getEmailUserName(), personal);
224
-            helper.setTo(email);
225
-            helper.setSubject(title);
226
-            helper.setText(content, true);
227
-            XxlJobAdminConfig.getAdminConfig().getMailSender().send(mimeMessage);
228
-            return true;
229
-        } catch (Exception e) {
230
-            logger.error(">>>>>>>>>>> xxl-job, job fail alarm email send error, JobLogId:{}", jobLogId, e);
231
-            throw e;
232
-        }
233
-    }
234
-
235
-    private static final String TEXT_TEMPLATE = "{0} \n\n" +
236
-            I18nUtil.getString("jobconf_monitor_detail") + ": \n\n" +
237
-            I18nUtil.getString("jobinfo_field_jobgroup") + " : {1}" + " \n\n" +
238
-            I18nUtil.getString("jobinfo_field_id") + " : {2}" + " \n\n" +
239
-            I18nUtil.getString("jobinfo_field_jobdesc") + " : {3}" + " \n\n" +
240
-            I18nUtil.getString("jobconf_monitor_alarm_title") + " : " + I18nUtil.getString("jobconf_monitor_alarm_type") + " \n\n" +
241
-            I18nUtil.getString("jobconf_monitor_alarm_content") + " : {4}" + " \n\n";
242
-
243
-
244
-    private String textContent(XxlJobGroup group, XxlJobInfo info, XxlJobLog jobLog, String personal) {
245
-        // alarmContent
246
-        String alarmContent = "Alarm Job LogId=" + jobLog.getId() + ".";
247
-        if (jobLog.getTriggerCode() != ReturnT.SUCCESS_CODE) {
248
-            alarmContent += "TriggerMsg=" + jobLog.getTriggerMsg() + ".";
249
-        }
250
-        if (jobLog.getHandleCode() > 0 && jobLog.getHandleCode() != ReturnT.SUCCESS_CODE) {
251
-            alarmContent += "HandleCode=" + jobLog.getHandleMsg() + ".";
252
-        }
253
-        return MessageFormat.format(TEXT_TEMPLATE,
254
-                personal,
255
-                group != null ? group.getTitle() : "null",
256
-                info.getId(),
257
-                info.getJobDesc(),
258
-                alarmContent);
259
-    }
260
-
261
-    /**
262
-     * todo only support ftqq
263
-     *
264
-     * @param url
265
-     * @param title
266
-     * @param content
267
-     * @param jobLogId
268
-     * @return
269
-     * @throws Exception
270
-     */
271
-    private boolean failAlarmHttp(String url, String title, String content, Long jobLogId) throws Exception {
272
-
273
-        try {
274
-            final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
275
-            final String format = simpleDateFormat.format(new Date());
276
-            title = title + "[" + format + "]";
277
-            final RestTemplate restTemplate = XxlJobAdminConfig.getAdminConfig().getRestTemplate();
278
-            final String forObject = restTemplate.getForObject(url, String.class, title, content);
279
-            logger.debug(">>>>>>>>>>> xxl-job, job result:{}, JobLogId:{}", forObject, jobLogId);
280
-            return true;
281
-        } catch (Exception e) {
282
-            logger.error(">>>>>>>>>>> xxl-job, job fail alarm http send error, JobLogId:{}", jobLogId, e);
283
-            throw e;
284
-        }
285
-    }
286
-
287
-
288 151
 }

+ 29 - 14
xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobLogReportHelper.java Voir le fichier

@@ -2,9 +2,14 @@ package com.xxl.job.admin.core.thread;
2 2
 
3 3
 import com.xxl.job.admin.core.conf.XxlJobAdminConfig;
4 4
 import com.xxl.job.admin.core.model.XxlJobLogReport;
5
+import com.xxl.job.admin.dao.XxlJobLogDao;
6
+import com.xxl.job.admin.dao.XxlJobLogReportDao;
5 7
 import org.slf4j.Logger;
6 8
 import org.slf4j.LoggerFactory;
9
+import org.springframework.stereotype.Component;
7 10
 
11
+import javax.annotation.PostConstruct;
12
+import javax.annotation.PreDestroy;
8 13
 import java.util.Calendar;
9 14
 import java.util.Date;
10 15
 import java.util.List;
@@ -16,19 +21,29 @@ import java.util.concurrent.TimeUnit;
16 21
  *
17 22
  * @author xuxueli 2019-11-22
18 23
  */
24
+@Component
19 25
 public class JobLogReportHelper {
20 26
     private static Logger logger = LoggerFactory.getLogger(JobLogReportHelper.class);
21 27
 
22
-    private static JobLogReportHelper instance = new JobLogReportHelper();
23
-
24
-    public static JobLogReportHelper getInstance() {
25
-        return instance;
26
-    }
27
-
28 28
 
29 29
     private Thread logrThread;
30 30
     private volatile boolean toStop = false;
31 31
 
32
+    private final XxlJobLogDao xxlJobLogDao;
33
+    private final XxlJobLogReportDao xxlJobLogReportDao;
34
+    private final XxlJobAdminConfig xxlJobAdminConfig;
35
+
36
+
37
+    public JobLogReportHelper(XxlJobLogDao xxlJobLogDao, XxlJobLogReportDao xxlJobLogReportDao, XxlJobAdminConfig xxlJobAdminConfig) {
38
+        this.xxlJobLogDao = xxlJobLogDao;
39
+        this.xxlJobLogReportDao = xxlJobLogReportDao;
40
+        this.xxlJobAdminConfig = xxlJobAdminConfig;
41
+    }
42
+
43
+    /**
44
+     * admin log report start
45
+     */
46
+    @PostConstruct
32 47
     public void start() {
33 48
         logrThread = new Thread(new Runnable() {
34 49
 
@@ -70,7 +85,7 @@ public class JobLogReportHelper {
70 85
                             xxlJobLogReport.setSucCount(0);
71 86
                             xxlJobLogReport.setFailCount(0);
72 87
 
73
-                            Map<String, Object> triggerCountMap = XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().findLogReport(todayFrom, todayTo);
88
+                            Map<String, Object> triggerCountMap = xxlJobLogDao.findLogReport(todayFrom, todayTo);
74 89
                             if (triggerCountMap != null && triggerCountMap.size() > 0) {
75 90
                                 int triggerDayCount = triggerCountMap.containsKey("triggerDayCount") ? Integer.valueOf(String.valueOf(triggerCountMap.get("triggerDayCount"))) : 0;
76 91
                                 int triggerDayCountRunning = triggerCountMap.containsKey("triggerDayCountRunning") ? Integer.valueOf(String.valueOf(triggerCountMap.get("triggerDayCountRunning"))) : 0;
@@ -83,9 +98,9 @@ public class JobLogReportHelper {
83 98
                             }
84 99
 
85 100
                             // do refresh
86
-                            int ret = XxlJobAdminConfig.getAdminConfig().getXxlJobLogReportDao().update(xxlJobLogReport);
101
+                            int ret = xxlJobLogReportDao.update(xxlJobLogReport);
87 102
                             if (ret < 1) {
88
-                                XxlJobAdminConfig.getAdminConfig().getXxlJobLogReportDao().save(xxlJobLogReport);
103
+                                xxlJobLogReportDao.save(xxlJobLogReport);
89 104
                             }
90 105
                         }
91 106
 
@@ -96,12 +111,11 @@ public class JobLogReportHelper {
96 111
                     }
97 112
 
98 113
                     // 2、log-clean: switch open & once each day
99
-                    if (XxlJobAdminConfig.getAdminConfig().getLogretentiondays() > 0
100
-                            && System.currentTimeMillis() - lastCleanLogTime > 24 * 60 * 60 * 1000) {
114
+                    if (xxlJobAdminConfig.getLogRetentionDays() > 0 && System.currentTimeMillis() - lastCleanLogTime > 24 * 60 * 60 * 1000) {
101 115
 
102 116
                         // expire-time
103 117
                         Calendar expiredDay = Calendar.getInstance();
104
-                        expiredDay.add(Calendar.DAY_OF_MONTH, -1 * XxlJobAdminConfig.getAdminConfig().getLogretentiondays());
118
+                        expiredDay.add(Calendar.DAY_OF_MONTH, -1 * xxlJobAdminConfig.getLogRetentionDays());
105 119
                         expiredDay.set(Calendar.HOUR_OF_DAY, 0);
106 120
                         expiredDay.set(Calendar.MINUTE, 0);
107 121
                         expiredDay.set(Calendar.SECOND, 0);
@@ -111,9 +125,9 @@ public class JobLogReportHelper {
111 125
                         // clean expired log
112 126
                         List<Long> logIds = null;
113 127
                         do {
114
-                            logIds = XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().findClearLogIds(0, 0, clearBeforeTime, 0, 1000);
128
+                            logIds = xxlJobLogDao.findClearLogIds(0, 0, clearBeforeTime, 0, 1000);
115 129
                             if (logIds != null && logIds.size() > 0) {
116
-                                XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().clearLog(logIds);
130
+                                xxlJobLogDao.clearLog(logIds);
117 131
                             }
118 132
                         } while (logIds != null && logIds.size() > 0);
119 133
 
@@ -140,6 +154,7 @@ public class JobLogReportHelper {
140 154
         logrThread.start();
141 155
     }
142 156
 
157
+    @PreDestroy
143 158
     public void toStop() {
144 159
         toStop = true;
145 160
         // interrupt and wait

+ 27 - 11
xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryMonitorHelper.java Voir le fichier

@@ -1,12 +1,16 @@
1 1
 package com.xxl.job.admin.core.thread;
2 2
 
3
-import com.xxl.job.admin.core.conf.XxlJobAdminConfig;
4 3
 import com.xxl.job.admin.core.model.XxlJobGroup;
5 4
 import com.xxl.job.admin.core.model.XxlJobRegistry;
5
+import com.xxl.job.admin.dao.XxlJobGroupDao;
6
+import com.xxl.job.admin.dao.XxlJobRegistryDao;
6 7
 import com.xxl.job.core.enums.RegistryConfig;
7 8
 import org.slf4j.Logger;
8 9
 import org.slf4j.LoggerFactory;
10
+import org.springframework.stereotype.Component;
9 11
 
12
+import javax.annotation.PostConstruct;
13
+import javax.annotation.PreDestroy;
10 14
 import java.util.*;
11 15
 import java.util.concurrent.TimeUnit;
12 16
 
@@ -15,18 +19,28 @@ import java.util.concurrent.TimeUnit;
15 19
  *
16 20
  * @author xuxueli 2016-10-02 19:10:24
17 21
  */
22
+
23
+@Component
18 24
 public class JobRegistryMonitorHelper {
19 25
     private static Logger logger = LoggerFactory.getLogger(JobRegistryMonitorHelper.class);
20 26
 
21
-    private static JobRegistryMonitorHelper instance = new JobRegistryMonitorHelper();
22
-
23
-    public static JobRegistryMonitorHelper getInstance() {
24
-        return instance;
25
-    }
26 27
 
27 28
     private Thread registryThread;
28 29
     private volatile boolean toStop = false;
29 30
 
31
+
32
+    private final XxlJobGroupDao xxlJobGroupDao;
33
+    private final XxlJobRegistryDao xxlJobRegistryDao;
34
+
35
+    public JobRegistryMonitorHelper(XxlJobGroupDao xxlJobGroupDao, XxlJobRegistryDao xxlJobRegistryDao) {
36
+        this.xxlJobGroupDao = xxlJobGroupDao;
37
+        this.xxlJobRegistryDao = xxlJobRegistryDao;
38
+    }
39
+
40
+    /**
41
+     * admin registry monitor run
42
+     */
43
+    @PostConstruct
30 44
     public void start() {
31 45
         registryThread = new Thread(new Runnable() {
32 46
             @Override
@@ -34,18 +48,18 @@ public class JobRegistryMonitorHelper {
34 48
                 while (!toStop) {
35 49
                     try {
36 50
                         // auto registry group
37
-                        List<XxlJobGroup> groupList = XxlJobAdminConfig.getAdminConfig().getXxlJobGroupDao().findByAddressType(0);
51
+                        List<XxlJobGroup> groupList = xxlJobGroupDao.findByAddressType(0);
38 52
                         if (groupList != null && !groupList.isEmpty()) {
39 53
 
40 54
                             // remove dead address (admin/executor)
41
-                            List<Integer> ids = XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().findDead(RegistryConfig.DEAD_TIMEOUT, new Date());
55
+                            List<Integer> ids = xxlJobRegistryDao.findDead(RegistryConfig.DEAD_TIMEOUT, new Date());
42 56
                             if (ids != null && ids.size() > 0) {
43
-                                XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().removeDead(ids);
57
+                                xxlJobRegistryDao.removeDead(ids);
44 58
                             }
45 59
 
46 60
                             // fresh online address (admin/executor)
47 61
                             HashMap<String, List<String>> appAddressMap = new HashMap<String, List<String>>();
48
-                            List<XxlJobRegistry> list = XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().findAll(RegistryConfig.DEAD_TIMEOUT, new Date());
62
+                            List<XxlJobRegistry> list = xxlJobRegistryDao.findAll(RegistryConfig.DEAD_TIMEOUT, new Date());
49 63
                             if (list != null) {
50 64
                                 for (XxlJobRegistry item : list) {
51 65
                                     if (RegistryConfig.RegistType.EXECUTOR.name().equals(item.getRegistryGroup())) {
@@ -76,7 +90,7 @@ public class JobRegistryMonitorHelper {
76 90
                                     addressListStr = addressListStr.substring(0, addressListStr.length() - 1);
77 91
                                 }
78 92
                                 group.setAddressList(addressListStr);
79
-                                XxlJobAdminConfig.getAdminConfig().getXxlJobGroupDao().update(group);
93
+                                xxlJobGroupDao.update(group);
80 94
                             }
81 95
                         }
82 96
                     } catch (Exception e) {
@@ -100,6 +114,8 @@ public class JobRegistryMonitorHelper {
100 114
         registryThread.start();
101 115
     }
102 116
 
117
+
118
+    @PreDestroy
103 119
     public void toStop() {
104 120
         toStop = true;
105 121
         // interrupt and wait

+ 31 - 12
xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobScheduleHelper.java Voir le fichier

@@ -4,9 +4,14 @@ import com.xxl.job.admin.core.conf.XxlJobAdminConfig;
4 4
 import com.xxl.job.admin.core.cron.CronExpression;
5 5
 import com.xxl.job.admin.core.model.XxlJobInfo;
6 6
 import com.xxl.job.admin.core.trigger.TriggerTypeEnum;
7
+import com.xxl.job.admin.dao.XxlJobInfoDao;
7 8
 import org.slf4j.Logger;
8 9
 import org.slf4j.LoggerFactory;
10
+import org.springframework.stereotype.Component;
9 11
 
12
+import javax.annotation.PostConstruct;
13
+import javax.annotation.PreDestroy;
14
+import javax.sql.DataSource;
10 15
 import java.sql.Connection;
11 16
 import java.sql.PreparedStatement;
12 17
 import java.sql.SQLException;
@@ -18,15 +23,11 @@ import java.util.concurrent.TimeUnit;
18 23
 /**
19 24
  * @author xuxueli 2019-05-21
20 25
  */
26
+
27
+@Component
21 28
 public class JobScheduleHelper {
22 29
     private static Logger logger = LoggerFactory.getLogger(JobScheduleHelper.class);
23 30
 
24
-    private static JobScheduleHelper instance = new JobScheduleHelper();
25
-
26
-    public static JobScheduleHelper getInstance() {
27
-        return instance;
28
-    }
29
-
30 31
     public static final long PRE_READ_MS = 5000;    // pre read
31 32
 
32 33
     private Thread scheduleThread;
@@ -35,6 +36,23 @@ public class JobScheduleHelper {
35 36
     private volatile boolean ringThreadToStop = false;
36 37
     private volatile static Map<Integer, List<Integer>> ringData = new ConcurrentHashMap<>();
37 38
 
39
+    private final JobTriggerPoolHelper jobTriggerPoolHelper;
40
+    private final XxlJobInfoDao xxlJobInfoDao;
41
+    private final DataSource dataSource;
42
+    private final XxlJobAdminConfig xxlJobAdminConfig;
43
+
44
+    public JobScheduleHelper(JobTriggerPoolHelper jobTriggerPoolHelper, XxlJobInfoDao xxlJobInfoDao, DataSource dataSource, XxlJobAdminConfig xxlJobAdminConfig) {
45
+        this.jobTriggerPoolHelper = jobTriggerPoolHelper;
46
+        this.xxlJobInfoDao = xxlJobInfoDao;
47
+        this.dataSource = dataSource;
48
+        this.xxlJobAdminConfig = xxlJobAdminConfig;
49
+    }
50
+
51
+
52
+    /**
53
+     * start-schedule
54
+     */
55
+    @PostConstruct
38 56
     public void start() {
39 57
 
40 58
         // schedule thread
@@ -52,7 +70,7 @@ public class JobScheduleHelper {
52 70
                 logger.info(">>>>>>>>> init xxl-job admin scheduler success.");
53 71
 
54 72
                 // pre-read count: treadpool-size * trigger-qps (each trigger cost 50ms, qps = 1000/50 = 20)
55
-                int preReadCount = (XxlJobAdminConfig.getAdminConfig().getTriggerPoolFastMax() + XxlJobAdminConfig.getAdminConfig().getTriggerPoolSlowMax()) * 20;
73
+                int preReadCount = (xxlJobAdminConfig.getTriggerPoolFastMax() + xxlJobAdminConfig.getTriggerPoolSlowMax()) * 20;
56 74
 
57 75
                 while (!scheduleThreadToStop) {
58 76
 
@@ -66,7 +84,7 @@ public class JobScheduleHelper {
66 84
                     boolean preReadSuc = true;
67 85
                     try {
68 86
 
69
-                        conn = XxlJobAdminConfig.getAdminConfig().getDataSource().getConnection();
87
+                        conn = dataSource.getConnection();
70 88
                         connAutoCommit = conn.getAutoCommit();
71 89
                         conn.setAutoCommit(false);
72 90
 
@@ -77,7 +95,7 @@ public class JobScheduleHelper {
77 95
 
78 96
                         // 1、pre read
79 97
                         long nowTime = System.currentTimeMillis();
80
-                        List<XxlJobInfo> scheduleList = XxlJobAdminConfig.getAdminConfig().getXxlJobInfoDao().scheduleJobQuery(nowTime + PRE_READ_MS, preReadCount);
98
+                        List<XxlJobInfo> scheduleList = xxlJobInfoDao.scheduleJobQuery(nowTime + PRE_READ_MS, preReadCount);
81 99
                         if (scheduleList != null && scheduleList.size() > 0) {
82 100
                             // 2、push time-ring
83 101
                             for (XxlJobInfo jobInfo : scheduleList) {
@@ -94,7 +112,7 @@ public class JobScheduleHelper {
94 112
                                     // 2.2、trigger-expire < 5s:direct-trigger && make next-trigger-time
95 113
 
96 114
                                     // 1、trigger
97
-                                    JobTriggerPoolHelper.trigger(jobInfo.getId(), TriggerTypeEnum.CRON, -1, null, null);
115
+                                    jobTriggerPoolHelper.trigger(jobInfo.getId(), TriggerTypeEnum.CRON, -1, null, null);
98 116
                                     logger.debug(">>>>>>>>>>> xxl-job, schedule push trigger : jobId = " + jobInfo.getId());
99 117
 
100 118
                                     // 2、fresh next
@@ -132,7 +150,7 @@ public class JobScheduleHelper {
132 150
 
133 151
                             // 3、update trigger info
134 152
                             for (XxlJobInfo jobInfo : scheduleList) {
135
-                                XxlJobAdminConfig.getAdminConfig().getXxlJobInfoDao().scheduleUpdate(jobInfo);
153
+                                xxlJobInfoDao.scheduleUpdate(jobInfo);
136 154
                             }
137 155
 
138 156
                         } else {
@@ -242,7 +260,7 @@ public class JobScheduleHelper {
242 260
                             // do trigger
243 261
                             for (int jobId : ringItemData) {
244 262
                                 // do trigger
245
-                                JobTriggerPoolHelper.trigger(jobId, TriggerTypeEnum.CRON, -1, null, null);
263
+                                jobTriggerPoolHelper.trigger(jobId, TriggerTypeEnum.CRON, -1, null, null);
246 264
                             }
247 265
                             // clear
248 266
                             ringItemData.clear();
@@ -294,6 +312,7 @@ public class JobScheduleHelper {
294 312
         logger.debug(">>>>>>>>>>> xxl-job, schedule push time-ring : " + ringSecond + " = " + Arrays.asList(ringItemData));
295 313
     }
296 314
 
315
+    @PreDestroy
297 316
     public void toStop() {
298 317
 
299 318
         // 1、stop schedule

+ 25 - 17
xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobTriggerPoolHelper.java Voir le fichier

@@ -5,7 +5,10 @@ import com.xxl.job.admin.core.trigger.TriggerTypeEnum;
5 5
 import com.xxl.job.admin.core.trigger.XxlJobTrigger;
6 6
 import org.slf4j.Logger;
7 7
 import org.slf4j.LoggerFactory;
8
+import org.springframework.stereotype.Component;
8 9
 
10
+import javax.annotation.PostConstruct;
11
+import javax.annotation.PreDestroy;
9 12
 import java.util.concurrent.*;
10 13
 import java.util.concurrent.atomic.AtomicInteger;
11 14
 
@@ -14,6 +17,8 @@ import java.util.concurrent.atomic.AtomicInteger;
14 17
  *
15 18
  * @author xuxueli 2018-07-03 21:08:07
16 19
  */
20
+
21
+@Component
17 22
 public class JobTriggerPoolHelper {
18 23
     private static Logger logger = LoggerFactory.getLogger(JobTriggerPoolHelper.class);
19 24
 
@@ -24,10 +29,24 @@ public class JobTriggerPoolHelper {
24 29
     private ThreadPoolExecutor fastTriggerPool = null;
25 30
     private ThreadPoolExecutor slowTriggerPool = null;
26 31
 
32
+
33
+    private final XxlJobTrigger xxlJobTrigger;
34
+    private final XxlJobAdminConfig xxlJobAdminConfig;
35
+
36
+    public JobTriggerPoolHelper(XxlJobTrigger xxlJobTrigger, XxlJobAdminConfig xxlJobAdminConfig) {
37
+
38
+        this.xxlJobTrigger = xxlJobTrigger;
39
+        this.xxlJobAdminConfig = xxlJobAdminConfig;
40
+    }
41
+
42
+    /**
43
+     * admin trigger pool start
44
+     */
45
+    @PostConstruct
27 46
     public void start() {
28 47
         fastTriggerPool = new ThreadPoolExecutor(
29 48
                 10,
30
-                XxlJobAdminConfig.getAdminConfig().getTriggerPoolFastMax(),
49
+                xxlJobAdminConfig.getTriggerPoolFastMax(),
31 50
                 60L,
32 51
                 TimeUnit.SECONDS,
33 52
                 new LinkedBlockingQueue<Runnable>(1000),
@@ -40,7 +59,7 @@ public class JobTriggerPoolHelper {
40 59
 
41 60
         slowTriggerPool = new ThreadPoolExecutor(
42 61
                 10,
43
-                XxlJobAdminConfig.getAdminConfig().getTriggerPoolSlowMax(),
62
+                xxlJobAdminConfig.getTriggerPoolSlowMax(),
44 63
                 60L,
45 64
                 TimeUnit.SECONDS,
46 65
                 new LinkedBlockingQueue<Runnable>(2000),
@@ -53,6 +72,7 @@ public class JobTriggerPoolHelper {
53 72
     }
54 73
 
55 74
 
75
+    @PreDestroy
56 76
     public void stop() {
57 77
         //triggerPool.shutdown();
58 78
         fastTriggerPool.shutdownNow();
@@ -87,7 +107,7 @@ public class JobTriggerPoolHelper {
87 107
 
88 108
                 try {
89 109
                     // do trigger
90
-                    XxlJobTrigger.trigger(jobId, triggerType, failRetryCount, executorShardingParam, executorParam);
110
+                    xxlJobTrigger.trigger(jobId, triggerType, failRetryCount, executorShardingParam, executorParam);
91 111
                 } catch (Exception e) {
92 112
                     logger.error(e.getMessage(), e);
93 113
                 } finally {
@@ -115,18 +135,6 @@ public class JobTriggerPoolHelper {
115 135
     }
116 136
 
117 137
 
118
-    // ---------------------- helper ----------------------
119
-
120
-    private static JobTriggerPoolHelper helper = new JobTriggerPoolHelper();
121
-
122
-    public static void toStart() {
123
-        helper.start();
124
-    }
125
-
126
-    public static void toStop() {
127
-        helper.stop();
128
-    }
129
-
130 138
     /**
131 139
      * @param jobId
132 140
      * @param triggerType
@@ -136,8 +144,8 @@ public class JobTriggerPoolHelper {
136 144
      * @param executorParam         null: use job param
137 145
      *                              not null: cover job param
138 146
      */
139
-    public static void trigger(int jobId, TriggerTypeEnum triggerType, int failRetryCount, String executorShardingParam, String executorParam) {
140
-        helper.addTrigger(jobId, triggerType, failRetryCount, executorShardingParam, executorParam);
147
+    public void trigger(int jobId, TriggerTypeEnum triggerType, int failRetryCount, String executorShardingParam, String executorParam) {
148
+        this.addTrigger(jobId, triggerType, failRetryCount, executorShardingParam, executorParam);
141 149
     }
142 150
 
143 151
 }

+ 30 - 11
xxl-job-admin/src/main/java/com/xxl/job/admin/core/trigger/XxlJobTrigger.java Voir le fichier

@@ -1,12 +1,14 @@
1 1
 package com.xxl.job.admin.core.trigger;
2 2
 
3
-import com.xxl.job.admin.core.conf.XxlJobAdminConfig;
4 3
 import com.xxl.job.admin.core.model.XxlJobGroup;
5 4
 import com.xxl.job.admin.core.model.XxlJobInfo;
6 5
 import com.xxl.job.admin.core.model.XxlJobLog;
7 6
 import com.xxl.job.admin.core.route.ExecutorRouteStrategyEnum;
8 7
 import com.xxl.job.admin.core.scheduler.XxlJobScheduler;
9 8
 import com.xxl.job.admin.core.util.I18nUtil;
9
+import com.xxl.job.admin.dao.XxlJobGroupDao;
10
+import com.xxl.job.admin.dao.XxlJobInfoDao;
11
+import com.xxl.job.admin.dao.XxlJobLogDao;
10 12
 import com.xxl.job.core.biz.ExecutorBiz;
11 13
 import com.xxl.job.core.biz.model.ReturnT;
12 14
 import com.xxl.job.core.biz.model.TriggerParam;
@@ -15,6 +17,7 @@ import com.xxl.rpc.util.IpUtil;
15 17
 import com.xxl.rpc.util.ThrowableUtil;
16 18
 import org.slf4j.Logger;
17 19
 import org.slf4j.LoggerFactory;
20
+import org.springframework.stereotype.Component;
18 21
 
19 22
 import java.util.Date;
20 23
 
@@ -22,9 +25,25 @@ import java.util.Date;
22 25
  * xxl-job trigger
23 26
  * Created by xuxueli on 17/7/13.
24 27
  */
28
+
29
+@Component
25 30
 public class XxlJobTrigger {
26 31
     private static Logger logger = LoggerFactory.getLogger(XxlJobTrigger.class);
27 32
 
33
+
34
+    private final XxlJobScheduler xxlJobScheduler;
35
+    private final XxlJobGroupDao xxlJobGroupDao;
36
+    private final XxlJobInfoDao xxlJobInfoDao;
37
+    private final XxlJobLogDao xxlJobLogDao;
38
+
39
+    public XxlJobTrigger(XxlJobScheduler xxlJobScheduler, XxlJobGroupDao xxlJobGroupDao, XxlJobInfoDao xxlJobInfoDao, XxlJobLogDao xxlJobLogDao) {
40
+
41
+        this.xxlJobScheduler = xxlJobScheduler;
42
+        this.xxlJobGroupDao = xxlJobGroupDao;
43
+        this.xxlJobInfoDao = xxlJobInfoDao;
44
+        this.xxlJobLogDao = xxlJobLogDao;
45
+    }
46
+
28 47
     /**
29 48
      * trigger job
30 49
      *
@@ -36,9 +55,9 @@ public class XxlJobTrigger {
36 55
      * @param executorParam         null: use job param
37 56
      *                              not null: cover job param
38 57
      */
39
-    public static void trigger(int jobId, TriggerTypeEnum triggerType, int failRetryCount, String executorShardingParam, String executorParam) {
58
+    public void trigger(int jobId, TriggerTypeEnum triggerType, int failRetryCount, String executorShardingParam, String executorParam) {
40 59
         // load data
41
-        XxlJobInfo jobInfo = XxlJobAdminConfig.getAdminConfig().getXxlJobInfoDao().loadById(jobId);
60
+        XxlJobInfo jobInfo = xxlJobInfoDao.loadById(jobId);
42 61
         if (jobInfo == null) {
43 62
             logger.warn(">>>>>>>>>>>> trigger fail, jobId invalid,jobId={}", jobId);
44 63
             return;
@@ -47,7 +66,7 @@ public class XxlJobTrigger {
47 66
             jobInfo.setExecutorParam(executorParam);
48 67
         }
49 68
         int finalFailRetryCount = failRetryCount >= 0 ? failRetryCount : jobInfo.getExecutorFailRetryCount();
50
-        XxlJobGroup group = XxlJobAdminConfig.getAdminConfig().getXxlJobGroupDao().load(jobInfo.getJobGroup());
69
+        XxlJobGroup group = xxlJobGroupDao.load(jobInfo.getJobGroup());
51 70
 
52 71
         // sharding param
53 72
         int[] shardingParam = null;
@@ -55,8 +74,8 @@ public class XxlJobTrigger {
55 74
             String[] shardingArr = executorShardingParam.split("/");
56 75
             if (shardingArr.length == 2 && isNumeric(shardingArr[0]) && isNumeric(shardingArr[1])) {
57 76
                 shardingParam = new int[2];
58
-                shardingParam[0] = Integer.valueOf(shardingArr[0]);
59
-                shardingParam[1] = Integer.valueOf(shardingArr[1]);
77
+                shardingParam[0] = Integer.parseInt(shardingArr[0]);
78
+                shardingParam[1] = Integer.parseInt(shardingArr[1]);
60 79
             }
61 80
         }
62 81
         if (ExecutorRouteStrategyEnum.SHARDING_BROADCAST == ExecutorRouteStrategyEnum.match(jobInfo.getExecutorRouteStrategy(), null)
@@ -91,7 +110,7 @@ public class XxlJobTrigger {
91 110
      * @param index               sharding index
92 111
      * @param total               sharding index
93 112
      */
94
-    private static void processTrigger(XxlJobGroup group, XxlJobInfo jobInfo, int finalFailRetryCount, TriggerTypeEnum triggerType, int index, int total) {
113
+    private void processTrigger(XxlJobGroup group, XxlJobInfo jobInfo, int finalFailRetryCount, TriggerTypeEnum triggerType, int index, int total) {
95 114
 
96 115
         // param
97 116
         ExecutorBlockStrategyEnum blockStrategy = ExecutorBlockStrategyEnum.match(jobInfo.getExecutorBlockStrategy(), ExecutorBlockStrategyEnum.SERIAL_EXECUTION);  // block strategy
@@ -103,7 +122,7 @@ public class XxlJobTrigger {
103 122
         jobLog.setJobGroup(jobInfo.getJobGroup());
104 123
         jobLog.setJobId(jobInfo.getId());
105 124
         jobLog.setTriggerTime(new Date());
106
-        XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().save(jobLog);
125
+        xxlJobLogDao.save(jobLog);
107 126
         logger.debug(">>>>>>>>>>> xxl-job trigger start, jobId:{}", jobLog.getId());
108 127
 
109 128
         // 2、init trigger-param
@@ -176,7 +195,7 @@ public class XxlJobTrigger {
176 195
         //jobLog.setTriggerTime();
177 196
         jobLog.setTriggerCode(triggerResult.getCode());
178 197
         jobLog.setTriggerMsg(triggerMsgSb.toString());
179
-        XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().updateTriggerInfo(jobLog);
198
+        xxlJobLogDao.updateTriggerInfo(jobLog);
180 199
 
181 200
         logger.debug(">>>>>>>>>>> xxl-job trigger end, jobId:{}", jobLog.getId());
182 201
     }
@@ -188,10 +207,10 @@ public class XxlJobTrigger {
188 207
      * @param address
189 208
      * @return
190 209
      */
191
-    public static ReturnT<String> runExecutor(TriggerParam triggerParam, String address) {
210
+    public ReturnT<String> runExecutor(TriggerParam triggerParam, String address) {
192 211
         ReturnT<String> runResult = null;
193 212
         try {
194
-            ExecutorBiz executorBiz = XxlJobScheduler.getExecutorBiz(address);
213
+            ExecutorBiz executorBiz = xxlJobScheduler.getExecutorBiz(address);
195 214
             runResult = executorBiz.run(triggerParam);
196 215
         } catch (Exception e) {
197 216
             logger.error(">>>>>>>>>>> xxl-job trigger error, please check if the executor[{}] is running.", address, e);

+ 43 - 24
xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/I18nUtil.java Voir le fichier

@@ -1,6 +1,5 @@
1 1
 package com.xxl.job.admin.core.util;
2 2
 
3
-import com.xxl.job.admin.core.conf.XxlJobAdminConfig;
4 3
 import org.slf4j.Logger;
5 4
 import org.slf4j.LoggerFactory;
6 5
 import org.springframework.core.io.ClassPathResource;
@@ -19,27 +18,41 @@ import java.util.Properties;
19 18
  *
20 19
  * @author xuxueli 2018-01-17 20:39:06
21 20
  */
21
+
22
+
22 23
 public class I18nUtil {
23 24
     private static Logger logger = LoggerFactory.getLogger(I18nUtil.class);
24 25
 
25 26
     private static Properties prop = null;
26 27
 
28
+    private static String i18n = null;
29
+
30
+    public static void setI18n(String i18n) {
31
+        I18nUtil.i18n = i18n;
32
+    }
33
+
27 34
     public static Properties loadI18nProp() {
28
-        if (prop != null) {
29
-            return prop;
30
-        }
31
-        try {
32
-            // build i18n prop
33
-            String i18n = XxlJobAdminConfig.getAdminConfig().getI18n();
34
-            i18n = (i18n != null && i18n.trim().length() > 0) ? ("_" + i18n) : i18n;
35
-            String i18nFile = MessageFormat.format("i18n/message{0}.properties", i18n);
36
-
37
-            // load prop
38
-            Resource resource = new ClassPathResource(i18nFile);
39
-            EncodedResource encodedResource = new EncodedResource(resource, "UTF-8");
40
-            prop = PropertiesLoaderUtils.loadProperties(encodedResource);
41
-        } catch (IOException e) {
42
-            logger.error(e.getMessage(), e);
35
+        if (prop == null) {
36
+            synchronized (I18nUtil.class) {
37
+                if (prop == null) {
38
+                    try {
39
+                        // build i18n prop
40
+                        if (i18n == null) {
41
+                            i18n = "";
42
+                        } else {
43
+                            i18n = i18n.trim().length() > 0 ? "_" + i18n : i18n;
44
+                        }
45
+                        String i18nFile = MessageFormat.format("i18n/message{0}.properties", i18n);
46
+
47
+                        // load prop
48
+                        Resource resource = new ClassPathResource(i18nFile);
49
+                        EncodedResource encodedResource = new EncodedResource(resource, "UTF-8");
50
+                        prop = PropertiesLoaderUtils.loadProperties(encodedResource);
51
+                    } catch (IOException e) {
52
+                        logger.error(e.getMessage(), e);
53
+                    }
54
+                }
55
+            }
43 56
         }
44 57
         return prop;
45 58
     }
@@ -54,28 +67,34 @@ public class I18nUtil {
54 67
         return loadI18nProp().getProperty(key);
55 68
     }
56 69
 
70
+
71
+    private static Map<String, String> PROPERTIES_CACHE = new HashMap<String, String>();
72
+
57 73
     /**
58
-     * get mult val of i18n mult key, as json
74
+     * get multi val of i18n mult key, as json
59 75
      *
60 76
      * @param keys
61 77
      * @return
62 78
      */
63
-    public static String getMultString(String... keys) {
64
-        Map<String, String> map = new HashMap<String, String>();
79
+    public static String getMultiString(String... keys) {
80
+        Map<String, String> map;
65 81
 
66 82
         Properties prop = loadI18nProp();
67 83
         if (keys != null && keys.length > 0) {
84
+            map = new HashMap<String, String>(keys.length);
68 85
             for (String key : keys) {
69 86
                 map.put(key, prop.getProperty(key));
70 87
             }
71 88
         } else {
72
-            for (String key : prop.stringPropertyNames()) {
73
-                map.put(key, prop.getProperty(key));
89
+            if (PROPERTIES_CACHE.isEmpty()) {
90
+                for (String key : prop.stringPropertyNames()) {
91
+                    PROPERTIES_CACHE.put(key, prop.getProperty(key));
92
+                }
74 93
             }
94
+            map = PROPERTIES_CACHE;
75 95
         }
76
-
77
-        String json = JacksonUtil.writeValueAsString(map);
78
-        return json;
96
+        return JacksonUtil.writeValueAsString(map);
79 97
     }
80 98
 
99
+
81 100
 }

+ 21 - 0
xxl-job-admin/src/main/java/com/xxl/job/admin/service/AlarmService.java Voir le fichier

@@ -0,0 +1,21 @@
1
+package com.xxl.job.admin.service;
2
+
3
+import com.xxl.job.admin.core.model.XxlJobInfo;
4
+import com.xxl.job.admin.core.model.XxlJobLog;
5
+
6
+/**
7
+ * @author VcKerry on 2020/1/6
8
+ */
9
+
10
+public interface AlarmService {
11
+
12
+    /**
13
+     * 告警通知
14
+     *
15
+     * @param info
16
+     * @param jobLog
17
+     * @return
18
+     */
19
+    boolean alarmNotify(XxlJobInfo info, XxlJobLog jobLog);
20
+
21
+}

+ 2 - 3
xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/AdminBizImpl.java Voir le fichier

@@ -5,7 +5,6 @@ import com.xxl.job.admin.core.model.XxlJobLog;
5 5
 import com.xxl.job.admin.core.thread.JobTriggerPoolHelper;
6 6
 import com.xxl.job.admin.core.trigger.TriggerTypeEnum;
7 7
 import com.xxl.job.admin.core.util.I18nUtil;
8
-import com.xxl.job.admin.dao.XxlJobGroupDao;
9 8
 import com.xxl.job.admin.dao.XxlJobInfoDao;
10 9
 import com.xxl.job.admin.dao.XxlJobLogDao;
11 10
 import com.xxl.job.admin.dao.XxlJobRegistryDao;
@@ -38,7 +37,7 @@ public class AdminBizImpl implements AdminBiz {
38 37
     @Resource
39 38
     private XxlJobRegistryDao xxlJobRegistryDao;
40 39
     @Resource
41
-    private XxlJobGroupDao xxlJobGroupDao;
40
+    private JobTriggerPoolHelper jobTriggerPoolHelper;
42 41
 
43 42
 
44 43
     @Override
@@ -74,7 +73,7 @@ public class AdminBizImpl implements AdminBiz {
74 73
                     int childJobId = (childJobIds[i] != null && childJobIds[i].trim().length() > 0 && isNumeric(childJobIds[i])) ? Integer.valueOf(childJobIds[i]) : -1;
75 74
                     if (childJobId > 0) {
76 75
 
77
-                        JobTriggerPoolHelper.trigger(childJobId, TriggerTypeEnum.PARENT, -1, null, null);
76
+                        jobTriggerPoolHelper.trigger(childJobId, TriggerTypeEnum.PARENT, -1, null, null);
78 77
                         ReturnT<String> triggerChildResult = ReturnT.SUCCESS;
79 78
 
80 79
                         // add msg

+ 200 - 0
xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/AlarmServiceImpl.java Voir le fichier

@@ -0,0 +1,200 @@
1
+package com.xxl.job.admin.service.impl;
2
+
3
+import com.xxl.job.admin.core.model.XxlJobGroup;
4
+import com.xxl.job.admin.core.model.XxlJobInfo;
5
+import com.xxl.job.admin.core.model.XxlJobLog;
6
+import com.xxl.job.admin.core.util.I18nUtil;
7
+import com.xxl.job.admin.dao.XxlJobGroupDao;
8
+import com.xxl.job.admin.service.AlarmService;
9
+import com.xxl.job.core.biz.model.ReturnT;
10
+import org.slf4j.Logger;
11
+import org.slf4j.LoggerFactory;
12
+import org.springframework.beans.factory.annotation.Value;
13
+import org.springframework.mail.javamail.JavaMailSender;
14
+import org.springframework.mail.javamail.MimeMessageHelper;
15
+import org.springframework.stereotype.Service;
16
+import org.springframework.web.client.RestTemplate;
17
+
18
+import javax.mail.internet.MimeMessage;
19
+import java.text.MessageFormat;
20
+import java.text.SimpleDateFormat;
21
+import java.util.Arrays;
22
+import java.util.Date;
23
+import java.util.HashSet;
24
+import java.util.Set;
25
+
26
+/**
27
+ * @author VcKerry on 2020/1/6
28
+ */
29
+
30
+@Service
31
+public class AlarmServiceImpl implements AlarmService {
32
+
33
+    private static Logger logger = LoggerFactory.getLogger(AlarmServiceImpl.class);
34
+
35
+
36
+    @Value("${spring.mail.username}")
37
+    private String emailUserName;
38
+
39
+
40
+    private final XxlJobGroupDao xxlJobGroupDao;
41
+    private final JavaMailSender mailSender;
42
+    private final RestTemplate restTemplate;
43
+
44
+    public AlarmServiceImpl(XxlJobGroupDao xxlJobGroupDao, JavaMailSender mailSender, RestTemplate restTemplate) {
45
+        this.xxlJobGroupDao = xxlJobGroupDao;
46
+        this.mailSender = mailSender;
47
+        this.restTemplate = restTemplate;
48
+    }
49
+
50
+    @Override
51
+    public boolean alarmNotify(XxlJobInfo info, XxlJobLog jobLog) {
52
+
53
+        boolean alarmResult = true;
54
+
55
+        // email info
56
+        XxlJobGroup group = xxlJobGroupDao.load(info.getJobGroup());
57
+        String personal = I18nUtil.getString("admin_name_full");
58
+        String title = I18nUtil.getString("jobconf_monitor");
59
+
60
+        Set<String> alarmAddressSet = new HashSet<String>(Arrays.asList(info.getAlarmEmail().split(",")));
61
+
62
+        for (String email : alarmAddressSet) {
63
+            try {
64
+                email = email.trim();
65
+                if (email.startsWith("http://") || email.startsWith("https://")) {
66
+                    final String content = textContent(group, info, jobLog, personal);
67
+                    alarmResult = failAlarmHttp(email, title, content, jobLog.getId());
68
+                } else if (email.startsWith("sms://")) {
69
+                    // sms 短信
70
+                } else {
71
+                    String content = emailContent(group, info, jobLog);
72
+                    alarmResult = failAlarmEmail(email, title, content, jobLog.getId(), personal);
73
+                }
74
+            } catch (Exception e) {
75
+                alarmResult = false;
76
+            }
77
+        }
78
+        // do something, custom alarm strategy, such as sms
79
+        return alarmResult;
80
+    }
81
+
82
+    // ---------------------- email alarm ----------------------
83
+
84
+    // email alarm template
85
+    private static final String mailBodyTemplate = "<h5>" + I18nUtil.getString("jobconf_monitor_detail") + ":</span>" +
86
+            "<table border=\"1\" cellpadding=\"3\" style=\"border-collapse:collapse; width:80%;\" >\n" +
87
+            "   <thead style=\"font-weight: bold;color: #ffffff;background-color: #ff8c00;\" >" +
88
+            "      <tr>\n" +
89
+            "         <td width=\"20%\" >" + I18nUtil.getString("jobinfo_field_jobgroup") + "</td>\n" +
90
+            "         <td width=\"10%\" >" + I18nUtil.getString("jobinfo_field_id") + "</td>\n" +
91
+            "         <td width=\"20%\" >" + I18nUtil.getString("jobinfo_field_jobdesc") + "</td>\n" +
92
+            "         <td width=\"10%\" >" + I18nUtil.getString("jobconf_monitor_alarm_title") + "</td>\n" +
93
+            "         <td width=\"40%\" >" + I18nUtil.getString("jobconf_monitor_alarm_content") + "</td>\n" +
94
+            "      </tr>\n" +
95
+            "   </thead>\n" +
96
+            "   <tbody>\n" +
97
+            "      <tr>\n" +
98
+            "         <td>{0}</td>\n" +
99
+            "         <td>{1}</td>\n" +
100
+            "         <td>{2}</td>\n" +
101
+            "         <td>" + I18nUtil.getString("jobconf_monitor_alarm_type") + "</td>\n" +
102
+            "         <td>{3}</td>\n" +
103
+            "      </tr>\n" +
104
+            "   </tbody>\n" +
105
+            "</table>";
106
+
107
+    private String emailContent(XxlJobGroup group, XxlJobInfo info, XxlJobLog jobLog) {
108
+        // alarmContent
109
+        String alarmContent = "Alarm Job LogId=" + jobLog.getId();
110
+        if (jobLog.getTriggerCode() != ReturnT.SUCCESS_CODE) {
111
+            alarmContent += "<br>TriggerMsg=<br>" + jobLog.getTriggerMsg();
112
+        }
113
+        if (jobLog.getHandleCode() > 0 && jobLog.getHandleCode() != ReturnT.SUCCESS_CODE) {
114
+            alarmContent += "<br>HandleCode=" + jobLog.getHandleMsg();
115
+        }
116
+        return MessageFormat.format(mailBodyTemplate,
117
+                group != null ? group.getTitle() : "null",
118
+                info.getId(),
119
+                info.getJobDesc(),
120
+                alarmContent);
121
+    }
122
+
123
+    /**
124
+     * Email
125
+     *
126
+     * @param email
127
+     * @param title
128
+     * @param content
129
+     * @param jobLogId for error
130
+     * @return
131
+     */
132
+    private boolean failAlarmEmail(String email, String title, String content, Long jobLogId, String personal) throws Exception {
133
+        // make mail
134
+        try {
135
+            MimeMessage mimeMessage = mailSender.createMimeMessage();
136
+            MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
137
+            helper.setFrom(emailUserName, personal);
138
+            helper.setTo(email);
139
+            helper.setSubject(title);
140
+            helper.setText(content, true);
141
+            mailSender.send(mimeMessage);
142
+            return true;
143
+        } catch (Exception e) {
144
+            logger.error(">>>>>>>>>>> xxl-job, job fail alarm email send error, JobLogId:{}", jobLogId, e);
145
+            throw e;
146
+        }
147
+    }
148
+
149
+    private static final String TEXT_TEMPLATE = "{0} \n\n" +
150
+            I18nUtil.getString("jobconf_monitor_detail") + ": \n\n" +
151
+            I18nUtil.getString("jobinfo_field_jobgroup") + " : {1}" + " \n\n" +
152
+            I18nUtil.getString("jobinfo_field_id") + " : {2}" + " \n\n" +
153
+            I18nUtil.getString("jobinfo_field_jobdesc") + " : {3}" + " \n\n" +
154
+            I18nUtil.getString("jobconf_monitor_alarm_title") + " : " + I18nUtil.getString("jobconf_monitor_alarm_type") + " \n\n" +
155
+            I18nUtil.getString("jobconf_monitor_alarm_content") + " : {4}" + " \n\n";
156
+
157
+
158
+    private String textContent(XxlJobGroup group, XxlJobInfo info, XxlJobLog jobLog, String personal) {
159
+        // alarmContent
160
+        String alarmContent = "Alarm Job LogId=" + jobLog.getId() + ".";
161
+        if (jobLog.getTriggerCode() != ReturnT.SUCCESS_CODE) {
162
+            alarmContent += "TriggerMsg=" + jobLog.getTriggerMsg() + ".";
163
+        }
164
+        if (jobLog.getHandleCode() > 0 && jobLog.getHandleCode() != ReturnT.SUCCESS_CODE) {
165
+            alarmContent += "HandleCode=" + jobLog.getHandleMsg() + ".";
166
+        }
167
+        return MessageFormat.format(TEXT_TEMPLATE,
168
+                personal,
169
+                group != null ? group.getTitle() : "null",
170
+                info.getId(),
171
+                info.getJobDesc(),
172
+                alarmContent);
173
+    }
174
+
175
+    /**
176
+     * todo only support ftqq
177
+     *
178
+     * @param url
179
+     * @param title
180
+     * @param content
181
+     * @param jobLogId
182
+     * @return
183
+     * @throws Exception
184
+     */
185
+    private boolean failAlarmHttp(String url, String title, String content, Long jobLogId) throws Exception {
186
+
187
+        try {
188
+            final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
189
+            final String format = simpleDateFormat.format(new Date());
190
+            title = title + "[" + format + "]";
191
+            final String forObject = restTemplate.getForObject(url, String.class, title, content);
192
+            logger.debug(">>>>>>>>>>> xxl-job, job result:{}, JobLogId:{}", forObject, jobLogId);
193
+            return true;
194
+        } catch (Exception e) {
195
+            logger.error(">>>>>>>>>>> xxl-job, job fail alarm http send error, JobLogId:{}", jobLogId, e);
196
+            throw e;
197
+        }
198
+    }
199
+
200
+}

+ 13 - 28
xxl-job-admin/src/main/resources/application-dev1.properties Voir le fichier

@@ -1,58 +1,43 @@
1 1
 ### web
2 2
 server.port=8081
3
-server.context-path=/xxl-job-admin
4
-
3
+server.servlet.context-path=/xxl-job-admin
4
+### xxl-job, datasource
5
+spring.datasource.url=jdbc:mysql://192.168.10.210:6446/xxl_job?Unicode=true&useSSL=false&characterEncoding=UTF-8
6
+spring.datasource.username=xxl_job
7
+spring.datasource.password=E_wsq@163.com
8
+spring.datasource.hikari.connection-test-query=SELECT 1
9
+spring.datasource.hikari.maximum-pool-size=20
10
+spring.datasource.hikari.minimum-idle=10
5 11
 ### actuator
6
-management.context-path=/actuator
12
+management.server.servlet.context-path=/actuator
7 13
 management.health.mail.enabled=false
8
-
9 14
 ### resources
10 15
 spring.mvc.servlet.load-on-startup=0
11 16
 spring.mvc.static-path-pattern=/static/**
12 17
 spring.resources.static-locations=classpath:/static/
13
-
14 18
 ### freemarker
15 19
 spring.freemarker.templateLoaderPath=classpath:/templates/
16 20
 spring.freemarker.suffix=.ftl
17 21
 spring.freemarker.charset=UTF-8
18 22
 spring.freemarker.request-context-attribute=request
19 23
 spring.freemarker.settings.number_format=0.##########
20
-
21 24
 ### mybatis
22 25
 mybatis.mapper-locations=classpath:/mybatis-mapper/*Mapper.xml
23
-
24
-### xxl-job, datasource
25
-spring.datasource.url=jdbc:mysql://192.168.10.210:6446/xxl_job?Unicode=true&characterEncoding=UTF-8
26
-spring.datasource.username=xxl_job
27
-spring.datasource.password=E_wsq@163.com
28
-spring.datasource.driver-class-name=com.mysql.jdbc.Driver
29
-
30
-spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource
31
-spring.datasource.tomcat.max-wait=10000
32
-spring.datasource.tomcat.max-active=30
33
-spring.datasource.tomcat.test-on-borrow=true
34
-spring.datasource.tomcat.validation-query=SELECT 1
35
-spring.datasource.tomcat.validation-interval=30000
36
-
37 26
 ### xxl-job email
38
-spring.mail.host=smtp.qq.com
39
-spring.mail.port=25
40
-spring.mail.username=xxx@qq.com
41
-spring.mail.password=xxx
27
+spring.mail.host=smtp.exmail.qq.com
28
+spring.mail.port=465
29
+spring.mail.username=system@vcarecity.com
30
+spring.mail.password=123Abc
42 31
 spring.mail.properties.mail.smtp.auth=true
43 32
 spring.mail.properties.mail.smtp.starttls.enable=true
44 33
 spring.mail.properties.mail.smtp.starttls.required=true
45 34
 spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
46
-
47 35
 ### xxl-job, access token
48 36
 xxl.job.accessToken=
49
-
50 37
 ### xxl-job, i18n (default empty as chinese, "en" as english)
51 38
 xxl.job.i18n=
52
-
53 39
 ## xxl-job, triggerpool max size
54 40
 xxl.job.triggerpool.fast.max=200
55 41
 xxl.job.triggerpool.slow.max=100
56
-
57 42
 ### xxl-job, log retention days
58 43
 xxl.job.logretentiondays=30

+ 14 - 29
xxl-job-admin/src/main/resources/application-dev2.properties Voir le fichier

@@ -1,58 +1,43 @@
1 1
 ### web
2
-server.port=8081
3
-server.context-path=/xxl-job-admin
4
-
2
+server.port=8082
3
+server.servlet.context-path=/xxl-job-admin
4
+### xxl-job, datasource
5
+spring.datasource.url=jdbc:mysql://192.168.10.210:6446/xxl_job?Unicode=true&useSSL=false&characterEncoding=UTF-8
6
+spring.datasource.username=xxl_job
7
+spring.datasource.password=E_wsq@163.com
8
+spring.datasource.hikari.connection-test-query=SELECT 1
9
+spring.datasource.hikari.maximum-pool-size=20
10
+spring.datasource.hikari.minimum-idle=10
5 11
 ### actuator
6
-management.context-path=/actuator
12
+management.server.servlet.context-path=/actuator
7 13
 management.health.mail.enabled=false
8
-
9 14
 ### resources
10 15
 spring.mvc.servlet.load-on-startup=0
11 16
 spring.mvc.static-path-pattern=/static/**
12 17
 spring.resources.static-locations=classpath:/static/
13
-
14 18
 ### freemarker
15 19
 spring.freemarker.templateLoaderPath=classpath:/templates/
16 20
 spring.freemarker.suffix=.ftl
17 21
 spring.freemarker.charset=UTF-8
18 22
 spring.freemarker.request-context-attribute=request
19 23
 spring.freemarker.settings.number_format=0.##########
20
-
21 24
 ### mybatis
22 25
 mybatis.mapper-locations=classpath:/mybatis-mapper/*Mapper.xml
23
-
24
-### xxl-job, datasource
25
-spring.datasource.url=jdbc:mysql://192.168.10.210:6446/xxl_job?Unicode=true&characterEncoding=UTF-8
26
-spring.datasource.username=xxl_job
27
-spring.datasource.password=E_wsq@163.com
28
-spring.datasource.driver-class-name=com.mysql.jdbc.Driver
29
-
30
-spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource
31
-spring.datasource.tomcat.max-wait=10000
32
-spring.datasource.tomcat.max-active=30
33
-spring.datasource.tomcat.test-on-borrow=true
34
-spring.datasource.tomcat.validation-query=SELECT 1
35
-spring.datasource.tomcat.validation-interval=30000
36
-
37 26
 ### xxl-job email
38
-spring.mail.host=smtp.qq.com
39
-spring.mail.port=25
40
-spring.mail.username=xxx@qq.com
41
-spring.mail.password=xxx
27
+spring.mail.host=smtp.exmail.qq.com
28
+spring.mail.port=465
29
+spring.mail.username=system@vcarecity.com
30
+spring.mail.password=123Abc
42 31
 spring.mail.properties.mail.smtp.auth=true
43 32
 spring.mail.properties.mail.smtp.starttls.enable=true
44 33
 spring.mail.properties.mail.smtp.starttls.required=true
45 34
 spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
46
-
47 35
 ### xxl-job, access token
48 36
 xxl.job.accessToken=
49
-
50 37
 ### xxl-job, i18n (default empty as chinese, "en" as english)
51 38
 xxl.job.i18n=
52
-
53 39
 ## xxl-job, triggerpool max size
54 40
 xxl.job.triggerpool.fast.max=200
55 41
 xxl.job.triggerpool.slow.max=100
56
-
57 42
 ### xxl-job, log retention days
58 43
 xxl.job.logretentiondays=30

+ 12 - 26
xxl-job-admin/src/main/resources/application.properties Voir le fichier

@@ -1,58 +1,44 @@
1 1
 ### web
2 2
 server.port=8080
3
-server.context-path=/xxl-job-admin
4
-
3
+server.servlet.context-path=/xxl-job-admin
4
+### xxl-job, datasource
5
+spring.datasource.url=jdbc:mysql://192.168.10.210:6446/xxl_job?Unicode=true&useSSL=false&characterEncoding=UTF-8
6
+spring.datasource.username=xxl_job
7
+spring.datasource.password=E_wsq@163.com
8
+spring.datasource.hikari.connection-test-query=SELECT 1
9
+spring.datasource.hikari.maximum-pool-size=20
10
+spring.datasource.hikari.minimum-idle=10
5 11
 ### actuator
6
-management.context-path=/actuator
12
+management.server.servlet.context-path=/actuator
7 13
 management.health.mail.enabled=false
8
-
9 14
 ### resources
10 15
 spring.mvc.servlet.load-on-startup=0
11 16
 spring.mvc.static-path-pattern=/static/**
12 17
 spring.resources.static-locations=classpath:/static/
13
-
14 18
 ### freemarker
15 19
 spring.freemarker.templateLoaderPath=classpath:/templates/
16 20
 spring.freemarker.suffix=.ftl
17 21
 spring.freemarker.charset=UTF-8
18 22
 spring.freemarker.request-context-attribute=request
19 23
 spring.freemarker.settings.number_format=0.##########
20
-
21 24
 ### mybatis
22 25
 mybatis.mapper-locations=classpath:/mybatis-mapper/*Mapper.xml
23
-
24
-### xxl-job, datasource
25
-spring.datasource.url=jdbc:mysql://192.168.10.210:6446/xxl_job?Unicode=true&useSSL=false&characterEncoding=UTF-8
26
-spring.datasource.username=xxl_job
27
-spring.datasource.password=E_wsq@163.com
28
-spring.datasource.driver-class-name=com.mysql.jdbc.Driver
29
-
30
-spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource
31
-spring.datasource.tomcat.max-wait=10000
32
-spring.datasource.tomcat.max-active=30
33
-spring.datasource.tomcat.test-on-borrow=true
34
-spring.datasource.tomcat.validation-query=SELECT 1
35
-spring.datasource.tomcat.validation-interval=30000
36
-
37 26
 ### xxl-job email
38 27
 spring.mail.host=smtp.exmail.qq.com
39 28
 spring.mail.port=465
40
-spring.mail.username=xxx.11.com
41
-spring.mail.password=pass
29
+spring.mail.username=system@vcarecity.com
30
+spring.mail.password=123Abc
42 31
 spring.mail.properties.mail.smtp.auth=true
43 32
 spring.mail.properties.mail.smtp.starttls.enable=true
44 33
 spring.mail.properties.mail.smtp.starttls.required=true
45 34
 spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
46
-
47 35
 ### xxl-job, access token
48 36
 xxl.job.accessToken=
49
-
50 37
 ### xxl-job, i18n (default empty as chinese, "en" as english)
51 38
 xxl.job.i18n=
52
-
53 39
 ## xxl-job, triggerpool max size
54 40
 xxl.job.triggerpool.fast.max=200
55 41
 xxl.job.triggerpool.slow.max=100
56
-
57 42
 ### xxl-job, log retention days
58 43
 xxl.job.logretentiondays=30
44
+

+ 2 - 2
xxl-job-admin/src/main/resources/templates/common/common.macro.ftl Voir le fichier

@@ -29,7 +29,7 @@
29 29
 	<link rel="stylesheet" href="${request.contextPath}/static/adminlte/bower_components/PACE/themes/blue/pace-theme-flash.css">
30 30
 
31 31
 	<#-- i18n -->
32
-	<#global I18n = I18nUtil.getMultString()?eval />
32
+	<#global I18n = I18nUtil.getMultiString()?eval />
33 33
 
34 34
 </#macro>
35 35
 
@@ -59,7 +59,7 @@
59 59
     <script src="${request.contextPath}/static/js/common.1.js"></script>
60 60
     <script>
61 61
 		var base_url = '${request.contextPath}';
62
-        var I18n = ${I18nUtil.getMultString()};
62
+        var I18n = ${I18nUtil.getMultiString()};
63 63
 	</script>
64 64
 
65 65
 </#macro>

+ 2 - 2
xxl-job-admin/src/test/java/com/xxl/job/admin/util/I18nUtilTest.java Voir le fichier

@@ -18,8 +18,8 @@ public class I18nUtilTest {
18 18
     @Test
19 19
     public void test() {
20 20
         System.out.println(I18nUtil.getString("admin_name"));
21
-        System.out.println(I18nUtil.getMultString("admin_name", "admin_name_full"));
22
-        System.out.println(I18nUtil.getMultString());
21
+        System.out.println(I18nUtil.getMultiString("admin_name", "admin_name_full"));
22
+        System.out.println(I18nUtil.getMultiString());
23 23
     }
24 24
 
25 25
 }

+ 4 - 0
xxl-job-core/src/main/java/com/xxl/job/core/util/XxlJobRemotingUtil.java Voir le fichier

@@ -35,6 +35,7 @@ public class XxlJobRemotingUtil {
35 35
             logger.error(e.getMessage(), e);
36 36
         }
37 37
         connection.setHostnameVerifier(new HostnameVerifier() {
38
+            @Override
38 39
             public boolean verify(String hostname, SSLSession session) {
39 40
                 return true;
40 41
             }
@@ -42,13 +43,16 @@ public class XxlJobRemotingUtil {
42 43
     }
43 44
 
44 45
     private static final TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
46
+        @Override
45 47
         public java.security.cert.X509Certificate[] getAcceptedIssuers() {
46 48
             return new java.security.cert.X509Certificate[]{};
47 49
         }
48 50
 
51
+        @Override
49 52
         public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
50 53
         }
51 54
 
55
+        @Override
52 56
         public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
53 57
         }
54 58
     }};