Bläddra i källkod

迁移 springboot

xuxueli 6 år sedan
förälder
incheckning
02dc2a4caa
100 ändrade filer med 318 tillägg och 322 borttagningar
  1. 6 4
      pom.xml
  2. 5 3
      xxl-job-admin/Dockerfile
  3. 35 85
      xxl-job-admin/pom.xml
  4. 16 0
      xxl-job-admin/src/main/java/com/xxl/job/admin/XxlJobAdminApplication.java
  5. 2 1
      xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobGroupController.java
  6. 2 0
      xxl-job-admin/src/main/java/com/xxl/job/admin/controller/interceptor/CookieInterceptor.java
  7. 17 14
      xxl-job-admin/src/main/java/com/xxl/job/admin/controller/interceptor/PermissionInterceptor.java
  8. 29 0
      xxl-job-admin/src/main/java/com/xxl/job/admin/controller/interceptor/WebMvcConfig.java
  9. 3 0
      xxl-job-admin/src/main/java/com/xxl/job/admin/controller/resolver/WebExceptionResolver.java
  10. 49 0
      xxl-job-admin/src/main/java/com/xxl/job/admin/core/conf/XxlJobAdminConfig.java
  11. 43 0
      xxl-job-admin/src/main/java/com/xxl/job/admin/core/conf/XxlJobDynamicSchedulerConfig.java
  12. 10 27
      xxl-job-admin/src/main/java/com/xxl/job/admin/core/schedule/XxlJobDynamicScheduler.java
  13. 7 6
      xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobFailMonitorHelper.java
  14. 5 4
      xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryMonitorHelper.java
  15. 5 4
      xxl-job-admin/src/main/java/com/xxl/job/admin/core/trigger/XxlJobTrigger.java
  16. 2 0
      xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobGroupDao.java
  17. 2 0
      xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobInfoDao.java
  18. 2 0
      xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobLogDao.java
  19. 2 0
      xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobLogGlueDao.java
  20. 2 0
      xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobRegistryDao.java
  21. 45 0
      xxl-job-admin/src/main/resources/application.properties
  22. 0 10
      xxl-job-admin/src/main/resources/freemarker.properties
  23. 0 27
      xxl-job-admin/src/main/resources/log4j.xml
  24. 29 0
      xxl-job-admin/src/main/resources/logback.xml
  25. 0 21
      xxl-job-admin/src/main/resources/spring/applicationcontext-base.xml
  26. 0 71
      xxl-job-admin/src/main/resources/spring/applicationcontext-xxl-job-admin.xml
  27. 0 45
      xxl-job-admin/src/main/resources/spring/springmvc-context.xml
  28. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/bootstrap/css/bootstrap.css.map
  29. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/bootstrap/css/bootstrap.min.css
  30. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/bootstrap/fonts/glyphicons-halflings-regular.eot
  31. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/bootstrap/fonts/glyphicons-halflings-regular.svg
  32. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/bootstrap/fonts/glyphicons-halflings-regular.ttf
  33. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/bootstrap/fonts/glyphicons-halflings-regular.woff
  34. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/bootstrap/fonts/glyphicons-halflings-regular.woff2
  35. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/bootstrap/js/bootstrap.min.js
  36. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/dist/css/AdminLTE-local.min.css
  37. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/dist/css/AdminLTE.min.css
  38. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/dist/css/google-local/fonts/M2Jd71oPJhLKp0zdtTvoM40tgx99jmYGv_xzYuwd1rU.woff2
  39. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/dist/css/google-local/fonts/M2Jd71oPJhLKp0zdtTvoM7YHq4FgHI02B8rPccK0FJQ.woff2
  40. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/dist/css/google-local/fonts/M2Jd71oPJhLKp0zdtTvoMxgy2Fsj5sj3EzlXpqVXRKo.woff2
  41. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/dist/css/google-local/fonts/ODelI1aHBYDBqgeIAH2zlC2Q8seG17bfDXYR_jUsrzg.woff2
  42. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/dist/css/google-local/fonts/ODelI1aHBYDBqgeIAH2zlNOAHFN6BivSraYkjhveRHY.woff2
  43. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/dist/css/google-local/fonts/ODelI1aHBYDBqgeIAH2zlNOAHFN6BivSraYkjhveRHY[0].woff2
  44. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/dist/css/google-local/fonts/ODelI1aHBYDBqgeIAH2zlNV_2ngZ8dMf8fLgjYEouxg.woff2
  45. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/dist/css/google-local/fonts/fpTVHK8qsXbIeTHTrnQH6CzM2XYAq8cDhaXsrN8WXcA.woff2
  46. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/dist/css/google-local/fonts/fpTVHK8qsXbIeTHTrnQH6E78GtRp3lhchupCJNw8t58.woff2
  47. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/dist/css/google-local/fonts/fpTVHK8qsXbIeTHTrnQH6GQKuzMuncr0JB710wa2dPI.woff2
  48. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/dist/css/google-local/fonts/fpTVHK8qsXbIeTHTrnQH6Lpx497t94oDua8KfAL9f-E.woff2
  49. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/dist/css/google-local/fonts/fpTVHK8qsXbIeTHTrnQH6MAjkyiewWYrWZc50I8hK7I.woff2
  50. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/dist/css/google-local/fonts/fpTVHK8qsXbIeTHTrnQH6OXKTZYPNtG1yMB_YJSqlic.woff2
  51. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/dist/css/google-local/fonts/toadOcfmlt9b38dHJxOBGCOFnW3Jk0f09zW_Yln67Ac.woff2
  52. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/dist/css/google-local/fonts/toadOcfmlt9b38dHJxOBGClYwVOhDRq2vbpGRTZ7bbs.woff2
  53. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/dist/css/google-local/fonts/toadOcfmlt9b38dHJxOBGDRVvBvQIc1z78c__uoBcyI.woff2
  54. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/dist/css/google-local/fonts/toadOcfmlt9b38dHJxOBGD_j0nMiB9fPhg_k1wdK2h0.woff2
  55. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/dist/css/google-local/fonts/toadOcfmlt9b38dHJxOBGDovqjS_dXPZszO_XltPdNg.woff2
  56. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/dist/css/google-local/fonts/toadOcfmlt9b38dHJxOBGEo0As1BFRXtCDhS66znb_k.woff2
  57. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/dist/css/google-local/fonts/toadOcfmlt9b38dHJxOBGFKFh1TDTPrUZWzVp6FtpG8.woff2
  58. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/dist/css/google-local/fonts/toadOcfmlt9b38dHJxOBGFxe-GPfKKFmiXaJ_Q0GFr8.woff2
  59. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/dist/css/google-local/fonts/toadOcfmlt9b38dHJxOBGOode0-EuMkY--TSyExeINg.woff2
  60. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/dist/css/google-local/local.google.fonts.css
  61. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/dist/css/skins/_all-skins.min.css
  62. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/dist/js/app.min.js
  63. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/plugins/datatables/dataTables.bootstrap.css
  64. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/plugins/datatables/dataTables.bootstrap.min.js
  65. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/plugins/datatables/images/sort_asc.png
  66. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/plugins/datatables/images/sort_asc_disabled.png
  67. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/plugins/datatables/images/sort_both.png
  68. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/plugins/datatables/images/sort_desc.png
  69. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/plugins/datatables/images/sort_desc_disabled.png
  70. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/plugins/datatables/jquery.dataTables.min.css
  71. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/plugins/datatables/jquery.dataTables.min.js
  72. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/plugins/datatables/jquery.dataTables_themeroller.css
  73. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/plugins/daterangepicker/daterangepicker.css
  74. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/plugins/daterangepicker/daterangepicker.js
  75. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/plugins/daterangepicker/moment.min.js
  76. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/plugins/fastclick/fastclick.min.js
  77. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/icheck.min.js
  78. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/_all.css
  79. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/aero.css
  80. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/aero.png
  81. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/aero@2x.png
  82. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/blue.css
  83. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/blue.png
  84. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/blue@2x.png
  85. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/green.css
  86. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/green.png
  87. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/green@2x.png
  88. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/grey.css
  89. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/grey.png
  90. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/grey@2x.png
  91. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/orange.css
  92. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/orange.png
  93. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/orange@2x.png
  94. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/pink.css
  95. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/pink.png
  96. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/pink@2x.png
  97. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/purple.css
  98. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/purple.png
  99. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/purple@2x.png
  100. 0 0
      xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/red.css

+ 6 - 4
pom.xml Visa fil

@@ -29,9 +29,8 @@
29 29
 		<javax.servlet-api.version>3.1.0</javax.servlet-api.version>
30 30
 		<javax.servlet.jsp-api.version>2.3.3</javax.servlet.jsp-api.version>
31 31
 
32
-		<spring.version>4.3.19.RELEASE</spring.version>
33
-		<jackson.version>2.9.6</jackson.version>
34
-		<aspectjweaver.version>1.8.13</aspectjweaver.version>
32
+		<spring.version>4.3.20.RELEASE</spring.version>
33
+		<jackson.version>2.9.7</jackson.version>
35 34
 		<slf4j-api.version>1.7.25</slf4j-api.version>
36 35
 		<freemarker.version>2.3.28</freemarker.version>
37 36
 		<junit.version>4.12</junit.version>
@@ -53,7 +52,10 @@
53 52
 		<groovy-all.version>2.4.15</groovy-all.version>
54 53
 		<quartz.version>2.3.0</quartz.version>
55 54
 
56
-		<spring-boot.version>1.5.16.RELEASE</spring-boot.version>
55
+		<spring-boot.version>1.5.17.RELEASE</spring-boot.version>
56
+		<mybatis-spring-boot-starter.version>1.3.2</mybatis-spring-boot-starter.version>
57
+
58
+
57 59
 	</properties>
58 60
 
59 61
 	<build>

+ 5 - 3
xxl-job-admin/Dockerfile Visa fil

@@ -1,6 +1,8 @@
1
-FROM tomcat:8.0-jre8-slim
1
+FROM openjdk:7-jre-slim
2 2
 MAINTAINER xuxueli
3 3
 
4
-ADD target/xxl-job-admin*.war /usr/local/tomcat/webapps/xxl-job-admin.war
4
+ENV PARAMS=""
5 5
 
6
-CMD ["catalina.sh", "run"]
6
+ADD target/xxl-conf-admin-*.jar /app.jar
7
+
8
+ENTRYPOINT ["sh","-c","java -jar /app.jar $PARAMS"]

+ 35 - 85
xxl-job-admin/pom.xml Visa fil

@@ -7,77 +7,56 @@
7 7
 		<version>2.0.0-SNAPSHOT</version>
8 8
 	</parent>
9 9
 	<artifactId>xxl-job-admin</artifactId>
10
-	<packaging>war</packaging>
10
+	<packaging>jar</packaging>
11
+
12
+	<dependencyManagement>
13
+		<dependencies>
14
+			<dependency>
15
+				<groupId>org.springframework.boot</groupId>
16
+				<artifactId>spring-boot-starter-parent</artifactId>
17
+				<version>${spring-boot.version}</version>
18
+				<type>pom</type>
19
+				<scope>import</scope>
20
+			</dependency>
21
+		</dependencies>
22
+	</dependencyManagement>
11 23
 
12 24
 	<dependencies>
13
-		<!-- springframe start -->
14
-		<dependency>
15
-			<groupId>org.springframework</groupId>
16
-			<artifactId>spring-webmvc</artifactId>
17
-			<version>${spring.version}</version>
18
-		</dependency>
19
-		<dependency>
20
-			<groupId>org.springframework</groupId>
21
-			<artifactId>spring-context-support</artifactId>
22
-			<version>${spring.version}</version>
23
-		</dependency>
24
-		<dependency>
25
-			<groupId>org.springframework</groupId>
26
-			<artifactId>spring-orm</artifactId>
27
-			<version>${spring.version}</version>
28
-		</dependency>
29
-		<dependency>
30
-			<groupId>org.springframework</groupId>
31
-			<artifactId>spring-test</artifactId>
32
-			<version>${spring.version}</version>
33
-		</dependency>
34
-		<!-- springframe end -->
35
-		<!-- aspectjweaver (support spring aop) -->
36
-		<dependency>
37
-			<groupId>org.aspectj</groupId>
38
-			<artifactId>aspectjweaver</artifactId>
39
-			<version>${aspectjweaver.version}</version>
40
-		</dependency>
41
-		<!-- jackson (support spring json) -->
42
-		<dependency>
43
-			<groupId>com.fasterxml.jackson.core</groupId>
44
-			<artifactId>jackson-databind</artifactId>
45
-			<version>${jackson.version}</version>
46
-		</dependency>
47 25
 
48
-		<!-- servlet -->
26
+		<!-- starter-web:spring-webmvc + autoconfigure + logback + yaml + tomcat -->
49 27
 		<dependency>
50
-			<groupId>javax.servlet</groupId>
51
-			<artifactId>javax.servlet-api</artifactId>
52
-			<version>${javax.servlet-api.version}</version>
28
+			<groupId>org.springframework.boot</groupId>
29
+			<artifactId>spring-boot-starter-web</artifactId>
53 30
 		</dependency>
31
+		<!-- starter-test:junit + spring-test + mockito -->
54 32
 		<dependency>
55
-			<groupId>javax.servlet.jsp</groupId>
56
-			<artifactId>javax.servlet.jsp-api</artifactId>
57
-			<version>${javax.servlet.jsp-api.version}</version>
33
+			<groupId>org.springframework.boot</groupId>
34
+			<artifactId>spring-boot-starter-test</artifactId>
35
+			<scope>test</scope>
58 36
 		</dependency>
59 37
 
60
-		<!-- freemarker -->
38
+		<!-- freemarker-starter -->
61 39
 		<dependency>
62
-			<groupId>org.freemarker</groupId>
63
-			<artifactId>freemarker</artifactId>
64
-			<version>${freemarker.version}</version>
40
+			<groupId>org.springframework.boot</groupId>
41
+			<artifactId>spring-boot-starter-freemarker</artifactId>
65 42
 		</dependency>
66 43
 
67
-		<!-- slf4j -->
44
+
45
+		<!-- mybatis-starter:mybatis + mybatis-spring + tomcat-jdbc(default) -->
68 46
 		<dependency>
69
-			<groupId>org.slf4j</groupId>
70
-			<artifactId>slf4j-log4j12</artifactId>
71
-			<version>${slf4j-api.version}</version>
47
+			<groupId>org.mybatis.spring.boot</groupId>
48
+			<artifactId>mybatis-spring-boot-starter</artifactId>
49
+			<version>${mybatis-spring-boot-starter.version}</version>
72 50
 		</dependency>
73
-		<!-- junit -->
51
+
52
+		<!-- mysql -->
74 53
 		<dependency>
75
-			<groupId>junit</groupId>
76
-			<artifactId>junit</artifactId>
77
-			<version>${junit.version}</version>
78
-			<scope>test</scope>
54
+			<groupId>mysql</groupId>
55
+			<artifactId>mysql-connector-java</artifactId>
56
+			<version>${mysql-connector-java.version}</version>
79 57
 		</dependency>
80 58
 
59
+
81 60
 		<!-- commons-collections4 -->
82 61
 		<dependency>
83 62
 			<groupId>org.apache.commons</groupId>
@@ -97,36 +76,6 @@
97 76
 			<version>${commons-email.version}</version>
98 77
 		</dependency>
99 78
 
100
-		<!-- c3p0 -->
101
-		<dependency>
102
-			<groupId>com.mchange</groupId>
103
-			<artifactId>c3p0</artifactId>
104
-			<version>${c3p0.version}</version>
105
-		</dependency>
106
-		<!-- mysql-connector -->
107
-		<dependency>
108
-			<groupId>mysql</groupId>
109
-			<artifactId>mysql-connector-java</artifactId>
110
-			<version>${mysql-connector-java.version}</version>
111
-		</dependency>
112
-		<!-- mybatis-spring -->
113
-		<dependency>
114
-			<groupId>org.mybatis</groupId>
115
-			<artifactId>mybatis-spring</artifactId>
116
-			<version>${mybatis-spring.version}</version>
117
-		</dependency>
118
-		<dependency>
119
-			<groupId>org.mybatis</groupId>
120
-			<artifactId>mybatis</artifactId>
121
-			<version>${mybatis.version}</version>
122
-		</dependency>
123
-
124
-		<!-- httpclient -->
125
-		<dependency>
126
-			<groupId>org.apache.httpcomponents</groupId>
127
-			<artifactId>httpclient</artifactId>
128
-			<version>${httpclient.version}</version>
129
-		</dependency>
130 79
 
131 80
 		<!-- quartz :quartz-2.2.3/c3p0-0.9.1.1/slf4j-api-1.6.6 -->
132 81
 		<dependency>
@@ -135,6 +84,7 @@
135 84
 			<version>${quartz.version}</version>
136 85
 		</dependency>
137 86
 
87
+
138 88
 		<!-- xxl-job-core -->
139 89
 		<dependency>
140 90
 			<groupId>com.xuxueli</groupId>

+ 16 - 0
xxl-job-admin/src/main/java/com/xxl/job/admin/XxlJobAdminApplication.java Visa fil

@@ -0,0 +1,16 @@
1
+package com.xxl.job.admin;
2
+
3
+import org.springframework.boot.SpringApplication;
4
+import org.springframework.boot.autoconfigure.SpringBootApplication;
5
+
6
+/**
7
+ * @author xuxueli 2018-10-28 00:38:13
8
+ */
9
+@SpringBootApplication
10
+public class XxlJobAdminApplication {
11
+
12
+	public static void main(String[] args) {
13
+        SpringApplication.run(XxlJobAdminApplication.class, args);
14
+	}
15
+
16
+}

+ 2 - 1
xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobGroupController.java Visa fil

@@ -1,5 +1,6 @@
1 1
 package com.xxl.job.admin.controller;
2 2
 
3
+import com.xxl.job.admin.core.conf.XxlJobAdminConfig;
3 4
 import com.xxl.job.admin.core.model.XxlJobGroup;
4 5
 import com.xxl.job.admin.core.model.XxlJobRegistry;
5 6
 import com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler;
@@ -115,7 +116,7 @@ public class JobGroupController {
115 116
 
116 117
 	private List<String> findRegistryByAppName(String appNameParam){
117 118
 		HashMap<String, List<String>> appAddressMap = new HashMap<String, List<String>>();
118
-		List<XxlJobRegistry> list = XxlJobDynamicScheduler.xxlJobRegistryDao.findAll(RegistryConfig.DEAD_TIMEOUT);
119
+		List<XxlJobRegistry> list = XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().findAll(RegistryConfig.DEAD_TIMEOUT);
119 120
 		if (list != null) {
120 121
 			for (XxlJobRegistry item: list) {
121 122
 				if (RegistryConfig.RegistType.EXECUTOR.name().equals(item.getRegistryGroup())) {

+ 2 - 0
xxl-job-admin/src/main/java/com/xxl/job/admin/controller/interceptor/CookieInterceptor.java Visa fil

@@ -3,6 +3,7 @@ package com.xxl.job.admin.controller.interceptor;
3 3
 import com.xxl.job.admin.core.util.FtlUtil;
4 4
 import com.xxl.job.admin.core.util.I18nUtil;
5 5
 import org.apache.commons.lang3.ArrayUtils;
6
+import org.springframework.stereotype.Component;
6 7
 import org.springframework.web.servlet.ModelAndView;
7 8
 import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
8 9
 
@@ -16,6 +17,7 @@ import java.util.HashMap;
16 17
  *
17 18
  * @author xuxueli 2015-12-12 18:09:04
18 19
  */
20
+@Component
19 21
 public class CookieInterceptor extends HandlerInterceptorAdapter {
20 22
 
21 23
 	@Override

+ 17 - 14
xxl-job-admin/src/main/java/com/xxl/job/admin/controller/interceptor/PermissionInterceptor.java Visa fil

@@ -4,6 +4,7 @@ import com.xxl.job.admin.controller.annotation.PermessionLimit;
4 4
 import com.xxl.job.admin.core.conf.XxlJobAdminConfig;
5 5
 import com.xxl.job.admin.core.util.CookieUtil;
6 6
 import org.apache.commons.codec.digest.DigestUtils;
7
+import org.springframework.stereotype.Component;
7 8
 import org.springframework.web.method.HandlerMethod;
8 9
 import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
9 10
 
@@ -16,23 +17,25 @@ import java.math.BigInteger;
16 17
  *
17 18
  * @author xuxueli 2015-12-12 18:09:04
18 19
  */
20
+@Component
19 21
 public class PermissionInterceptor extends HandlerInterceptorAdapter {
20 22
 
21 23
 
22 24
 	public static final String LOGIN_IDENTITY_KEY = "XXL_JOB_LOGIN_IDENTITY";
23
-	public static final String LOGIN_IDENTITY_TOKEN;
24
-    static {
25
-        String username = XxlJobAdminConfig.getAdminConfig().getLoginUsername();
26
-        String password = XxlJobAdminConfig.getAdminConfig().getLoginPassword();
27
-
28
-        // login token
29
-        String tokenTmp = DigestUtils.md5Hex(username + "_" + password);
30
-		tokenTmp = new BigInteger(1, tokenTmp.getBytes()).toString(16);
31
-
32
-		LOGIN_IDENTITY_TOKEN = tokenTmp;
33
-    }
25
+	private static String LOGIN_IDENTITY_TOKEN;
26
+	public static String getLoginIdentityToken() {
27
+		if (LOGIN_IDENTITY_TOKEN == null) {
28
+			String username = XxlJobAdminConfig.getAdminConfig().getLoginUsername();
29
+			String password = XxlJobAdminConfig.getAdminConfig().getLoginPassword();
34 30
 
31
+			// login token
32
+			String tokenTmp = DigestUtils.md5Hex(username + "_" + password);
33
+			tokenTmp = new BigInteger(1, tokenTmp.getBytes()).toString(16);
35 34
 
35
+			LOGIN_IDENTITY_TOKEN = tokenTmp;
36
+		}
37
+		return LOGIN_IDENTITY_TOKEN;
38
+	}
36 39
 
37 40
 	public static boolean login(HttpServletResponse response, String username, String password, boolean ifRemember){
38 41
 
@@ -40,12 +43,12 @@ public class PermissionInterceptor extends HandlerInterceptorAdapter {
40 43
 		String tokenTmp = DigestUtils.md5Hex(username + "_" + password);
41 44
 		tokenTmp = new BigInteger(1, tokenTmp.getBytes()).toString(16);
42 45
 
43
-		if (!LOGIN_IDENTITY_TOKEN.equals(tokenTmp)){
46
+		if (!getLoginIdentityToken().equals(tokenTmp)){
44 47
 			return false;
45 48
 		}
46 49
 
47 50
 		// do login
48
-		CookieUtil.set(response, LOGIN_IDENTITY_KEY, LOGIN_IDENTITY_TOKEN, ifRemember);
51
+		CookieUtil.set(response, LOGIN_IDENTITY_KEY, getLoginIdentityToken(), ifRemember);
49 52
 		return true;
50 53
 	}
51 54
 	public static void logout(HttpServletRequest request, HttpServletResponse response){
@@ -53,7 +56,7 @@ public class PermissionInterceptor extends HandlerInterceptorAdapter {
53 56
 	}
54 57
 	public static boolean ifLogin(HttpServletRequest request){
55 58
 		String indentityInfo = CookieUtil.getValue(request, LOGIN_IDENTITY_KEY);
56
-		if (indentityInfo==null || !LOGIN_IDENTITY_TOKEN.equals(indentityInfo.trim())) {
59
+		if (indentityInfo==null || !getLoginIdentityToken().equals(indentityInfo.trim())) {
57 60
 			return false;
58 61
 		}
59 62
 		return true;

+ 29 - 0
xxl-job-admin/src/main/java/com/xxl/job/admin/controller/interceptor/WebMvcConfig.java Visa fil

@@ -0,0 +1,29 @@
1
+package com.xxl.job.admin.controller.interceptor;
2
+
3
+import org.springframework.context.annotation.Configuration;
4
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
5
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
6
+
7
+import javax.annotation.Resource;
8
+
9
+/**
10
+ * web mvc config
11
+ *
12
+ * @author xuxueli 2018-04-02 20:48:20
13
+ */
14
+@Configuration
15
+public class WebMvcConfig extends WebMvcConfigurerAdapter {
16
+
17
+    @Resource
18
+    private PermissionInterceptor permissionInterceptor;
19
+    @Resource
20
+    private CookieInterceptor cookieInterceptor;
21
+
22
+    @Override
23
+    public void addInterceptors(InterceptorRegistry registry) {
24
+        registry.addInterceptor(permissionInterceptor).addPathPatterns("/**");
25
+        registry.addInterceptor(cookieInterceptor).addPathPatterns("/**");
26
+        super.addInterceptors(registry);
27
+    }
28
+
29
+}

+ 3 - 0
xxl-job-admin/src/main/java/com/xxl/job/admin/controller/resolver/WebExceptionResolver.java Visa fil

@@ -4,6 +4,7 @@ import com.xxl.job.core.biz.model.ReturnT;
4 4
 import com.xxl.job.core.util.JacksonUtil;
5 5
 import org.slf4j.Logger;
6 6
 import org.slf4j.LoggerFactory;
7
+import org.springframework.stereotype.Component;
7 8
 import org.springframework.web.bind.annotation.ResponseBody;
8 9
 import org.springframework.web.method.HandlerMethod;
9 10
 import org.springframework.web.servlet.HandlerExceptionResolver;
@@ -15,8 +16,10 @@ import java.io.IOException;
15 16
 
16 17
 /**
17 18
  * common exception resolver
19
+ *
18 20
  * @author xuxueli 2016-1-6 19:22:18
19 21
  */
22
+@Component
20 23
 public class WebExceptionResolver implements HandlerExceptionResolver {
21 24
 	private static transient Logger logger = LoggerFactory.getLogger(WebExceptionResolver.class);
22 25
 

+ 49 - 0
xxl-job-admin/src/main/java/com/xxl/job/admin/core/conf/XxlJobAdminConfig.java Visa fil

@@ -1,9 +1,16 @@
1 1
 package com.xxl.job.admin.core.conf;
2 2
 
3
+import com.xxl.job.admin.dao.XxlJobGroupDao;
4
+import com.xxl.job.admin.dao.XxlJobInfoDao;
5
+import com.xxl.job.admin.dao.XxlJobLogDao;
6
+import com.xxl.job.admin.dao.XxlJobRegistryDao;
7
+import com.xxl.job.core.biz.AdminBiz;
3 8
 import org.springframework.beans.factory.InitializingBean;
4 9
 import org.springframework.beans.factory.annotation.Value;
5 10
 import org.springframework.context.annotation.Configuration;
6 11
 
12
+import javax.annotation.Resource;
13
+
7 14
 /**
8 15
  * xxl-job config
9 16
  *
@@ -21,6 +28,8 @@ public class XxlJobAdminConfig implements InitializingBean{
21 28
         adminConfig = this;
22 29
     }
23 30
 
31
+    // conf
32
+
24 33
     @Value("${xxl.job.mail.host}")
25 34
     private String mailHost;
26 35
 
@@ -48,6 +57,22 @@ public class XxlJobAdminConfig implements InitializingBean{
48 57
     @Value("${xxl.job.i18n}")
49 58
     private String i18n;
50 59
 
60
+    @Value("${xxl.job.accessToken}")
61
+    private String accessToken;
62
+
63
+    // dao, service
64
+
65
+    @Resource
66
+    public XxlJobLogDao xxlJobLogDao;
67
+    @Resource
68
+    public XxlJobInfoDao xxlJobInfoDao;
69
+    @Resource
70
+    public XxlJobRegistryDao xxlJobRegistryDao;
71
+    @Resource
72
+    public XxlJobGroupDao xxlJobGroupDao;
73
+    @Resource
74
+    public AdminBiz adminBiz;
75
+
51 76
 
52 77
     public String getMailHost() {
53 78
         return mailHost;
@@ -85,4 +110,28 @@ public class XxlJobAdminConfig implements InitializingBean{
85 110
         return i18n;
86 111
     }
87 112
 
113
+    public String getAccessToken() {
114
+        return accessToken;
115
+    }
116
+
117
+    public XxlJobLogDao getXxlJobLogDao() {
118
+        return xxlJobLogDao;
119
+    }
120
+
121
+    public XxlJobInfoDao getXxlJobInfoDao() {
122
+        return xxlJobInfoDao;
123
+    }
124
+
125
+    public XxlJobRegistryDao getXxlJobRegistryDao() {
126
+        return xxlJobRegistryDao;
127
+    }
128
+
129
+    public XxlJobGroupDao getXxlJobGroupDao() {
130
+        return xxlJobGroupDao;
131
+    }
132
+
133
+    public AdminBiz getAdminBiz() {
134
+        return adminBiz;
135
+    }
136
+
88 137
 }

+ 43 - 0
xxl-job-admin/src/main/java/com/xxl/job/admin/core/conf/XxlJobDynamicSchedulerConfig.java Visa fil

@@ -0,0 +1,43 @@
1
+package com.xxl.job.admin.core.conf;
2
+
3
+import com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler;
4
+import org.quartz.Scheduler;
5
+import org.springframework.context.annotation.Bean;
6
+import org.springframework.context.annotation.Configuration;
7
+import org.springframework.core.io.ClassPathResource;
8
+import org.springframework.scheduling.quartz.SchedulerFactoryBean;
9
+
10
+import javax.sql.DataSource;
11
+
12
+/**
13
+ * @author xuxueli 2018-10-28 00:18:17
14
+ */
15
+@Configuration
16
+public class XxlJobDynamicSchedulerConfig {
17
+
18
+    @Bean
19
+    public SchedulerFactoryBean getSchedulerFactoryBean(DataSource dataSource){
20
+
21
+        SchedulerFactoryBean schedulerFactory = new SchedulerFactoryBean();
22
+        schedulerFactory.setDataSource(dataSource);
23
+        schedulerFactory.setAutoStartup(true);                  // 自动启动
24
+        schedulerFactory.setStartupDelay(20);                   // 延时启动,应用启动成功后在启动
25
+        schedulerFactory.setOverwriteExistingJobs(true);        // 覆盖DB中JOB:true、以数据库中已经存在的为准:false
26
+        schedulerFactory.setApplicationContextSchedulerContextKey("applicationContext");
27
+        schedulerFactory.setConfigLocation(new ClassPathResource("quartz.properties"));
28
+
29
+        return schedulerFactory;
30
+    }
31
+
32
+    @Bean(initMethod = "start", destroyMethod = "destroy")
33
+    public XxlJobDynamicScheduler getXxlJobDynamicScheduler(SchedulerFactoryBean schedulerFactory){
34
+
35
+        Scheduler scheduler = schedulerFactory.getScheduler();
36
+
37
+        XxlJobDynamicScheduler xxlJobDynamicScheduler = new XxlJobDynamicScheduler();
38
+        xxlJobDynamicScheduler.setScheduler(scheduler);
39
+
40
+        return xxlJobDynamicScheduler;
41
+    }
42
+
43
+}

+ 10 - 27
xxl-job-admin/src/main/java/com/xxl/job/admin/core/schedule/XxlJobDynamicScheduler.java Visa fil

@@ -1,5 +1,6 @@
1 1
 package com.xxl.job.admin.core.schedule;
2 2
 
3
+import com.xxl.job.admin.core.conf.XxlJobAdminConfig;
3 4
 import com.xxl.job.admin.core.jobbean.RemoteHttpJobBean;
4 5
 import com.xxl.job.admin.core.model.XxlJobInfo;
5 6
 import com.xxl.job.admin.core.thread.JobFailMonitorHelper;
@@ -21,6 +22,8 @@ import org.quartz.impl.triggers.CronTriggerImpl;
21 22
 import org.slf4j.Logger;
22 23
 import org.slf4j.LoggerFactory;
23 24
 import org.springframework.beans.BeansException;
25
+import org.springframework.beans.factory.DisposableBean;
26
+import org.springframework.beans.factory.InitializingBean;
24 27
 import org.springframework.context.ApplicationContext;
25 28
 import org.springframework.context.ApplicationContextAware;
26 29
 import org.springframework.util.Assert;
@@ -33,7 +36,7 @@ import java.util.concurrent.ConcurrentHashMap;
33 36
  * base quartz scheduler util
34 37
  * @author xuxueli 2015-12-19 16:13:53
35 38
  */
36
-public final class XxlJobDynamicScheduler implements ApplicationContextAware {
39
+public final class XxlJobDynamicScheduler {
37 40
     private static final Logger logger = LoggerFactory.getLogger(XxlJobDynamicScheduler.class);
38 41
 
39 42
     // ---------------------- param ----------------------
@@ -44,31 +47,9 @@ public final class XxlJobDynamicScheduler implements ApplicationContextAware {
44 47
 		XxlJobDynamicScheduler.scheduler = scheduler;
45 48
 	}
46 49
 
47
-	// accessToken
48
-    private static String accessToken;
49
-    public void setAccessToken(String accessToken) {
50
-        this.accessToken = accessToken;
51
-    }
52
-
53
-    // dao
54
-    public static XxlJobLogDao xxlJobLogDao;
55
-    public static XxlJobInfoDao xxlJobInfoDao;
56
-    public static XxlJobRegistryDao xxlJobRegistryDao;
57
-    public static XxlJobGroupDao xxlJobGroupDao;
58
-    public static AdminBiz adminBiz;
59
-
60
-    // ---------------------- applicationContext ----------------------
61
-    @Override
62
-	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
63
-		XxlJobDynamicScheduler.xxlJobLogDao = applicationContext.getBean(XxlJobLogDao.class);
64
-		XxlJobDynamicScheduler.xxlJobInfoDao = applicationContext.getBean(XxlJobInfoDao.class);
65
-        XxlJobDynamicScheduler.xxlJobRegistryDao = applicationContext.getBean(XxlJobRegistryDao.class);
66
-        XxlJobDynamicScheduler.xxlJobGroupDao = applicationContext.getBean(XxlJobGroupDao.class);
67
-        XxlJobDynamicScheduler.adminBiz = applicationContext.getBean(AdminBiz.class);
68
-	}
69 50
 
70 51
     // ---------------------- init + destroy ----------------------
71
-    public void init() throws Exception {
52
+    public void start() throws Exception {
72 53
         // admin registry monitor run
73 54
         JobRegistryMonitorHelper.getInstance().start();
74 55
 
@@ -76,8 +57,8 @@ public final class XxlJobDynamicScheduler implements ApplicationContextAware {
76 57
         JobFailMonitorHelper.getInstance().start();
77 58
 
78 59
         // admin-server(spring-mvc)
79
-        NetComServerFactory.putService(AdminBiz.class, XxlJobDynamicScheduler.adminBiz);
80
-        NetComServerFactory.setAccessToken(accessToken);
60
+        NetComServerFactory.putService(AdminBiz.class, XxlJobAdminConfig.getAdminConfig().getAdminBiz());
61
+        NetComServerFactory.setAccessToken(XxlJobAdminConfig.getAdminConfig().getAccessToken());
81 62
 
82 63
         // init i18n
83 64
         initI18n();
@@ -105,6 +86,7 @@ public final class XxlJobDynamicScheduler implements ApplicationContextAware {
105 86
         JobFailMonitorHelper.getInstance().toStop();
106 87
     }
107 88
 
89
+
108 90
     // ---------------------- executor-client ----------------------
109 91
     private static ConcurrentHashMap<String, ExecutorBiz> executorBizRepository = new ConcurrentHashMap<String, ExecutorBiz>();
110 92
     public static ExecutorBiz getExecutorBiz(String address) throws Exception {
@@ -121,7 +103,7 @@ public final class XxlJobDynamicScheduler implements ApplicationContextAware {
121 103
         }
122 104
 
123 105
         // set-cache
124
-        executorBiz = (ExecutorBiz) new NetComClientProxy(ExecutorBiz.class, address, accessToken).getObject();
106
+        executorBiz = (ExecutorBiz) new NetComClientProxy(ExecutorBiz.class, address, XxlJobAdminConfig.getAdminConfig().getAccessToken()).getObject();
125 107
         executorBizRepository.put(address, executorBiz);
126 108
         return executorBiz;
127 109
     }
@@ -362,6 +344,7 @@ public final class XxlJobDynamicScheduler implements ApplicationContextAware {
362 344
         return result;
363 345
     }
364 346
 
347
+
365 348
     /**
366 349
      * finaAllJobList
367 350
      *

+ 7 - 6
xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobFailMonitorHelper.java Visa fil

@@ -1,5 +1,6 @@
1 1
 package com.xxl.job.admin.core.thread;
2 2
 
3
+import com.xxl.job.admin.core.conf.XxlJobAdminConfig;
3 4
 import com.xxl.job.admin.core.model.XxlJobGroup;
4 5
 import com.xxl.job.admin.core.model.XxlJobInfo;
5 6
 import com.xxl.job.admin.core.model.XxlJobLog;
@@ -52,7 +53,7 @@ public class JobFailMonitorHelper {
52 53
 								if (jobLogId==null || jobLogId==0) {
53 54
 									continue;
54 55
 								}
55
-								XxlJobLog log = XxlJobDynamicScheduler.xxlJobLogDao.load(jobLogId);
56
+								XxlJobLog log = XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().load(jobLogId);
56 57
 								if (log == null) {
57 58
 									continue;
58 59
 								}
@@ -70,13 +71,13 @@ public class JobFailMonitorHelper {
70 71
 									// job fail,
71 72
 
72 73
 									// 1、fail retry
73
-									XxlJobInfo info = XxlJobDynamicScheduler.xxlJobInfoDao.loadById(log.getJobId());
74
+									XxlJobInfo info = XxlJobAdminConfig.getAdminConfig().getXxlJobInfoDao().loadById(log.getJobId());
74 75
 
75 76
 									if (log.getExecutorFailRetryCount() > 0) {
76 77
 										JobTriggerPoolHelper.trigger(log.getJobId(), TriggerTypeEnum.RETRY, (log.getExecutorFailRetryCount()-1), log.getExecutorShardingParam(), null);
77 78
 										String retryMsg = "<br><br><span style=\"color:#F39C12;\" > >>>>>>>>>>>"+ I18nUtil.getString("jobconf_trigger_type_retry") +"<<<<<<<<<<< </span><br>";
78 79
 										log.setTriggerMsg(log.getTriggerMsg() + retryMsg);
79
-										XxlJobDynamicScheduler.xxlJobLogDao.updateTriggerInfo(log);
80
+										XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().updateTriggerInfo(log);
80 81
 									}
81 82
 
82 83
 									// 2、fail alarm
@@ -101,10 +102,10 @@ public class JobFailMonitorHelper {
101 102
 				int drainToNum = getInstance().queue.drainTo(jobLogIdList);
102 103
 				if (jobLogIdList!=null && jobLogIdList.size()>0) {
103 104
 					for (Integer jobLogId: jobLogIdList) {
104
-						XxlJobLog log = XxlJobDynamicScheduler.xxlJobLogDao.load(jobLogId);
105
+						XxlJobLog log = XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().load(jobLogId);
105 106
 						if (ReturnT.FAIL_CODE == log.getTriggerCode()|| ReturnT.FAIL_CODE==log.getHandleCode()) {
106 107
 							// job fail,
107
-							XxlJobInfo info = XxlJobDynamicScheduler.xxlJobInfoDao.loadById(log.getJobId());
108
+							XxlJobInfo info = XxlJobAdminConfig.getAdminConfig().getXxlJobInfoDao().loadById(log.getJobId());
108 109
 
109 110
 							failAlarm(info, log);
110 111
 							logger.info(">>>>>>>>>>> job monitor last, job fail, JobLogId:{}", jobLogId);
@@ -180,7 +181,7 @@ public class JobFailMonitorHelper {
180 181
 
181 182
 			Set<String> emailSet = new HashSet<String>(Arrays.asList(info.getAlarmEmail().split(",")));
182 183
 			for (String email: emailSet) {
183
-				XxlJobGroup group = XxlJobDynamicScheduler.xxlJobGroupDao.load(Integer.valueOf(info.getJobGroup()));
184
+				XxlJobGroup group = XxlJobAdminConfig.getAdminConfig().getXxlJobGroupDao().load(Integer.valueOf(info.getJobGroup()));
184 185
 
185 186
 				String title = I18nUtil.getString("jobconf_monitor");
186 187
 				String content = MessageFormat.format(mailBodyTemplate,

+ 5 - 4
xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryMonitorHelper.java Visa fil

@@ -1,5 +1,6 @@
1 1
 package com.xxl.job.admin.core.thread;
2 2
 
3
+import com.xxl.job.admin.core.conf.XxlJobAdminConfig;
3 4
 import com.xxl.job.admin.core.model.XxlJobGroup;
4 5
 import com.xxl.job.admin.core.model.XxlJobRegistry;
5 6
 import com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler;
@@ -36,15 +37,15 @@ public class JobRegistryMonitorHelper {
36 37
 				while (!toStop) {
37 38
 					try {
38 39
 						// auto registry group
39
-						List<XxlJobGroup> groupList = XxlJobDynamicScheduler.xxlJobGroupDao.findByAddressType(0);
40
+						List<XxlJobGroup> groupList = XxlJobAdminConfig.getAdminConfig().getXxlJobGroupDao().findByAddressType(0);
40 41
 						if (CollectionUtils.isNotEmpty(groupList)) {
41 42
 
42 43
 							// remove dead address (admin/executor)
43
-							XxlJobDynamicScheduler.xxlJobRegistryDao.removeDead(RegistryConfig.DEAD_TIMEOUT);
44
+							XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().removeDead(RegistryConfig.DEAD_TIMEOUT);
44 45
 
45 46
 							// fresh online address (admin/executor)
46 47
 							HashMap<String, List<String>> appAddressMap = new HashMap<String, List<String>>();
47
-							List<XxlJobRegistry> list = XxlJobDynamicScheduler.xxlJobRegistryDao.findAll(RegistryConfig.DEAD_TIMEOUT);
48
+							List<XxlJobRegistry> list = XxlJobAdminConfig.getAdminConfig().getXxlJobRegistryDao().findAll(RegistryConfig.DEAD_TIMEOUT);
48 49
 							if (list != null) {
49 50
 								for (XxlJobRegistry item: list) {
50 51
 									if (RegistryConfig.RegistType.EXECUTOR.name().equals(item.getRegistryGroup())) {
@@ -71,7 +72,7 @@ public class JobRegistryMonitorHelper {
71 72
 									addressListStr = StringUtils.join(registryList, ",");
72 73
 								}
73 74
 								group.setAddressList(addressListStr);
74
-								XxlJobDynamicScheduler.xxlJobGroupDao.update(group);
75
+								XxlJobAdminConfig.getAdminConfig().getXxlJobGroupDao().update(group);
75 76
 							}
76 77
 						}
77 78
 					} catch (Exception e) {

+ 5 - 4
xxl-job-admin/src/main/java/com/xxl/job/admin/core/trigger/XxlJobTrigger.java Visa fil

@@ -1,5 +1,6 @@
1 1
 package com.xxl.job.admin.core.trigger;
2 2
 
3
+import com.xxl.job.admin.core.conf.XxlJobAdminConfig;
3 4
 import com.xxl.job.admin.core.model.XxlJobGroup;
4 5
 import com.xxl.job.admin.core.model.XxlJobInfo;
5 6
 import com.xxl.job.admin.core.model.XxlJobLog;
@@ -41,7 +42,7 @@ public class XxlJobTrigger {
41 42
      */
42 43
     public static void trigger(int jobId, TriggerTypeEnum triggerType, int failRetryCount, String executorShardingParam, String executorParam) {
43 44
         // load data
44
-        XxlJobInfo jobInfo = XxlJobDynamicScheduler.xxlJobInfoDao.loadById(jobId);
45
+        XxlJobInfo jobInfo = XxlJobAdminConfig.getAdminConfig().getXxlJobInfoDao().loadById(jobId);
45 46
         if (jobInfo == null) {
46 47
             logger.warn(">>>>>>>>>>>> trigger fail, jobId invalid,jobId={}", jobId);
47 48
             return;
@@ -50,7 +51,7 @@ public class XxlJobTrigger {
50 51
             jobInfo.setExecutorParam(executorParam);
51 52
         }
52 53
         int finalFailRetryCount = failRetryCount>=0?failRetryCount:jobInfo.getExecutorFailRetryCount();
53
-        XxlJobGroup group = XxlJobDynamicScheduler.xxlJobGroupDao.load(jobInfo.getJobGroup());
54
+        XxlJobGroup group = XxlJobAdminConfig.getAdminConfig().getXxlJobGroupDao().load(jobInfo.getJobGroup());
54 55
 
55 56
         // sharding param
56 57
         int[] shardingParam = null;
@@ -96,7 +97,7 @@ public class XxlJobTrigger {
96 97
         jobLog.setJobGroup(jobInfo.getJobGroup());
97 98
         jobLog.setJobId(jobInfo.getId());
98 99
         jobLog.setTriggerTime(new Date());
99
-        XxlJobDynamicScheduler.xxlJobLogDao.save(jobLog);
100
+        XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().save(jobLog);
100 101
         logger.debug(">>>>>>>>>>> xxl-job trigger start, jobId:{}", jobLog.getId());
101 102
 
102 103
         // 2、init trigger-param
@@ -169,7 +170,7 @@ public class XxlJobTrigger {
169 170
         //jobLog.setTriggerTime();
170 171
         jobLog.setTriggerCode(triggerResult.getCode());
171 172
         jobLog.setTriggerMsg(triggerMsgSb.toString());
172
-        XxlJobDynamicScheduler.xxlJobLogDao.updateTriggerInfo(jobLog);
173
+        XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().updateTriggerInfo(jobLog);
173 174
 
174 175
         // 7、monitor trigger
175 176
         JobFailMonitorHelper.monitor(jobLog.getId());

+ 2 - 0
xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobGroupDao.java Visa fil

@@ -1,6 +1,7 @@
1 1
 package com.xxl.job.admin.dao;
2 2
 
3 3
 import com.xxl.job.admin.core.model.XxlJobGroup;
4
+import org.apache.ibatis.annotations.Mapper;
4 5
 import org.apache.ibatis.annotations.Param;
5 6
 
6 7
 import java.util.List;
@@ -8,6 +9,7 @@ import java.util.List;
8 9
 /**
9 10
  * Created by xuxueli on 16/9/30.
10 11
  */
12
+@Mapper
11 13
 public interface XxlJobGroupDao {
12 14
 
13 15
     public List<XxlJobGroup> findAll();

+ 2 - 0
xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobInfoDao.java Visa fil

@@ -1,6 +1,7 @@
1 1
 package com.xxl.job.admin.dao;
2 2
 
3 3
 import com.xxl.job.admin.core.model.XxlJobInfo;
4
+import org.apache.ibatis.annotations.Mapper;
4 5
 import org.apache.ibatis.annotations.Param;
5 6
 
6 7
 import java.util.List;
@@ -10,6 +11,7 @@ import java.util.List;
10 11
  * job info
11 12
  * @author xuxueli 2016-1-12 18:03:45
12 13
  */
14
+@Mapper
13 15
 public interface XxlJobInfoDao {
14 16
 
15 17
 	public List<XxlJobInfo> pageList(@Param("offset") int offset,

+ 2 - 0
xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobLogDao.java Visa fil

@@ -1,6 +1,7 @@
1 1
 package com.xxl.job.admin.dao;
2 2
 
3 3
 import com.xxl.job.admin.core.model.XxlJobLog;
4
+import org.apache.ibatis.annotations.Mapper;
4 5
 import org.apache.ibatis.annotations.Param;
5 6
 
6 7
 import java.util.Date;
@@ -11,6 +12,7 @@ import java.util.Map;
11 12
  * job log
12 13
  * @author xuxueli 2016-1-12 18:03:06
13 14
  */
15
+@Mapper
14 16
 public interface XxlJobLogDao {
15 17
 	
16 18
 	public List<XxlJobLog> pageList(@Param("offset") int offset,

+ 2 - 0
xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobLogGlueDao.java Visa fil

@@ -1,6 +1,7 @@
1 1
 package com.xxl.job.admin.dao;
2 2
 
3 3
 import com.xxl.job.admin.core.model.XxlJobLogGlue;
4
+import org.apache.ibatis.annotations.Mapper;
4 5
 import org.apache.ibatis.annotations.Param;
5 6
 
6 7
 import java.util.List;
@@ -9,6 +10,7 @@ import java.util.List;
9 10
  * job log for glue
10 11
  * @author xuxueli 2016-5-19 18:04:56
11 12
  */
13
+@Mapper
12 14
 public interface XxlJobLogGlueDao {
13 15
 	
14 16
 	public int save(XxlJobLogGlue xxlJobLogGlue);

+ 2 - 0
xxl-job-admin/src/main/java/com/xxl/job/admin/dao/XxlJobRegistryDao.java Visa fil

@@ -1,6 +1,7 @@
1 1
 package com.xxl.job.admin.dao;
2 2
 
3 3
 import com.xxl.job.admin.core.model.XxlJobRegistry;
4
+import org.apache.ibatis.annotations.Mapper;
4 5
 import org.apache.ibatis.annotations.Param;
5 6
 
6 7
 import java.util.List;
@@ -8,6 +9,7 @@ import java.util.List;
8 9
 /**
9 10
  * Created by xuxueli on 16/9/30.
10 11
  */
12
+@Mapper
11 13
 public interface XxlJobRegistryDao {
12 14
 
13 15
     public int removeDead(@Param("timeout") int timeout);

+ 45 - 0
xxl-job-admin/src/main/resources/application.properties Visa fil

@@ -0,0 +1,45 @@
1
+### web
2
+server.port=8080
3
+server.context-path=/xxl-job-admin
4
+
5
+### resources
6
+spring.mvc.static-path-pattern=/static/**
7
+spring.resources.static-locations=classpath:/static/
8
+
9
+### freemarker
10
+spring.freemarker.templateLoaderPath=classpath:/templates/
11
+spring.freemarker.suffix=.ftl
12
+spring.freemarker.charset=UTF-8
13
+spring.freemarker.request-context-attribute=request
14
+
15
+### mybatis
16
+mybatis.mapper-locations=classpath:/mybatis-mapper/*Mapper.xml
17
+
18
+### xxl-job, datasource
19
+spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl-job?Unicode=true&characterEncoding=UTF-8
20
+spring.datasource.username=root
21
+spring.datasource.password=root_pwd
22
+spring.datasource.driver-class-name=com.mysql.jdbc.Driver
23
+
24
+spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource
25
+spring.datasource.tomcat.max-wait=10000
26
+spring.datasource.tomcat.max-active=30
27
+spring.datasource.tomcat.test-on-borrow=true
28
+
29
+### xxl-job email
30
+xxl.job.mail.host=smtp.163.com
31
+xxl.job.mail.port=25
32
+xxl.job.mail.ssl=false
33
+xxl.job.mail.username=ovono802302@163.com
34
+xxl.job.mail.password=asdfzxcv
35
+xxl.job.mail.sendNick=《任务调度平台XXL-JOB》
36
+
37
+### xxl-job login
38
+xxl.job.login.username=admin
39
+xxl.job.login.password=123456
40
+
41
+### xxl-job, access token
42
+xxl.job.accessToken=
43
+
44
+### xxl-job, i18n (default empty as chinese, "en" as english)
45
+xxl.job.i18n=

+ 0 - 10
xxl-job-admin/src/main/resources/freemarker.properties Visa fil

@@ -1,10 +0,0 @@
1
-template_update_delay=0
2
-default_encoding=UTF-8
3
-output_encoding=UTF-8
4
-locale=zh_CN
5
-number_format=0.##########
6
-date_format=yyyy-MM-dd
7
-time_format=HH:mm:ss
8
-datetime_format=yyyy-MM-dd HH:mm:s
9
-classic_compatible=true
10
-template_exception_handler=ignore

+ 0 - 27
xxl-job-admin/src/main/resources/log4j.xml Visa fil

@@ -1,27 +0,0 @@
1
-<?xml version="1.0" encoding="UTF-8"?>
2
-<!DOCTYPE log4j:configuration PUBLIC "-//log4j/log4j Configuration//EN" "log4j.dtd">
3
-<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" threshold="null" debug="null">
4
-
5
-	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
6
-		<param name="Target" value="System.out" />
7
-		<layout class="org.apache.log4j.PatternLayout">
8
-            <param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss} xxl-job-admin [%c]-[%t]-[%M]-[%L]-[%p] %m%n"/>
9
-		</layout>
10
-	</appender>
11
-	
12
-    <appender name="FILE" class="org.apache.log4j.DailyRollingFileAppender">
13
-        <param name="file" value="/data/applogs/xxl-job/xxl-job-admin.log"/>
14
-        <param name="append" value="true"/>
15
-        <param name="encoding" value="UTF-8"/>
16
-        <layout class="org.apache.log4j.PatternLayout">
17
-            <param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss} xxl-job-admin [%c]-[%t]-[%M]-[%L]-[%p] %m%n"/>
18
-        </layout>
19
-    </appender>
20
-
21
-    <root>
22
-        <level value="INFO" />
23
-        <appender-ref ref="CONSOLE" />
24
-        <appender-ref ref="FILE" />
25
-    </root>
26
-
27
-</log4j:configuration>

+ 29 - 0
xxl-job-admin/src/main/resources/logback.xml Visa fil

@@ -0,0 +1,29 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<configuration debug="false" scan="true" scanPeriod="1 seconds">
3
+
4
+    <contextName>logback</contextName>
5
+    <property name="log.path" value="/data/applogs/xxl-job/xxl-job-admin.log"/>
6
+
7
+    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
8
+        <encoder>
9
+            <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern>
10
+        </encoder>
11
+    </appender>
12
+
13
+    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
14
+        <file>${log.path}</file>
15
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
16
+            <fileNamePattern>${log.path}.%d{yyyy-MM-dd}.zip</fileNamePattern>
17
+        </rollingPolicy>
18
+        <encoder>
19
+            <pattern>%date %level [%thread] %logger{36} [%file : %line] %msg%n
20
+            </pattern>
21
+        </encoder>
22
+    </appender>
23
+
24
+    <root level="info">
25
+        <appender-ref ref="console"/>
26
+        <appender-ref ref="file"/>
27
+    </root>
28
+
29
+</configuration>

+ 0 - 21
xxl-job-admin/src/main/resources/spring/applicationcontext-base.xml Visa fil

@@ -1,21 +0,0 @@
1
-<?xml version="1.0" encoding="UTF-8"?>
2
-<beans xmlns="http://www.springframework.org/schema/beans"
3
-	   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
-	   xmlns:context="http://www.springframework.org/schema/context"
5
-	   xsi:schemaLocation="http://www.springframework.org/schema/beans
6
-           http://www.springframework.org/schema/beans/spring-beans.xsd
7
-           http://www.springframework.org/schema/context
8
-           http://www.springframework.org/schema/context/spring-context.xsd">
9
-
10
-	<context:component-scan base-package="com.xxl.job.admin.core.conf, com.xxl.job.admin.service, com.xxl.job.admin.dao" />
11
-
12
-	<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
13
-		<property name="templateLoaderPath" value="/WEB-INF/template/" />
14
-		<property name="freemarkerSettings">
15
-			<bean class="org.springframework.beans.factory.config.PropertiesFactoryBean">
16
-				<property name="location" value="classpath:freemarker.properties" />
17
-			</bean>
18
-		</property>
19
-	</bean>
20
-
21
-</beans>

+ 0 - 71
xxl-job-admin/src/main/resources/spring/applicationcontext-xxl-job-admin.xml Visa fil

@@ -1,71 +0,0 @@
1
-<?xml version="1.0" encoding="UTF-8"?>
2
-<beans xmlns="http://www.springframework.org/schema/beans"
3
-	   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
-	   xmlns:tx="http://www.springframework.org/schema/tx"
5
-	   xsi:schemaLocation="http://www.springframework.org/schema/beans
6
-		http://www.springframework.org/schema/beans/spring-beans.xsd
7
-		http://www.springframework.org/schema/tx 
8
-		http://www.springframework.org/schema/tx/spring-tx.xsd">
9
-	
10
-	
11
-	<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
12
-		<property name="fileEncoding" value="utf-8" />
13
-		<property name="locations">
14
-			<list>
15
-				<value>classpath*:xxl-job-admin.properties</value>
16
-			</list>
17
-		</property>
18
-	</bean>
19
-
20
-	<!-- ********************************* part 1 :for datasource ********************************* -->
21
-
22
-	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"  destroy-method="close">
23
-	    <property name="driverClass" value="${xxl.job.db.driverClass}" />
24
-	    <property name="jdbcUrl" value="${xxl.job.db.url}" />
25
-	    <property name="user" value="${xxl.job.db.user}" />
26
-	    <property name="password" value="${xxl.job.db.password}" />
27
-	    <property name="initialPoolSize" value="3" />  
28
-	    <property name="minPoolSize" value="2" />  
29
-	    <property name="maxPoolSize" value="10" />  
30
-	    <property name="maxIdleTime" value="60" />
31
-	    <property name="acquireRetryDelay" value="1000" />
32
-	    <property name="acquireRetryAttempts" value="10" />
33
-	    <property name="preferredTestQuery" value="SELECT 1" />
34
-	</bean>
35
-	
36
-	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
37
-		<property name="dataSource" ref="dataSource" />
38
-		<property name="mapperLocations" value="classpath:mybatis-mapper/*.xml"/>
39
-	</bean>
40
-
41
-	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
42
-		<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
43
-		<property name="basePackage" value="com.xxl.job.admin.dao" />
44
-	</bean>
45
-    
46
-	<!-- ********************************* part 2 :for tx ********************************* -->
47
-
48
-    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
49
-		<property name="dataSource" ref="dataSource" />
50
-	</bean>
51
-      
52
-	<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
53
-
54
-	<!-- ********************************* part 3 :for xxl-job scheduler ********************************* -->
55
-
56
-	<bean id="quartzScheduler" lazy-init="false" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
57
-		<property name="dataSource" ref="dataSource" />
58
-		<property name="autoStartup" value="true" />			<!--自动启动 -->
59
-		<property name="startupDelay" value="20" />				<!--延时启动,应用启动成功后在启动 -->
60
-		<property name="overwriteExistingJobs" value="true" />	<!--覆盖DB中JOB:true、以数据库中已经存在的为准:false -->
61
-		<property name="applicationContextSchedulerContextKey"  value="applicationContextKey" />
62
-		<property name="configLocation" value="classpath:quartz.properties"/>
63
-	</bean>
64
-
65
-	<bean id="xxlJobDynamicScheduler" class="com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler" init-method="init" destroy-method="destroy" >
66
-		<!-- (轻易不要变更“调度器名称”, 任务创建时会绑定该“调度器名称”) -->
67
-		<property name="scheduler" ref="quartzScheduler"/>
68
-		<property name="accessToken" value="${xxl.job.accessToken}" />
69
-	</bean>
70
-	
71
-</beans>

+ 0 - 45
xxl-job-admin/src/main/resources/spring/springmvc-context.xml Visa fil

@@ -1,45 +0,0 @@
1
-<?xml version="1.0" encoding="UTF-8"?>
2
-<beans xmlns="http://www.springframework.org/schema/beans"
3
-	   xmlns:context="http://www.springframework.org/schema/context"
4
-	   xmlns:mvc="http://www.springframework.org/schema/mvc"
5
-	   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
6
-	   xsi:schemaLocation="http://www.springframework.org/schema/beans
7
-		http://www.springframework.org/schema/beans/spring-beans.xsd
8
-		http://www.springframework.org/schema/context 
9
-		http://www.springframework.org/schema/context/spring-context.xsd
10
-		http://www.springframework.org/schema/mvc
11
-		http://www.springframework.org/schema/mvc/spring-mvc.xsd">
12
-
13
-	<mvc:annotation-driven />
14
-	<context:component-scan base-package="com.xxl.job.admin.controller" />
15
-	
16
-	<mvc:resources mapping="/favicon.ico" location="/favicon.ico" />
17
-	<mvc:resources mapping="/static/**" location="/static/" />
18
-	<mvc:resources mapping="/**/*.html" location="/" />
19
-	
20
-	<bean id="viewResolver"	class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
21
-		<property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView" />
22
-		<property name="prefix" value="" />
23
-		<property name="suffix" value=".ftl" />
24
-		<property name="contentType" value="text/html;charset=UTF-8" />
25
-		<property name="exposeSpringMacroHelpers" value="true" />
26
-		<property name="exposeRequestAttributes" value="true" />
27
-		<property name="exposeSessionAttributes" value="true" />
28
-		<property name="requestContextAttribute" value="request" />
29
-		<property name="cache" value="true" />
30
-		<property name="order" value="0" />
31
-	</bean>
32
-	
33
- 	<mvc:interceptors>
34
-		<mvc:interceptor>
35
-			<mvc:mapping path="/**"/>
36
-			<bean class="com.xxl.job.admin.controller.interceptor.PermissionInterceptor"/>
37
-		</mvc:interceptor>
38
-		<mvc:interceptor>
39
-			<mvc:mapping path="/**"/>
40
-			<bean class="com.xxl.job.admin.controller.interceptor.CookieInterceptor"/>
41
-		</mvc:interceptor>
42
-	</mvc:interceptors>
43
-	<bean id="exceptionResolver" class="com.xxl.job.admin.controller.resolver.WebExceptionResolver" />
44
-	
45
-</beans>

xxl-job-admin/src/main/webapp/static/adminlte/bootstrap/css/bootstrap.css.map → xxl-job-admin/src/main/resources/static/adminlte/bootstrap/css/bootstrap.css.map Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/bootstrap/css/bootstrap.min.css → xxl-job-admin/src/main/resources/static/adminlte/bootstrap/css/bootstrap.min.css Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/bootstrap/fonts/glyphicons-halflings-regular.eot → xxl-job-admin/src/main/resources/static/adminlte/bootstrap/fonts/glyphicons-halflings-regular.eot Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/bootstrap/fonts/glyphicons-halflings-regular.svg → xxl-job-admin/src/main/resources/static/adminlte/bootstrap/fonts/glyphicons-halflings-regular.svg Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/bootstrap/fonts/glyphicons-halflings-regular.ttf → xxl-job-admin/src/main/resources/static/adminlte/bootstrap/fonts/glyphicons-halflings-regular.ttf Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/bootstrap/fonts/glyphicons-halflings-regular.woff → xxl-job-admin/src/main/resources/static/adminlte/bootstrap/fonts/glyphicons-halflings-regular.woff Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/bootstrap/fonts/glyphicons-halflings-regular.woff2 → xxl-job-admin/src/main/resources/static/adminlte/bootstrap/fonts/glyphicons-halflings-regular.woff2 Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/bootstrap/js/bootstrap.min.js → xxl-job-admin/src/main/resources/static/adminlte/bootstrap/js/bootstrap.min.js Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/dist/css/AdminLTE-local.min.css → xxl-job-admin/src/main/resources/static/adminlte/dist/css/AdminLTE-local.min.css Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/dist/css/AdminLTE.min.css → xxl-job-admin/src/main/resources/static/adminlte/dist/css/AdminLTE.min.css Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/dist/css/google-local/fonts/M2Jd71oPJhLKp0zdtTvoM40tgx99jmYGv_xzYuwd1rU.woff2 → xxl-job-admin/src/main/resources/static/adminlte/dist/css/google-local/fonts/M2Jd71oPJhLKp0zdtTvoM40tgx99jmYGv_xzYuwd1rU.woff2 Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/dist/css/google-local/fonts/M2Jd71oPJhLKp0zdtTvoM7YHq4FgHI02B8rPccK0FJQ.woff2 → xxl-job-admin/src/main/resources/static/adminlte/dist/css/google-local/fonts/M2Jd71oPJhLKp0zdtTvoM7YHq4FgHI02B8rPccK0FJQ.woff2 Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/dist/css/google-local/fonts/M2Jd71oPJhLKp0zdtTvoMxgy2Fsj5sj3EzlXpqVXRKo.woff2 → xxl-job-admin/src/main/resources/static/adminlte/dist/css/google-local/fonts/M2Jd71oPJhLKp0zdtTvoMxgy2Fsj5sj3EzlXpqVXRKo.woff2 Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/dist/css/google-local/fonts/ODelI1aHBYDBqgeIAH2zlC2Q8seG17bfDXYR_jUsrzg.woff2 → xxl-job-admin/src/main/resources/static/adminlte/dist/css/google-local/fonts/ODelI1aHBYDBqgeIAH2zlC2Q8seG17bfDXYR_jUsrzg.woff2 Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/dist/css/google-local/fonts/ODelI1aHBYDBqgeIAH2zlNOAHFN6BivSraYkjhveRHY.woff2 → xxl-job-admin/src/main/resources/static/adminlte/dist/css/google-local/fonts/ODelI1aHBYDBqgeIAH2zlNOAHFN6BivSraYkjhveRHY.woff2 Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/dist/css/google-local/fonts/ODelI1aHBYDBqgeIAH2zlNOAHFN6BivSraYkjhveRHY[0].woff2 → xxl-job-admin/src/main/resources/static/adminlte/dist/css/google-local/fonts/ODelI1aHBYDBqgeIAH2zlNOAHFN6BivSraYkjhveRHY[0].woff2 Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/dist/css/google-local/fonts/ODelI1aHBYDBqgeIAH2zlNV_2ngZ8dMf8fLgjYEouxg.woff2 → xxl-job-admin/src/main/resources/static/adminlte/dist/css/google-local/fonts/ODelI1aHBYDBqgeIAH2zlNV_2ngZ8dMf8fLgjYEouxg.woff2 Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/dist/css/google-local/fonts/fpTVHK8qsXbIeTHTrnQH6CzM2XYAq8cDhaXsrN8WXcA.woff2 → xxl-job-admin/src/main/resources/static/adminlte/dist/css/google-local/fonts/fpTVHK8qsXbIeTHTrnQH6CzM2XYAq8cDhaXsrN8WXcA.woff2 Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/dist/css/google-local/fonts/fpTVHK8qsXbIeTHTrnQH6E78GtRp3lhchupCJNw8t58.woff2 → xxl-job-admin/src/main/resources/static/adminlte/dist/css/google-local/fonts/fpTVHK8qsXbIeTHTrnQH6E78GtRp3lhchupCJNw8t58.woff2 Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/dist/css/google-local/fonts/fpTVHK8qsXbIeTHTrnQH6GQKuzMuncr0JB710wa2dPI.woff2 → xxl-job-admin/src/main/resources/static/adminlte/dist/css/google-local/fonts/fpTVHK8qsXbIeTHTrnQH6GQKuzMuncr0JB710wa2dPI.woff2 Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/dist/css/google-local/fonts/fpTVHK8qsXbIeTHTrnQH6Lpx497t94oDua8KfAL9f-E.woff2 → xxl-job-admin/src/main/resources/static/adminlte/dist/css/google-local/fonts/fpTVHK8qsXbIeTHTrnQH6Lpx497t94oDua8KfAL9f-E.woff2 Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/dist/css/google-local/fonts/fpTVHK8qsXbIeTHTrnQH6MAjkyiewWYrWZc50I8hK7I.woff2 → xxl-job-admin/src/main/resources/static/adminlte/dist/css/google-local/fonts/fpTVHK8qsXbIeTHTrnQH6MAjkyiewWYrWZc50I8hK7I.woff2 Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/dist/css/google-local/fonts/fpTVHK8qsXbIeTHTrnQH6OXKTZYPNtG1yMB_YJSqlic.woff2 → xxl-job-admin/src/main/resources/static/adminlte/dist/css/google-local/fonts/fpTVHK8qsXbIeTHTrnQH6OXKTZYPNtG1yMB_YJSqlic.woff2 Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/dist/css/google-local/fonts/toadOcfmlt9b38dHJxOBGCOFnW3Jk0f09zW_Yln67Ac.woff2 → xxl-job-admin/src/main/resources/static/adminlte/dist/css/google-local/fonts/toadOcfmlt9b38dHJxOBGCOFnW3Jk0f09zW_Yln67Ac.woff2 Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/dist/css/google-local/fonts/toadOcfmlt9b38dHJxOBGClYwVOhDRq2vbpGRTZ7bbs.woff2 → xxl-job-admin/src/main/resources/static/adminlte/dist/css/google-local/fonts/toadOcfmlt9b38dHJxOBGClYwVOhDRq2vbpGRTZ7bbs.woff2 Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/dist/css/google-local/fonts/toadOcfmlt9b38dHJxOBGDRVvBvQIc1z78c__uoBcyI.woff2 → xxl-job-admin/src/main/resources/static/adminlte/dist/css/google-local/fonts/toadOcfmlt9b38dHJxOBGDRVvBvQIc1z78c__uoBcyI.woff2 Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/dist/css/google-local/fonts/toadOcfmlt9b38dHJxOBGD_j0nMiB9fPhg_k1wdK2h0.woff2 → xxl-job-admin/src/main/resources/static/adminlte/dist/css/google-local/fonts/toadOcfmlt9b38dHJxOBGD_j0nMiB9fPhg_k1wdK2h0.woff2 Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/dist/css/google-local/fonts/toadOcfmlt9b38dHJxOBGDovqjS_dXPZszO_XltPdNg.woff2 → xxl-job-admin/src/main/resources/static/adminlte/dist/css/google-local/fonts/toadOcfmlt9b38dHJxOBGDovqjS_dXPZszO_XltPdNg.woff2 Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/dist/css/google-local/fonts/toadOcfmlt9b38dHJxOBGEo0As1BFRXtCDhS66znb_k.woff2 → xxl-job-admin/src/main/resources/static/adminlte/dist/css/google-local/fonts/toadOcfmlt9b38dHJxOBGEo0As1BFRXtCDhS66znb_k.woff2 Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/dist/css/google-local/fonts/toadOcfmlt9b38dHJxOBGFKFh1TDTPrUZWzVp6FtpG8.woff2 → xxl-job-admin/src/main/resources/static/adminlte/dist/css/google-local/fonts/toadOcfmlt9b38dHJxOBGFKFh1TDTPrUZWzVp6FtpG8.woff2 Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/dist/css/google-local/fonts/toadOcfmlt9b38dHJxOBGFxe-GPfKKFmiXaJ_Q0GFr8.woff2 → xxl-job-admin/src/main/resources/static/adminlte/dist/css/google-local/fonts/toadOcfmlt9b38dHJxOBGFxe-GPfKKFmiXaJ_Q0GFr8.woff2 Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/dist/css/google-local/fonts/toadOcfmlt9b38dHJxOBGOode0-EuMkY--TSyExeINg.woff2 → xxl-job-admin/src/main/resources/static/adminlte/dist/css/google-local/fonts/toadOcfmlt9b38dHJxOBGOode0-EuMkY--TSyExeINg.woff2 Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/dist/css/google-local/local.google.fonts.css → xxl-job-admin/src/main/resources/static/adminlte/dist/css/google-local/local.google.fonts.css Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/dist/css/skins/_all-skins.min.css → xxl-job-admin/src/main/resources/static/adminlte/dist/css/skins/_all-skins.min.css Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/dist/js/app.min.js → xxl-job-admin/src/main/resources/static/adminlte/dist/js/app.min.js Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/plugins/datatables/dataTables.bootstrap.css → xxl-job-admin/src/main/resources/static/adminlte/plugins/datatables/dataTables.bootstrap.css Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/plugins/datatables/dataTables.bootstrap.min.js → xxl-job-admin/src/main/resources/static/adminlte/plugins/datatables/dataTables.bootstrap.min.js Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/plugins/datatables/images/sort_asc.png → xxl-job-admin/src/main/resources/static/adminlte/plugins/datatables/images/sort_asc.png Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/plugins/datatables/images/sort_asc_disabled.png → xxl-job-admin/src/main/resources/static/adminlte/plugins/datatables/images/sort_asc_disabled.png Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/plugins/datatables/images/sort_both.png → xxl-job-admin/src/main/resources/static/adminlte/plugins/datatables/images/sort_both.png Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/plugins/datatables/images/sort_desc.png → xxl-job-admin/src/main/resources/static/adminlte/plugins/datatables/images/sort_desc.png Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/plugins/datatables/images/sort_desc_disabled.png → xxl-job-admin/src/main/resources/static/adminlte/plugins/datatables/images/sort_desc_disabled.png Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/plugins/datatables/jquery.dataTables.min.css → xxl-job-admin/src/main/resources/static/adminlte/plugins/datatables/jquery.dataTables.min.css Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/plugins/datatables/jquery.dataTables.min.js → xxl-job-admin/src/main/resources/static/adminlte/plugins/datatables/jquery.dataTables.min.js Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/plugins/datatables/jquery.dataTables_themeroller.css → xxl-job-admin/src/main/resources/static/adminlte/plugins/datatables/jquery.dataTables_themeroller.css Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/plugins/daterangepicker/daterangepicker.css → xxl-job-admin/src/main/resources/static/adminlte/plugins/daterangepicker/daterangepicker.css Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/plugins/daterangepicker/daterangepicker.js → xxl-job-admin/src/main/resources/static/adminlte/plugins/daterangepicker/daterangepicker.js Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/plugins/daterangepicker/moment.min.js → xxl-job-admin/src/main/resources/static/adminlte/plugins/daterangepicker/moment.min.js Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/plugins/fastclick/fastclick.min.js → xxl-job-admin/src/main/resources/static/adminlte/plugins/fastclick/fastclick.min.js Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/plugins/iCheck/icheck.min.js → xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/icheck.min.js Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/plugins/iCheck/square/_all.css → xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/_all.css Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/plugins/iCheck/square/aero.css → xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/aero.css Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/plugins/iCheck/square/aero.png → xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/aero.png Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/plugins/iCheck/square/aero@2x.png → xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/aero@2x.png Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/plugins/iCheck/square/blue.css → xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/blue.css Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/plugins/iCheck/square/blue.png → xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/blue.png Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/plugins/iCheck/square/blue@2x.png → xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/blue@2x.png Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/plugins/iCheck/square/green.css → xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/green.css Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/plugins/iCheck/square/green.png → xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/green.png Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/plugins/iCheck/square/green@2x.png → xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/green@2x.png Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/plugins/iCheck/square/grey.css → xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/grey.css Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/plugins/iCheck/square/grey.png → xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/grey.png Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/plugins/iCheck/square/grey@2x.png → xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/grey@2x.png Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/plugins/iCheck/square/orange.css → xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/orange.css Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/plugins/iCheck/square/orange.png → xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/orange.png Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/plugins/iCheck/square/orange@2x.png → xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/orange@2x.png Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/plugins/iCheck/square/pink.css → xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/pink.css Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/plugins/iCheck/square/pink.png → xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/pink.png Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/plugins/iCheck/square/pink@2x.png → xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/pink@2x.png Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/plugins/iCheck/square/purple.css → xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/purple.css Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/plugins/iCheck/square/purple.png → xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/purple.png Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/plugins/iCheck/square/purple@2x.png → xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/purple@2x.png Visa fil


xxl-job-admin/src/main/webapp/static/adminlte/plugins/iCheck/square/red.css → xxl-job-admin/src/main/resources/static/adminlte/plugins/iCheck/square/red.css Visa fil


Vissa filer visades inte eftersom för många filer har ändrats