Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
粉色的八爪鱼
xxl-job
提交
e26f94e4
X
xxl-job
项目概览
粉色的八爪鱼
/
xxl-job
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
X
xxl-job
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
e26f94e4
编写于
12月 30, 2015
作者:
X
xueli.xue
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
调度日志-前后端,重构
上级
670f71e5
变更
15
展开全部
隐藏空白更改
内联
并排
Showing
15 changed file
with
1842 addition
and
56 deletion
+1842
-56
README.md
README.md
+1
-0
doc/db/tables_trigger_log.sql
doc/db/tables_trigger_log.sql
+35
-0
xxl-job-admin/src/main/java/com/xxl/job/controller/JobLogController.java
...rc/main/java/com/xxl/job/controller/JobLogController.java
+28
-12
xxl-job-admin/src/main/java/com/xxl/job/core/model/mapper/XxlJobLogMapper.xml
...in/java/com/xxl/job/core/model/mapper/XxlJobLogMapper.xml
+22
-6
xxl-job-admin/src/main/java/com/xxl/job/dao/IXxlJobLogDao.java
...ob-admin/src/main/java/com/xxl/job/dao/IXxlJobLogDao.java
+3
-2
xxl-job-admin/src/main/java/com/xxl/job/dao/impl/XxlJobLogDaoImpl.java
.../src/main/java/com/xxl/job/dao/impl/XxlJobLogDaoImpl.java
+7
-2
xxl-job-admin/src/main/webapp/WEB-INF/template/common/common.macro.ftl
.../src/main/webapp/WEB-INF/template/common/common.macro.ftl
+1
-1
xxl-job-admin/src/main/webapp/WEB-INF/template/job/index.ftl
xxl-job-admin/src/main/webapp/WEB-INF/template/job/index.ftl
+3
-1
xxl-job-admin/src/main/webapp/WEB-INF/template/joblog/index.ftl
...b-admin/src/main/webapp/WEB-INF/template/joblog/index.ftl
+35
-22
xxl-job-admin/src/main/webapp/static/adminlte/plugins/daterangepicker/daterangepicker-bs3.css
.../adminlte/plugins/daterangepicker/daterangepicker-bs3.css
+335
-0
xxl-job-admin/src/main/webapp/static/adminlte/plugins/daterangepicker/daterangepicker.js
...tatic/adminlte/plugins/daterangepicker/daterangepicker.js
+1304
-0
xxl-job-admin/src/main/webapp/static/adminlte/plugins/daterangepicker/moment.min.js
...app/static/adminlte/plugins/daterangepicker/moment.min.js
+7
-0
xxl-job-admin/src/main/webapp/static/js/joblog.index.1.js
xxl-job-admin/src/main/webapp/static/js/joblog.index.1.js
+58
-7
xxl-job-admin/src/test/java/com/xxl/job/dao/impl/XxlJobLogTest.java
...min/src/test/java/com/xxl/job/dao/impl/XxlJobLogTest.java
+2
-2
xxl-job-client/src/main/java/com/xxl/job/client/handler/HandlerRepository.java
...in/java/com/xxl/job/client/handler/HandlerRepository.java
+1
-1
未找到文件。
README.md
浏览文件 @
e26f94e4
...
@@ -29,4 +29,5 @@ git.osc地址:http://git.oschina.net/xuxueli0323/xxl-job
...
@@ -29,4 +29,5 @@ git.osc地址:http://git.oschina.net/xuxueli0323/xxl-job
# 其他说明
# 其他说明
清楚僵尸任务:qrtz_cron_triggers、qrtz_triggers、qrtz_job_details顺序删除
清楚僵尸任务:qrtz_cron_triggers、qrtz_triggers、qrtz_job_details顺序删除
V1.2新增任务日志,记得执行“qrtz_trigger_log”生成表结构
\ No newline at end of file
doc/db/tables_trigger_log.sql
0 → 100644
浏览文件 @
e26f94e4
/*
Navicat MySQL Data Transfer
Source Server : meme-127.0.0.1
Source Server Version : 50544
Source Host : 127.0.0.1:3306
Source Database : test
Target Server Type : MYSQL
Target Server Version : 50544
File Encoding : 65001
Date: 2015-12-30 23:27:14
*/
SET
FOREIGN_KEY_CHECKS
=
0
;
-- ----------------------------
-- Table structure for qrtz_trigger_log
-- ----------------------------
DROP
TABLE
IF
EXISTS
`qrtz_trigger_log`
;
CREATE
TABLE
`qrtz_trigger_log`
(
`id`
int
(
11
)
NOT
NULL
AUTO_INCREMENT
,
`job_name`
varchar
(
255
)
NOT
NULL
,
`job_cron`
varchar
(
128
)
DEFAULT
NULL
,
`job_class`
varchar
(
255
)
DEFAULT
NULL
,
`job_data`
varchar
(
2048
)
DEFAULT
NULL
,
`trigger_time`
datetime
DEFAULT
NULL
,
`trigger_status`
varchar
(
255
)
DEFAULT
NULL
,
`trigger_msg`
varchar
(
255
)
DEFAULT
NULL
,
`handle_time`
datetime
DEFAULT
NULL
,
`handle_status`
varchar
(
255
)
DEFAULT
NULL
,
`handle_msg`
varchar
(
255
)
DEFAULT
NULL
,
PRIMARY
KEY
(
`id`
)
)
ENGINE
=
InnoDB
AUTO_INCREMENT
=
127
DEFAULT
CHARSET
=
utf8
;
xxl-job-admin/src/main/java/com/xxl/job/controller/JobLogController.java
浏览文件 @
e26f94e4
package
com.xxl.job.controller
;
package
com.xxl.job.controller
;
import
java.text.ParseException
;
import
java.util.Date
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.List
;
...
@@ -7,6 +8,8 @@ import java.util.Map;
...
@@ -7,6 +8,8 @@ import java.util.Map;
import
javax.annotation.Resource
;
import
javax.annotation.Resource
;
import
org.apache.commons.lang.StringUtils
;
import
org.apache.commons.lang.time.DateUtils
;
import
org.springframework.stereotype.Controller
;
import
org.springframework.stereotype.Controller
;
import
org.springframework.ui.Model
;
import
org.springframework.ui.Model
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
...
@@ -42,26 +45,39 @@ public class JobLogController {
...
@@ -42,26 +45,39 @@ public class JobLogController {
return
ReturnT
.
FAIL
;
return
ReturnT
.
FAIL
;
}
}
@RequestMapping
(
"/"
)
@RequestMapping
public
String
index
(
Model
model
)
{
public
String
index
(
Model
model
,
String
jobName
,
String
filterTime
)
{
model
.
addAttribute
(
"jobName"
,
jobName
);
model
.
addAttribute
(
"filterTime"
,
filterTime
);
return
"joblog/index"
;
return
"joblog/index"
;
}
}
@RequestMapping
(
"/pageList"
)
@RequestMapping
(
"/pageList"
)
@ResponseBody
@ResponseBody
public
Map
<
String
,
Object
>
pageList
(
@RequestParam
(
required
=
false
)
String
jobName
,
public
Map
<
String
,
Object
>
pageList
(
@RequestParam
(
required
=
false
,
defaultValue
=
"0"
)
int
start
,
@RequestParam
(
required
=
false
,
defaultValue
=
"0"
)
int
start
,
@RequestParam
(
required
=
false
,
defaultValue
=
"10"
)
int
length
,
@RequestParam
(
required
=
false
,
defaultValue
=
"10"
)
int
length
)
{
String
jobName
,
String
filterTime
)
{
// parse param
System
.
out
.
println
(
start
);
Date
triggerTimeStart
=
null
;
System
.
out
.
println
(
length
);
Date
triggerTimeEnd
=
null
;
System
.
out
.
println
(
jobName
);
if
(
StringUtils
.
isNotBlank
(
filterTime
))
{
String
[]
temp
=
filterTime
.
split
(
" - "
);
if
(
temp
!=
null
&&
temp
.
length
==
2
)
{
try
{
triggerTimeEnd
=
DateUtils
.
parseDate
(
temp
[
0
],
new
String
[]{
"yyyy-MM-dd HH:mm:ss"
});
triggerTimeEnd
=
DateUtils
.
parseDate
(
temp
[
1
],
new
String
[]{
"yyyy-MM-dd HH:mm:ss"
});
}
catch
(
ParseException
e
)
{
e
.
printStackTrace
();
}
}
}
List
<
XxlJobLog
>
list
=
xxlJobLogDao
.
pageList
(
start
,
length
,
jobName
);
// page query
int
list_count
=
xxlJobLogDao
.
pageListCount
(
start
,
length
,
jobName
);
List
<
XxlJobLog
>
list
=
xxlJobLogDao
.
pageList
(
start
,
length
,
jobName
,
triggerTimeStart
,
triggerTimeEnd
);
int
list_count
=
xxlJobLogDao
.
pageListCount
(
start
,
length
,
jobName
,
triggerTimeStart
,
triggerTimeEnd
);
// package result
Map
<
String
,
Object
>
maps
=
new
HashMap
<
String
,
Object
>();
Map
<
String
,
Object
>
maps
=
new
HashMap
<
String
,
Object
>();
maps
.
put
(
"draw"
,
list_count
);
// 请求次数
maps
.
put
(
"recordsTotal"
,
list_count
);
// 总记录数
maps
.
put
(
"recordsTotal"
,
list_count
);
// 总记录数
maps
.
put
(
"recordsFiltered"
,
list_count
);
// 过滤后的总记录数
maps
.
put
(
"recordsFiltered"
,
list_count
);
// 过滤后的总记录数
maps
.
put
(
"data"
,
list
);
// 分页列表
maps
.
put
(
"data"
,
list
);
// 分页列表
...
...
xxl-job-admin/src/main/java/com/xxl/job/core/model/mapper/XxlJobLogMapper.xml
浏览文件 @
e26f94e4
...
@@ -78,9 +78,17 @@
...
@@ -78,9 +78,17 @@
<select
id=
"pageList"
parameterType=
"java.util.HashMap"
resultMap=
"XxlJobLog"
>
<select
id=
"pageList"
parameterType=
"java.util.HashMap"
resultMap=
"XxlJobLog"
>
SELECT
<include
refid=
"Base_Column_List"
/>
SELECT
<include
refid=
"Base_Column_List"
/>
FROM qrtz_trigger_log AS t
FROM qrtz_trigger_log AS t
<if
test=
"jobName != null and jobName!=''"
>
<trim
prefix=
"WHERE"
prefixOverrides=
"AND | OR"
>
WHERE t.job_name = #{jobName}
<if
test=
"jobName != null and jobName!=''"
>
</if>
AND t.job_name = #{jobName}
</if>
<if
test=
"triggerTimeStart != null"
>
AND t.trigger_time
<![CDATA[ > ]]>
#{triggerTimeStart}
</if>
<if
test=
"triggerTimeEnd != null"
>
AND t.trigger_time
<![CDATA[ < ]]>
#{triggerTimeEnd}
</if>
</trim>
ORDER BY id DESC
ORDER BY id DESC
LIMIT #{offset}, #{pagesize}
LIMIT #{offset}, #{pagesize}
</select>
</select>
...
@@ -88,9 +96,17 @@
...
@@ -88,9 +96,17 @@
<select
id=
"pageListCount"
parameterType=
"java.util.HashMap"
resultType=
"int"
>
<select
id=
"pageListCount"
parameterType=
"java.util.HashMap"
resultType=
"int"
>
SELECT count(1)
SELECT count(1)
FROM qrtz_trigger_log AS t
FROM qrtz_trigger_log AS t
<if
test=
"jobName != null and jobName!=''"
>
<trim
prefix=
"WHERE"
prefixOverrides=
"AND | OR"
>
WHERE t.job_name = #{jobName}
<if
test=
"jobName != null and jobName!=''"
>
</if>
AND t.job_name = #{jobName}
</if>
<if
test=
"triggerTimeStart != null"
>
AND t.trigger_time
<![CDATA[ > ]]>
#{triggerTimeStart}
</if>
<if
test=
"triggerTimeEnd != null"
>
AND t.trigger_time
<![CDATA[ < ]]>
#{triggerTimeEnd}
</if>
</trim>
</select>
</select>
</mapper>
</mapper>
\ No newline at end of file
xxl-job-admin/src/main/java/com/xxl/job/dao/IXxlJobLogDao.java
浏览文件 @
e26f94e4
package
com.xxl.job.dao
;
package
com.xxl.job.dao
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.List
;
import
com.xxl.job.core.model.XxlJobLog
;
import
com.xxl.job.core.model.XxlJobLog
;
...
@@ -15,8 +16,8 @@ public interface IXxlJobLogDao {
...
@@ -15,8 +16,8 @@ public interface IXxlJobLogDao {
public
int
updateHandleInfo
(
XxlJobLog
xxlJobLog
);
public
int
updateHandleInfo
(
XxlJobLog
xxlJobLog
);
public
List
<
XxlJobLog
>
pageList
(
int
offset
,
int
pagesize
,
String
jobName
);
public
List
<
XxlJobLog
>
pageList
(
int
offset
,
int
pagesize
,
String
jobName
,
Date
triggerTimeStart
,
Date
triggerTimeEnd
);
public
int
pageListCount
(
int
offset
,
int
pagesize
,
String
jobName
);
public
int
pageListCount
(
int
offset
,
int
pagesize
,
String
jobName
,
Date
triggerTimeStart
,
Date
triggerTimeEnd
);
}
}
xxl-job-admin/src/main/java/com/xxl/job/dao/impl/XxlJobLogDaoImpl.java
浏览文件 @
e26f94e4
package
com.xxl.job.dao.impl
;
package
com.xxl.job.dao.impl
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.List
;
...
@@ -38,20 +39,24 @@ public class XxlJobLogDaoImpl implements IXxlJobLogDao {
...
@@ -38,20 +39,24 @@ public class XxlJobLogDaoImpl implements IXxlJobLogDao {
}
}
@Override
@Override
public
List
<
XxlJobLog
>
pageList
(
int
offset
,
int
pagesize
,
String
jobName
)
{
public
List
<
XxlJobLog
>
pageList
(
int
offset
,
int
pagesize
,
String
jobName
,
Date
triggerTimeStart
,
Date
triggerTimeEnd
)
{
HashMap
<
String
,
Object
>
params
=
new
HashMap
<
String
,
Object
>();
HashMap
<
String
,
Object
>
params
=
new
HashMap
<
String
,
Object
>();
params
.
put
(
"offset"
,
offset
);
params
.
put
(
"offset"
,
offset
);
params
.
put
(
"pagesize"
,
pagesize
);
params
.
put
(
"pagesize"
,
pagesize
);
params
.
put
(
"jobName"
,
jobName
);
params
.
put
(
"jobName"
,
jobName
);
params
.
put
(
"triggerTimeStart"
,
triggerTimeStart
);
params
.
put
(
"triggerTimeEnd"
,
triggerTimeEnd
);
return
sqlSessionTemplate
.
selectList
(
"XxlJobLogMapper.pageList"
,
params
);
return
sqlSessionTemplate
.
selectList
(
"XxlJobLogMapper.pageList"
,
params
);
}
}
@Override
@Override
public
int
pageListCount
(
int
offset
,
int
pagesize
,
String
jobName
)
{
public
int
pageListCount
(
int
offset
,
int
pagesize
,
String
jobName
,
Date
triggerTimeStart
,
Date
triggerTimeEnd
)
{
HashMap
<
String
,
Object
>
params
=
new
HashMap
<
String
,
Object
>();
HashMap
<
String
,
Object
>
params
=
new
HashMap
<
String
,
Object
>();
params
.
put
(
"offset"
,
offset
);
params
.
put
(
"offset"
,
offset
);
params
.
put
(
"pagesize"
,
pagesize
);
params
.
put
(
"pagesize"
,
pagesize
);
params
.
put
(
"jobName"
,
jobName
);
params
.
put
(
"jobName"
,
jobName
);
params
.
put
(
"triggerTimeStart"
,
triggerTimeStart
);
params
.
put
(
"triggerTimeEnd"
,
triggerTimeEnd
);
return
sqlSessionTemplate
.
selectOne
(
"XxlJobLogMapper.pageListCount"
,
params
);
return
sqlSessionTemplate
.
selectOne
(
"XxlJobLogMapper.pageListCount"
,
params
);
}
}
...
...
xxl-job-admin/src/main/webapp/WEB-INF/template/common/common.macro.ftl
浏览文件 @
e26f94e4
...
@@ -65,7 +65,7 @@
...
@@ -65,7 +65,7 @@
<ul class="sidebar-menu">
<ul class="sidebar-menu">
<li class="header">常用模块</li>
<li class="header">常用模块</li>
<li class="nav-click" ><a href="${request.contextPath}/job/"><i class="fa fa-circle-o text-red"></i> <span>调度管理</span></a></li>
<li class="nav-click" ><a href="${request.contextPath}/job/"><i class="fa fa-circle-o text-red"></i> <span>调度管理</span></a></li>
<li class="nav-click" ><a href="${request.contextPath}/joblog
/
"><i class="fa fa-circle-o text-yellow"></i><span>调度日志</span></a></li>
<li class="nav-click" ><a href="${request.contextPath}/joblog"><i class="fa fa-circle-o text-yellow"></i><span>调度日志</span></a></li>
<li class="nav-click" ><a href="${request.contextPath}/help"><i class="fa fa-circle-o text-yellow"></i><span>使用教程</span></a></li>
<li class="nav-click" ><a href="${request.contextPath}/help"><i class="fa fa-circle-o text-yellow"></i><span>使用教程</span></a></li>
</ul>
</ul>
</section>
</section>
...
...
xxl-job-admin/src/main/webapp/WEB-INF/template/job/index.ftl
浏览文件 @
e26f94e4
...
@@ -80,8 +80,10 @@
...
@@ -80,8 +80,10 @@
<button
class=
"btn btn-info btn-xs job_operate"
type=
"job_resume"
type=
"button"
>
恢复
</button>
<button
class=
"btn btn-info btn-xs job_operate"
type=
"job_resume"
type=
"button"
>
恢复
</button>
</
#
if>
</
#
if>
<button
class=
"btn btn-info btn-xs job_operate"
type=
"job_trigger"
type=
"button"
>
执行一次
</button>
<button
class=
"btn btn-info btn-xs job_operate"
type=
"job_trigger"
type=
"button"
>
执行一次
</button>
<button
class=
"btn btn-danger btn-xs job_operate"
type=
"job_del"
type=
"button"
>
删除
</button>
<button
class=
"btn btn-info btn-xs update"
type=
"button"
>
更新corn
</button>
<button
class=
"btn btn-info btn-xs update"
type=
"button"
>
更新corn
</button>
<button
class=
"btn btn-danger btn-xs job_operate"
type=
"job_del"
type=
"button"
>
删除
</button>
<button
class=
"btn btn-warning btn-xs"
type=
"job_del"
type=
"button"
onclick=
"javascript:window.open('${request.contextPath}/joblog?jobName=${item['TriggerKey'].name}')"
>
查看日志
</button>
</p>
</p>
</td>
</td>
</tr>
</tr>
...
...
xxl-job-admin/src/main/webapp/WEB-INF/template/joblog/index.ftl
浏览文件 @
e26f94e4
...
@@ -6,14 +6,8 @@
...
@@ -6,14 +6,8 @@
<
@
netCommon.commonStyle
/>
<
@
netCommon.commonStyle
/>
<!-- DataTables -->
<!-- DataTables -->
<link
rel=
"stylesheet"
href=
"${request.contextPath}/static/adminlte/plugins/datatables/dataTables.bootstrap.css"
>
<link
rel=
"stylesheet"
href=
"${request.contextPath}/static/adminlte/plugins/datatables/dataTables.bootstrap.css"
>
<!-- daterangepicker -->
<!-- DataTables CSS -->
<link
rel=
"stylesheet"
href=
"${request.contextPath}/static/adminlte/plugins/daterangepicker/daterangepicker-bs3.css"
>
<link
rel=
"stylesheet"
type=
"text/css"
href=
"http://cdn.datatables.net/1.10.7/css/jquery.dataTables.css"
>
<!-- jQuery -->
<script
type=
"text/javascript"
charset=
"utf8"
src=
"http://code.jquery.com/jquery-1.10.2.min.js"
></script>
<!-- DataTables -->
<script
type=
"text/javascript"
charset=
"utf8"
src=
"http://cdn.datatables.net/1.10.7/js/jquery.dataTables.js"
></script>
</head>
</head>
<body
class=
"hold-transition skin-blue sidebar-mini"
>
<body
class=
"hold-transition skin-blue sidebar-mini"
>
<div
class=
"wrapper"
>
<div
class=
"wrapper"
>
...
@@ -35,35 +29,51 @@
...
@@ -35,35 +29,51 @@
<!-- Main content -->
<!-- Main content -->
<section
class=
"content"
>
<section
class=
"content"
>
<div
class=
"row"
>
<div
class=
"col-xs-5"
>
<div
class=
"input-group"
>
<span
class=
"input-group-addon"
>
调度时间
</span>
<input
type=
"text"
class=
"form-control"
id=
"filterTime"
readonly
value=
"<#if triggerTimeStart?exists && triggerTimeEnd?exists >${triggerTimeStart?if_exists?string('yyyy-MM-dd HH:mm:ss')} - ${triggerTimeEnd?if_exists?string('yyyy-MM-dd HH:mm:ss')}</#if>"
>
</div>
</div>
<div
class=
"col-xs-5"
>
<div
class=
"input-group"
>
<span
class=
"input-group-addon"
>
jobName
</span>
<input
type=
"text"
class=
"form-control"
id=
"jobName"
value=
"${jobName}"
autocomplete=
"on"
>
</div>
</div>
<div
class=
"col-xs-2"
>
<button
class=
"btn btn-block btn-info"
id=
"searchBtn"
>
搜索
</button>
</div>
</div>
<div
class=
"row"
>
<div
class=
"row"
>
<div
class=
"col-xs-12"
>
<div
class=
"col-xs-12"
>
<div
class=
"box"
>
<div
class=
"box"
>
<div
class=
"box-header"
>
<div
class=
"box-header"
><h3
class=
"box-title"
>
调度日志
</h3></div>
<h3
class=
"box-title"
>
调度列表
</h3>
</div>
<div
class=
"box-body"
>
<div
class=
"box-body"
>
<table
id=
"joblog_list"
class=
"table table-bordered table-striped display"
>
<table
id=
"joblog_list"
class=
"table table-bordered table-striped display"
width=
"100%"
>
<thead>
<thead>
<tr>
<tr>
<th>
id
</th>
<th>
id
</th>
<th>
jobName
</th>
<th>
jobName
</th>
<th>
jobCron
</th>
<th>
jobCron
</th>
<th>
jobClass
</th>
<th>
jobClass
</th>
<th>
jobData
</th>
<th>
triggerTime
</th>
<th>
triggerStatus
</th>
<th>
triggerMsg
</th>
<th>
handleTime
</th>
<th>
handleTime
</th>
<th>
handleStatus
</th>
<th>
handleStatus
</th>
<th>
handleMsg
</th>
</tr>
</tr>
</thead>
</thead>
<tbody></tbody>
<tbody></tbody>
<tfoot>
<tr>
<th>
id
</th>
<th>
jobName
</th>
<th>
jobCron
</th>
<th>
jobClass
</th>
<th>
handleTime
</th>
<th>
handleStatus
</th>
</tr>
</tfoot>
</table>
</table>
</div>
</div>
</div>
</div>
...
@@ -83,6 +93,9 @@
...
@@ -83,6 +93,9 @@
<!-- DataTables -->
<!-- DataTables -->
<script
src=
"${request.contextPath}/static/adminlte/plugins/datatables/jquery.dataTables.min.js"
></script>
<script
src=
"${request.contextPath}/static/adminlte/plugins/datatables/jquery.dataTables.min.js"
></script>
<script
src=
"${request.contextPath}/static/adminlte/plugins/datatables/dataTables.bootstrap.min.js"
></script>
<script
src=
"${request.contextPath}/static/adminlte/plugins/datatables/dataTables.bootstrap.min.js"
></script>
<!-- daterangepicker -->
<script
src=
"${request.contextPath}/static/adminlte/plugins/daterangepicker/moment.min.js"
></script>
<script
src=
"${request.contextPath}/static/adminlte/plugins/daterangepicker/daterangepicker.js"
></script>
<script>
var
base_url
=
'
${request.contextPath}
'
;
</script>
<script>
var
base_url
=
'
${request.contextPath}
'
;
</script>
<script
src=
"${request.contextPath}/static/js/joblog.index.1.js"
></script>
<script
src=
"${request.contextPath}/static/js/joblog.index.1.js"
></script>
</body>
</body>
...
...
xxl-job-admin/src/main/webapp/static/adminlte/plugins/daterangepicker/daterangepicker-bs3.css
0 → 100644
浏览文件 @
e26f94e4
/*!
* Stylesheet for the Date Range Picker, for use with Bootstrap 3.x
*
* Copyright 2013-2015 Dan Grossman ( http://www.dangrossman.info )
* Licensed under the MIT license. See http://www.opensource.org/licenses/mit-license.php
*
* Built for http://www.improvely.com
*/
.daterangepicker.dropdown-menu
{
max-width
:
none
;
z-index
:
3000
;
}
.daterangepicker.opensleft
.ranges
,
.daterangepicker.opensleft
.calendar
{
float
:
left
;
margin
:
4px
;
}
.daterangepicker.opensright
.ranges
,
.daterangepicker.opensright
.calendar
,
.daterangepicker.openscenter
.ranges
,
.daterangepicker.openscenter
.calendar
{
float
:
right
;
margin
:
4px
;
}
.daterangepicker.single
.ranges
,
.daterangepicker.single
.calendar
{
float
:
none
;
}
.daterangepicker
.ranges
{
width
:
160px
;
text-align
:
left
;
}
.daterangepicker
.ranges
.range_inputs
>
div
{
float
:
left
;
}
.daterangepicker
.ranges
.range_inputs
>
div
:nth-child
(
2
)
{
padding-left
:
11px
;
}
.daterangepicker
.calendar
{
display
:
none
;
max-width
:
270px
;
}
.daterangepicker.show-calendar
.calendar
{
display
:
block
;
}
.daterangepicker
.calendar.single
.calendar-date
{
border
:
none
;
}
.daterangepicker
.calendar
th
,
.daterangepicker
.calendar
td
{
font-family
:
'Helvetica Neue'
,
Helvetica
,
Arial
,
sans-serif
;
white-space
:
nowrap
;
text-align
:
center
;
min-width
:
32px
;
}
.daterangepicker
.daterangepicker_start_input
label
,
.daterangepicker
.daterangepicker_end_input
label
{
color
:
#333
;
display
:
block
;
font-size
:
11px
;
font-weight
:
normal
;
height
:
20px
;
line-height
:
20px
;
margin-bottom
:
2px
;
text-shadow
:
#fff
1px
1px
0px
;
text-transform
:
uppercase
;
width
:
74px
;
}
.daterangepicker
.ranges
input
{
font-size
:
11px
;
}
.daterangepicker
.ranges
.input-mini
{
border
:
1px
solid
#ccc
;
border-radius
:
4px
;
color
:
#555
;
display
:
block
;
font-size
:
11px
;
height
:
30px
;
line-height
:
30px
;
vertical-align
:
middle
;
margin
:
0
0
10px
0
;
padding
:
0
6px
;
width
:
74px
;
}
.daterangepicker
.ranges
ul
{
list-style
:
none
;
margin
:
0
;
padding
:
0
;
}
.daterangepicker
.ranges
li
{
font-size
:
13px
;
background
:
#f5f5f5
;
border
:
1px
solid
#f5f5f5
;
color
:
#08c
;
padding
:
3px
12px
;
margin-bottom
:
8px
;
-webkit-border-radius
:
5px
;
-moz-border-radius
:
5px
;
border-radius
:
5px
;
cursor
:
pointer
;
}
.daterangepicker
.ranges
li
.active
,
.daterangepicker
.ranges
li
:hover
{
background
:
#08c
;
border
:
1px
solid
#08c
;
color
:
#fff
;
}
.daterangepicker
.calendar-date
{
border
:
1px
solid
#ddd
;
padding
:
4px
;
border-radius
:
4px
;
background
:
#fff
;
}
.daterangepicker
.calendar-time
{
text-align
:
center
;
margin
:
8px
auto
0
auto
;
line-height
:
30px
;
}
.daterangepicker
{
position
:
absolute
;
background
:
#fff
;
top
:
100px
;
left
:
20px
;
padding
:
4px
;
margin-top
:
1px
;
-webkit-border-radius
:
4px
;
-moz-border-radius
:
4px
;
border-radius
:
4px
;
}
.daterangepicker.opensleft
:before
{
position
:
absolute
;
top
:
-7px
;
right
:
9px
;
display
:
inline-block
;
border-right
:
7px
solid
transparent
;
border-bottom
:
7px
solid
#ccc
;
border-left
:
7px
solid
transparent
;
border-bottom-color
:
rgba
(
0
,
0
,
0
,
0.2
);
content
:
''
;
}
.daterangepicker.opensleft
:after
{
position
:
absolute
;
top
:
-6px
;
right
:
10px
;
display
:
inline-block
;
border-right
:
6px
solid
transparent
;
border-bottom
:
6px
solid
#fff
;
border-left
:
6px
solid
transparent
;
content
:
''
;
}
.daterangepicker.openscenter
:before
{
position
:
absolute
;
top
:
-7px
;
left
:
0
;
right
:
0
;
width
:
0
;
margin-left
:
auto
;
margin-right
:
auto
;
display
:
inline-block
;
border-right
:
7px
solid
transparent
;
border-bottom
:
7px
solid
#ccc
;
border-left
:
7px
solid
transparent
;
border-bottom-color
:
rgba
(
0
,
0
,
0
,
0.2
);
content
:
''
;
}
.daterangepicker.openscenter
:after
{
position
:
absolute
;
top
:
-6px
;
left
:
0
;
right
:
0
;
width
:
0
;
margin-left
:
auto
;
margin-right
:
auto
;
display
:
inline-block
;
border-right
:
6px
solid
transparent
;
border-bottom
:
6px
solid
#fff
;
border-left
:
6px
solid
transparent
;
content
:
''
;
}
.daterangepicker.opensright
:before
{
position
:
absolute
;
top
:
-7px
;
left
:
9px
;
display
:
inline-block
;
border-right
:
7px
solid
transparent
;
border-bottom
:
7px
solid
#ccc
;
border-left
:
7px
solid
transparent
;
border-bottom-color
:
rgba
(
0
,
0
,
0
,
0.2
);
content
:
''
;
}
.daterangepicker.opensright
:after
{
position
:
absolute
;
top
:
-6px
;
left
:
10px
;
display
:
inline-block
;
border-right
:
6px
solid
transparent
;
border-bottom
:
6px
solid
#fff
;
border-left
:
6px
solid
transparent
;
content
:
''
;
}
.daterangepicker.dropup
{
margin-top
:
-5px
;
}
.daterangepicker.dropup
:before
{
top
:
initial
;
bottom
:
-7px
;
border-bottom
:
initial
;
border-top
:
7px
solid
#ccc
;
}
.daterangepicker.dropup
:after
{
top
:
initial
;
bottom
:
-6px
;
border-bottom
:
initial
;
border-top
:
6px
solid
#fff
;
}
.daterangepicker
table
{
width
:
100%
;
margin
:
0
;
}
.daterangepicker
td
,
.daterangepicker
th
{
text-align
:
center
;
width
:
20px
;
height
:
20px
;
-webkit-border-radius
:
4px
;
-moz-border-radius
:
4px
;
border-radius
:
4px
;
cursor
:
pointer
;
white-space
:
nowrap
;
}
.daterangepicker
td
.off
{
color
:
#999
;
}
.daterangepicker
td
.disabled
,
.daterangepicker
option
.disabled
{
color
:
#999
;
}
.daterangepicker
td
.available
:hover
,
.daterangepicker
th
.available
:hover
{
background
:
#eee
;
}
.daterangepicker
td
.in-range
{
background
:
#ebf4f8
;
-webkit-border-radius
:
0
;
-moz-border-radius
:
0
;
border-radius
:
0
;
}
.daterangepicker
td
.start-date
{
-webkit-border-radius
:
4px
0
0
4px
;
-moz-border-radius
:
4px
0
0
4px
;
border-radius
:
4px
0
0
4px
;
}
.daterangepicker
td
.end-date
{
-webkit-border-radius
:
0
4px
4px
0
;
-moz-border-radius
:
0
4px
4px
0
;
border-radius
:
0
4px
4px
0
;
}
.daterangepicker
td
.start-date.end-date
{
-webkit-border-radius
:
4px
;
-moz-border-radius
:
4px
;
border-radius
:
4px
;
}
.daterangepicker
td
.active
,
.daterangepicker
td
.active
:hover
{
background-color
:
#357ebd
;
border-color
:
#3071a9
;
color
:
#fff
;
}
.daterangepicker
td
.week
,
.daterangepicker
th
.week
{
font-size
:
80%
;
color
:
#ccc
;
}
.daterangepicker
select
.monthselect
,
.daterangepicker
select
.yearselect
{
font-size
:
12px
;
padding
:
1px
;
height
:
auto
;
margin
:
0
;
cursor
:
default
;
}
.daterangepicker
select
.monthselect
{
margin-right
:
2%
;
width
:
56%
;
}
.daterangepicker
select
.yearselect
{
width
:
40%
;
}
.daterangepicker
select
.hourselect
,
.daterangepicker
select
.minuteselect
,
.daterangepicker
select
.secondselect
,
.daterangepicker
select
.ampmselect
{
width
:
50px
;
margin-bottom
:
0
;
}
.daterangepicker_start_input
{
float
:
left
;
}
.daterangepicker_end_input
{
float
:
left
;
padding-left
:
11px
}
.daterangepicker
th
.month
{
width
:
auto
;
}
xxl-job-admin/src/main/webapp/static/adminlte/plugins/daterangepicker/daterangepicker.js
0 → 100644
浏览文件 @
e26f94e4
此差异已折叠。
点击以展开。
xxl-job-admin/src/main/webapp/static/adminlte/plugins/daterangepicker/moment.min.js
0 → 100644
浏览文件 @
e26f94e4
此差异已折叠。
点击以展开。
xxl-job-admin/src/main/webapp/static/js/joblog.index.1.js
浏览文件 @
e26f94e4
$
(
function
()
{
$
(
function
()
{
// init date tables
// init date tables
$
(
"
#joblog_list
"
).
dataTable
({
var
logTable
=
$
(
"
#joblog_list
"
).
dataTable
({
"
serverSide
"
:
true
,
"
deferRender
"
:
true
,
"
processing
"
:
true
,
"
serverSide
"
:
true
,
"
ajax
"
:
{
"
ajax
"
:
{
url
:
base_url
+
"
/joblog/pageList
"
url
:
base_url
+
"
/joblog/pageList
"
,
data
:
function
(
d
)
{
d
.
filterTime
=
$
(
'
#filterTime
'
).
val
();
d
.
jobName
=
$
(
'
#jobName
'
).
val
()
}
},
},
"
processing
"
:
true
,
"
scrollX
"
:
true
,
"
deferRender
"
:
true
,
"
columns
"
:
[
"
columns
"
:
[
{
"
data
"
:
'
id
'
,
"
bSortable
"
:
false
,
"
visible
"
:
tru
e
},
{
"
data
"
:
'
id
'
,
"
bSortable
"
:
false
,
"
visible
"
:
fals
e
},
{
"
data
"
:
'
jobName
'
,
"
bSortable
"
:
false
},
{
"
data
"
:
'
jobName
'
,
"
bSortable
"
:
false
},
{
"
data
"
:
'
jobCron
'
,
"
bSortable
"
:
false
},
{
"
data
"
:
'
jobCron
'
,
"
bSortable
"
:
false
},
{
"
data
"
:
'
jobClass
'
,
"
bSortable
"
:
false
},
{
"
data
"
:
'
jobClass
'
,
"
bSortable
"
:
false
},
{
"
data
"
:
'
jobData
'
,
"
bSortable
"
:
false
},
{
"
data
"
:
'
triggerTime
'
,
"
bSortable
"
:
false
,
"
render
"
:
function
(
data
,
type
,
row
)
{
return
moment
(
new
Date
(
data
)).
format
(
"
YYYY-MM-DD HH:mm:ss
"
);
}
},
{
"
data
"
:
'
triggerStatus
'
,
"
bSortable
"
:
false
},
{
"
data
"
:
'
triggerMsg
'
,
"
bSortable
"
:
false
},
{
"
data
"
:
'
handleTime
'
,
"
bSortable
"
:
false
},
{
"
data
"
:
'
handleTime
'
,
"
bSortable
"
:
false
},
{
"
data
"
:
'
handleStatus
'
,
"
bSortable
"
:
false
}
{
"
data
"
:
'
handleStatus
'
,
"
bSortable
"
:
false
},
{
"
data
"
:
'
handleMsg
'
,
"
bSortable
"
:
false
}
],
],
"
searching
"
:
false
,
"
ordering
"
:
true
,
"
language
"
:
{
"
language
"
:
{
"
sProcessing
"
:
"
处理中...
"
,
"
sProcessing
"
:
"
处理中...
"
,
"
sLengthMenu
"
:
"
每页 _MENU_ 条记录
"
,
"
sLengthMenu
"
:
"
每页 _MENU_ 条记录
"
,
...
@@ -41,4 +60,36 @@ $(function() {
...
@@ -41,4 +60,36 @@ $(function() {
}
}
});
});
// 过滤时间
$
(
'
#filterTime
'
).
daterangepicker
({
timePicker
:
true
,
//是否显示小时和分钟
timePickerIncrement
:
10
,
//时间的增量,单位为分钟
timePicker12Hour
:
false
,
//是否使用12小时制来显示时间
format
:
'
YYYY-MM-DD HH:mm:ss
'
,
separator
:
'
-
'
,
ranges
:
{
'
最近1小时
'
:
[
moment
().
subtract
(
'
hours
'
,
1
),
moment
()],
'
今日
'
:
[
moment
().
startOf
(
'
day
'
),
moment
()],
'
昨日
'
:
[
moment
().
subtract
(
'
days
'
,
1
).
startOf
(
'
day
'
),
moment
().
subtract
(
'
days
'
,
1
).
endOf
(
'
day
'
)],
'
最近7日
'
:
[
moment
().
subtract
(
'
days
'
,
6
),
moment
()],
'
最近30日
'
:
[
moment
().
subtract
(
'
days
'
,
29
),
moment
()]
},
opens
:
'
right
'
,
//日期选择框的弹出位置
locale
:
{
customRangeLabel
:
'
自定义
'
,
applyLabel
:
'
确定
'
,
cancelLabel
:
'
取消
'
,
fromLabel
:
'
起始时间
'
,
toLabel
:
'
结束时间
'
,
daysOfWeek
:
[
'
日
'
,
'
一
'
,
'
二
'
,
'
三
'
,
'
四
'
,
'
五
'
,
'
六
'
],
monthNames
:
[
'
一月
'
,
'
二月
'
,
'
三月
'
,
'
四月
'
,
'
五月
'
,
'
六月
'
,
'
七月
'
,
'
八月
'
,
'
九月
'
,
'
十月
'
,
'
十一月
'
,
'
十二月
'
],
firstDay
:
1
}
});
// 搜索按钮
$
(
'
#searchBtn
'
).
on
(
'
click
'
,
function
(){
logTable
.
fnDraw
();
});
});
});
xxl-job-admin/src/test/java/com/xxl/job/dao/impl/XxlJobLogTest.java
浏览文件 @
e26f94e4
...
@@ -57,8 +57,8 @@ public class XxlJobLogTest {
...
@@ -57,8 +57,8 @@ public class XxlJobLogTest {
@Test
@Test
public
void
pageList
(){
public
void
pageList
(){
List
<
XxlJobLog
>
list
=
xxlJobLogDao
.
pageList
(
0
,
20
,
null
);
List
<
XxlJobLog
>
list
=
xxlJobLogDao
.
pageList
(
0
,
20
,
null
,
null
,
null
);
int
list_count
=
xxlJobLogDao
.
pageListCount
(
0
,
20
,
null
);
int
list_count
=
xxlJobLogDao
.
pageListCount
(
0
,
20
,
null
,
null
,
null
);
System
.
out
.
println
(
list
);
System
.
out
.
println
(
list
);
System
.
out
.
println
(
list_count
);
System
.
out
.
println
(
list_count
);
...
...
xxl-job-client/src/main/java/com/xxl/job/client/handler/HandlerRepository.java
浏览文件 @
e26f94e4
...
@@ -94,7 +94,7 @@ public class HandlerRepository {
...
@@ -94,7 +94,7 @@ public class HandlerRepository {
new
Object
[]{
handlerData
,
_status
,
_msg
,
callback_response
,
this
});
new
Object
[]{
handlerData
,
_status
,
_msg
,
callback_response
,
this
});
}
else
{
}
else
{
try
{
try
{
TimeUnit
.
SECONDS
.
sleep
(
3
);
TimeUnit
.
SECONDS
.
sleep
(
1
);
}
catch
(
InterruptedException
e
)
{
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
e
.
printStackTrace
();
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录