Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
F
fgqyxxlr
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
yaru
fgqyxxlr
Commits
d21284f3
Commit
d21284f3
authored
Jul 12, 2019
by
RuoYi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
定时任务支持Class类调用&多类型参数
parent
e7a0f973
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
318 additions
and
252 deletions
+318
-252
ruoyi-admin/src/main/resources/static/ruoyi/js/ry-ui.js
+2
-2
ruoyi-admin/src/main/resources/templates/system/user/add.html
+3
-5
ruoyi-admin/src/main/resources/templates/system/user/edit.html
+3
-5
ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobController.java
+2
-2
ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJob.java
+10
-26
ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJobLog.java
+8
-24
ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobService.java
+6
-5
ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobServiceImpl.java
+47
-11
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
+6
-0
ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/AbstractQuartzJob.java
+1
-2
ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/JobInvokeUtil.java
+138
-8
ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/ScheduleUtils.java
+16
-75
ruoyi-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml
+6
-9
ruoyi-quartz/src/main/resources/mapper/quartz/SysJobMapper.xml
+10
-11
ruoyi-quartz/src/main/resources/templates/monitor/job/add.html
+9
-10
ruoyi-quartz/src/main/resources/templates/monitor/job/detail.html
+6
-6
ruoyi-quartz/src/main/resources/templates/monitor/job/edit.html
+9
-19
ruoyi-quartz/src/main/resources/templates/monitor/job/job.html
+23
-20
ruoyi-quartz/src/main/resources/templates/monitor/job/jobLog.html
+13
-12
sql/ry_20190712.sql
+0
-0
No files found.
ruoyi-admin/src/main/resources/static/ruoyi/js/ry-ui.js
View file @
d21284f3
...
...
@@ -196,7 +196,7 @@
var
pageNumber
=
table
.
pageNumber
;
return
pageSize
*
(
pageNumber
-
1
)
+
index
+
1
;
},
// 列超出指定长度浮动提示(单击文本复制
列
)
// 列超出指定长度浮动提示(单击文本复制)
tooltip
:
function
(
value
,
length
)
{
var
_length
=
$
.
common
.
isEmpty
(
length
)
?
20
:
length
;
var
_text
=
""
;
...
...
@@ -386,7 +386,7 @@
var
actions
=
[];
$
.
each
(
datas
,
function
(
index
,
dict
)
{
if
(
dict
.
dictValue
==
(
''
+
value
))
{
var
listClass
=
$
.
common
.
equals
(
"default"
,
dict
.
listClass
)
?
""
:
"badge badge-"
+
dict
.
listClass
;
var
listClass
=
$
.
common
.
equals
(
"default"
,
dict
.
listClass
)
||
$
.
common
.
isEmpty
(
dict
.
listClass
)
?
""
:
"badge badge-"
+
dict
.
listClass
;
actions
.
push
(
$
.
common
.
sprintf
(
"<span class='%s'>%s</span>"
,
listClass
,
dict
.
dictLabel
));
return
false
;
}
...
...
ruoyi-admin/src/main/resources/templates/system/user/add.html
View file @
d21284f3
...
...
@@ -71,11 +71,9 @@
<div
class=
"form-group"
>
<label
class=
"col-sm-4 control-label"
>
用户性别:
</label>
<div
class=
"col-sm-8"
>
<div
class=
"input-group"
>
<select
name=
"sex"
class=
"form-control m-b"
th:with=
"type=${@dict.getType('sys_user_sex')}"
>
<option
th:each=
"dict : ${type}"
th:text=
"${dict.dictLabel}"
th:value=
"${dict.dictValue}"
></option>
</select>
</div>
<select
name=
"sex"
class=
"form-control m-b"
th:with=
"type=${@dict.getType('sys_user_sex')}"
>
<option
th:each=
"dict : ${type}"
th:text=
"${dict.dictLabel}"
th:value=
"${dict.dictValue}"
></option>
</select>
</div>
</div>
</div>
...
...
ruoyi-admin/src/main/resources/templates/system/user/edit.html
View file @
d21284f3
...
...
@@ -85,11 +85,9 @@
<div
class=
"form-group"
>
<label
class=
"col-sm-4 control-label"
>
用户性别:
</label>
<div
class=
"col-sm-8"
>
<div
class=
"input-group"
>
<select
name=
"sex"
class=
"form-control m-b"
th:with=
"type=${@dict.getType('sys_user_sex')}"
>
<option
th:each=
"dict : ${type}"
th:text=
"${dict.dictLabel}"
th:value=
"${dict.dictValue}"
th:field=
"*{sex}"
></option>
</select>
</div>
<select
name=
"sex"
class=
"form-control m-b"
th:with=
"type=${@dict.getType('sys_user_sex')}"
>
<option
th:each=
"dict : ${type}"
th:text=
"${dict.dictLabel}"
th:value=
"${dict.dictValue}"
th:field=
"*{sex}"
></option>
</select>
</div>
</div>
</div>
...
...
ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobController.java
View file @
d21284f3
...
...
@@ -127,7 +127,7 @@ public class SysJobController extends BaseController
@ResponseBody
public
AjaxResult
addSave
(
SysJob
job
)
throws
SchedulerException
,
TaskException
{
return
toAjax
(
jobService
.
insertJob
Cron
(
job
));
return
toAjax
(
jobService
.
insertJob
(
job
));
}
/**
...
...
@@ -149,7 +149,7 @@ public class SysJobController extends BaseController
@ResponseBody
public
AjaxResult
editSave
(
SysJob
job
)
throws
SchedulerException
,
TaskException
{
return
toAjax
(
jobService
.
updateJob
Cron
(
job
));
return
toAjax
(
jobService
.
updateJob
(
job
));
}
/**
...
...
ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJob.java
View file @
d21284f3
...
...
@@ -31,24 +31,20 @@ public class SysJob extends BaseEntity implements Serializable
@Excel
(
name
=
"任务组名"
)
private
String
jobGroup
;
/** 任务方法 */
@Excel
(
name
=
"任务方法"
)
private
String
methodName
;
/** 方法参数 */
@Excel
(
name
=
"方法参数"
)
private
String
methodParams
;
/** 调用目标字符串 */
@Excel
(
name
=
"调用目标字符串"
)
private
String
invokeTarget
;
/** cron执行表达式 */
@Excel
(
name
=
"执行表达式 "
)
private
String
cronExpression
;
/** cron计划策略 */
@Excel
(
name
=
"计划策略 "
)
@Excel
(
name
=
"计划策略 "
,
readConverterExp
=
"0=默认,1=立即触发执行,2=触发一次执行,3=不触发立即执行"
)
private
String
misfirePolicy
=
ScheduleConstants
.
MISFIRE_DEFAULT
;
/** 是否并发执行(0允许 1禁止) */
@Excel
(
name
=
"并发执行"
,
readConverterExp
=
"0=允许,1=禁止"
)
@Excel
(
name
=
"并发执行"
,
readConverterExp
=
"0=允许,1=禁止"
)
private
String
concurrent
;
/** 任务状态(0正常 1暂停) */
...
...
@@ -85,24 +81,14 @@ public class SysJob extends BaseEntity implements Serializable
this
.
jobGroup
=
jobGroup
;
}
public
String
getMethodName
()
{
return
methodName
;
}
public
void
setMethodName
(
String
methodName
)
public
String
getInvokeTarget
()
{
this
.
methodName
=
methodName
;
return
invokeTarget
;
}
public
String
getMethodParams
(
)
public
void
setInvokeTarget
(
String
invokeTarget
)
{
return
methodParams
;
}
public
void
setMethodParams
(
String
methodParams
)
{
this
.
methodParams
=
methodParams
;
this
.
invokeTarget
=
invokeTarget
;
}
public
String
getCronExpression
()
...
...
@@ -153,15 +139,13 @@ public class SysJob extends BaseEntity implements Serializable
{
this
.
status
=
status
;
}
@Override
public
String
toString
()
{
return
new
ToStringBuilder
(
this
,
ToStringStyle
.
MULTI_LINE_STYLE
)
.
append
(
"jobId"
,
getJobId
())
.
append
(
"jobName"
,
getJobName
())
.
append
(
"jobGroup"
,
getJobGroup
())
.
append
(
"methodName"
,
getMethodName
())
.
append
(
"methodParams"
,
getMethodParams
())
.
append
(
"cronExpression"
,
getCronExpression
())
.
append
(
"nextValidTime"
,
getNextValidTime
())
.
append
(
"misfirePolicy"
,
getMisfirePolicy
())
...
...
ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJobLog.java
View file @
d21284f3
...
...
@@ -27,13 +27,9 @@ public class SysJobLog extends BaseEntity
@Excel
(
name
=
"任务组名"
)
private
String
jobGroup
;
/** 任务方法 */
@Excel
(
name
=
"任务方法"
)
private
String
methodName
;
/** 方法参数 */
@Excel
(
name
=
"方法参数"
)
private
String
methodParams
;
/** 调用目标字符串 */
@Excel
(
name
=
"调用目标字符串"
)
private
String
invokeTarget
;
/** 日志信息 */
@Excel
(
name
=
"日志信息"
)
...
...
@@ -83,24 +79,14 @@ public class SysJobLog extends BaseEntity
this
.
jobGroup
=
jobGroup
;
}
public
String
getMethodName
()
{
return
methodName
;
}
public
void
setMethodName
(
String
methodName
)
public
String
getInvokeTarget
()
{
this
.
methodName
=
methodName
;
return
invokeTarget
;
}
public
String
getMethodParams
(
)
public
void
setInvokeTarget
(
String
invokeTarget
)
{
return
methodParams
;
}
public
void
setMethodParams
(
String
methodParams
)
{
this
.
methodParams
=
methodParams
;
this
.
invokeTarget
=
invokeTarget
;
}
public
String
getJobMessage
()
...
...
@@ -132,7 +118,7 @@ public class SysJobLog extends BaseEntity
{
this
.
exceptionInfo
=
exceptionInfo
;
}
public
Date
getStartTime
()
{
return
startTime
;
...
...
@@ -159,8 +145,6 @@ public class SysJobLog extends BaseEntity
.
append
(
"jobLogId"
,
getJobLogId
())
.
append
(
"jobName"
,
getJobName
())
.
append
(
"jobGroup"
,
getJobGroup
())
.
append
(
"methodName"
,
getMethodName
())
.
append
(
"methodParams"
,
getMethodParams
())
.
append
(
"jobMessage"
,
getJobMessage
())
.
append
(
"status"
,
getStatus
())
.
append
(
"exceptionInfo"
,
getExceptionInfo
())
...
...
ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobService.java
View file @
d21284f3
...
...
@@ -77,20 +77,20 @@ public interface ISysJobService
public
void
run
(
SysJob
job
)
throws
SchedulerException
;
/**
* 新增任务
表达式
* 新增任务
*
* @param job 调度信息
* @return 结果
*/
public
int
insertJob
Cron
(
SysJob
job
)
throws
SchedulerException
,
TaskException
;
public
int
insertJob
(
SysJob
job
)
throws
SchedulerException
,
TaskException
;
/**
* 更新任务
的时间表达式
* 更新任务
*
* @param job 调度信息
* @return 结果
*/
public
int
updateJob
Cron
(
SysJob
job
)
throws
SchedulerException
,
TaskException
;
public
int
updateJob
(
SysJob
job
)
throws
SchedulerException
,
TaskException
;
/**
* 校验cron表达式是否有效
...
...
@@ -99,4 +99,4 @@ public interface ISysJobService
* @return 结果
*/
public
boolean
checkCronExpressionIsValid
(
String
cronExpression
);
}
}
\ No newline at end of file
ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobServiceImpl.java
View file @
d21284f3
...
...
@@ -2,6 +2,8 @@ package com.ruoyi.quartz.service.impl;
import
java.util.List
;
import
javax.annotation.PostConstruct
;
import
org.quartz.JobDataMap
;
import
org.quartz.JobKey
;
import
org.quartz.Scheduler
;
import
org.quartz.SchedulerException
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -31,7 +33,8 @@ public class SysJobServiceImpl implements ISysJobService
private
SysJobMapper
jobMapper
;
/**
* 项目启动时,初始化定时器
* 项目启动时,初始化定时器
* 主要是防止手动修改数据库导致未同步到定时任务处理(注:不能手动修改数据库ID和任务组名,否则会导致脏数据)
*/
@PostConstruct
public
void
init
()
throws
SchedulerException
,
TaskException
...
...
@@ -39,7 +42,7 @@ public class SysJobServiceImpl implements ISysJobService
List
<
SysJob
>
jobList
=
jobMapper
.
selectJobAll
();
for
(
SysJob
job
:
jobList
)
{
ScheduleUtils
.
updateScheduleJob
(
scheduler
,
job
);
updateSchedulerJob
(
job
,
job
.
getJobGroup
()
);
}
}
...
...
@@ -76,11 +79,13 @@ public class SysJobServiceImpl implements ISysJobService
@Transactional
public
int
pauseJob
(
SysJob
job
)
throws
SchedulerException
{
Long
jobId
=
job
.
getJobId
();
String
jobGroup
=
job
.
getJobGroup
();
job
.
setStatus
(
ScheduleConstants
.
Status
.
PAUSE
.
getValue
());
int
rows
=
jobMapper
.
updateJob
(
job
);
if
(
rows
>
0
)
{
ScheduleUtils
.
pauseJob
(
scheduler
,
job
.
getJobId
(
));
scheduler
.
pauseJob
(
ScheduleUtils
.
getJobKey
(
jobId
,
jobGroup
));
}
return
rows
;
}
...
...
@@ -94,11 +99,13 @@ public class SysJobServiceImpl implements ISysJobService
@Transactional
public
int
resumeJob
(
SysJob
job
)
throws
SchedulerException
{
Long
jobId
=
job
.
getJobId
();
String
jobGroup
=
job
.
getJobGroup
();
job
.
setStatus
(
ScheduleConstants
.
Status
.
NORMAL
.
getValue
());
int
rows
=
jobMapper
.
updateJob
(
job
);
if
(
rows
>
0
)
{
ScheduleUtils
.
resumeJob
(
scheduler
,
job
.
getJobId
(
));
scheduler
.
resumeJob
(
ScheduleUtils
.
getJobKey
(
jobId
,
jobGroup
));
}
return
rows
;
}
...
...
@@ -112,10 +119,12 @@ public class SysJobServiceImpl implements ISysJobService
@Transactional
public
int
deleteJob
(
SysJob
job
)
throws
SchedulerException
{
int
rows
=
jobMapper
.
deleteJobById
(
job
.
getJobId
());
Long
jobId
=
job
.
getJobId
();
String
jobGroup
=
job
.
getJobGroup
();
int
rows
=
jobMapper
.
deleteJobById
(
jobId
);
if
(
rows
>
0
)
{
ScheduleUtils
.
deleteScheduleJob
(
scheduler
,
job
.
getJobId
(
));
scheduler
.
deleteJob
(
ScheduleUtils
.
getJobKey
(
jobId
,
jobGroup
));
}
return
rows
;
}
...
...
@@ -169,7 +178,13 @@ public class SysJobServiceImpl implements ISysJobService
@Transactional
public
void
run
(
SysJob
job
)
throws
SchedulerException
{
ScheduleUtils
.
run
(
scheduler
,
selectJobById
(
job
.
getJobId
()));
Long
jobId
=
job
.
getJobId
();
String
jobGroup
=
job
.
getJobGroup
();
SysJob
properties
=
selectJobById
(
job
.
getJobId
());
// 参数
JobDataMap
dataMap
=
new
JobDataMap
();
dataMap
.
put
(
ScheduleConstants
.
TASK_PROPERTIES
,
properties
);
scheduler
.
triggerJob
(
ScheduleUtils
.
getJobKey
(
jobId
,
jobGroup
),
dataMap
);
}
/**
...
...
@@ -179,7 +194,7 @@ public class SysJobServiceImpl implements ISysJobService
*/
@Override
@Transactional
public
int
insertJob
Cron
(
SysJob
job
)
throws
SchedulerException
,
TaskException
public
int
insertJob
(
SysJob
job
)
throws
SchedulerException
,
TaskException
{
job
.
setStatus
(
ScheduleConstants
.
Status
.
PAUSE
.
getValue
());
int
rows
=
jobMapper
.
insertJob
(
job
);
...
...
@@ -197,17 +212,37 @@ public class SysJobServiceImpl implements ISysJobService
*/
@Override
@Transactional
public
int
updateJob
Cron
(
SysJob
job
)
throws
SchedulerException
,
TaskException
public
int
updateJob
(
SysJob
job
)
throws
SchedulerException
,
TaskException
{
SysJob
properties
=
selectJobById
(
job
.
getJobId
());
int
rows
=
jobMapper
.
updateJob
(
job
);
if
(
rows
>
0
)
{
ScheduleUtils
.
updateScheduleJob
(
scheduler
,
job
);
updateSchedulerJob
(
job
,
properties
.
getJobGroup
()
);
}
return
rows
;
}
/**
* 更新任务
*
* @param job 任务对象
* @param jobGroup 任务组名
*/
public
void
updateSchedulerJob
(
SysJob
job
,
String
jobGroup
)
throws
SchedulerException
,
TaskException
{
Long
jobId
=
job
.
getJobId
();
// 判断是否存在
JobKey
jobKey
=
ScheduleUtils
.
getJobKey
(
jobId
,
jobGroup
);
if
(
scheduler
.
checkExists
(
jobKey
))
{
// 防止创建时存在数据问题 先移除,然后在执行创建操作
scheduler
.
deleteJob
(
jobKey
);
}
ScheduleUtils
.
createScheduleJob
(
scheduler
,
job
);
}
/**
* 校验cron表达式是否有效
*
* @param cronExpression 表达式
...
...
@@ -218,4 +253,4 @@ public class SysJobServiceImpl implements ISysJobService
{
return
CronUtils
.
isValid
(
cronExpression
);
}
}
}
\ No newline at end of file
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
View file @
d21284f3
package
com
.
ruoyi
.
quartz
.
task
;
import
org.springframework.stereotype.Component
;
import
com.ruoyi.common.utils.StringUtils
;
/**
* 定时任务调度测试
...
...
@@ -10,6 +11,11 @@ import org.springframework.stereotype.Component;
@Component
(
"ryTask"
)
public
class
RyTask
{
public
void
ryMultipleParams
(
String
s
,
Boolean
b
,
Long
l
,
Double
d
,
Integer
i
)
{
System
.
out
.
println
(
StringUtils
.
format
(
"执行多参方法: 字符串类型{},布尔类型{},长整型{},浮点型{},整形{}"
,
s
,
b
,
l
,
d
,
i
));
}
public
void
ryParams
(
String
params
)
{
System
.
out
.
println
(
"执行有参方法:"
+
params
);
...
...
ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/AbstractQuartzJob.java
View file @
d21284f3
...
...
@@ -76,8 +76,7 @@ public abstract class AbstractQuartzJob implements Job
final
SysJobLog
sysJobLog
=
new
SysJobLog
();
sysJobLog
.
setJobName
(
sysJob
.
getJobName
());
sysJobLog
.
setJobGroup
(
sysJob
.
getJobGroup
());
sysJobLog
.
setMethodName
(
sysJob
.
getMethodName
());
sysJobLog
.
setMethodParams
(
sysJob
.
getMethodParams
());
sysJobLog
.
setInvokeTarget
(
sysJob
.
getInvokeTarget
());
sysJobLog
.
setStartTime
(
startTime
);
sysJobLog
.
setEndTime
(
new
Date
());
long
runMs
=
sysJobLog
.
getEndTime
().
getTime
()
-
sysJobLog
.
getStartTime
().
getTime
();
...
...
ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/JobInvokeUtil.java
View file @
d21284f3
...
...
@@ -2,6 +2,8 @@ package com.ruoyi.quartz.util;
import
java.lang.reflect.InvocationTargetException
;
import
java.lang.reflect.Method
;
import
java.util.LinkedList
;
import
java.util.List
;
import
com.ruoyi.common.utils.StringUtils
;
import
com.ruoyi.common.utils.spring.SpringUtils
;
import
com.ruoyi.quartz.domain.SysJob
;
...
...
@@ -20,11 +22,21 @@ public class JobInvokeUtil
*/
public
static
void
invokeMethod
(
SysJob
sysJob
)
throws
Exception
{
Object
bean
=
SpringUtils
.
getBean
(
sysJob
.
getJobName
());
String
methodName
=
sysJob
.
getMethodName
();
String
methodParams
=
sysJob
.
getMethodParams
();
String
invokeTarget
=
sysJob
.
getInvokeTarget
();
String
beanName
=
getBeanName
(
invokeTarget
);
String
methodName
=
getMethodName
(
invokeTarget
);
List
<
Object
[]>
methodParams
=
getMethodParams
(
invokeTarget
);
invokeSpringBean
(
bean
,
methodName
,
methodParams
);
if
(!
isValidClassName
(
beanName
))
{
Object
bean
=
SpringUtils
.
getBean
(
beanName
);
invokeMethod
(
bean
,
methodName
,
methodParams
);
}
else
{
Object
bean
=
Class
.
forName
(
beanName
).
newInstance
();
invokeMethod
(
bean
,
methodName
,
methodParams
);
}
}
/**
...
...
@@ -34,14 +46,14 @@ public class JobInvokeUtil
* @param methodName 方法名称
* @param methodParams 方法参数
*/
private
static
void
invoke
SpringBean
(
Object
bean
,
String
methodName
,
String
methodParams
)
private
static
void
invoke
Method
(
Object
bean
,
String
methodName
,
List
<
Object
[]>
methodParams
)
throws
NoSuchMethodException
,
SecurityException
,
IllegalAccessException
,
IllegalArgumentException
,
InvocationTargetException
{
if
(
StringUtils
.
isNot
Empty
(
methodParams
)
)
if
(
StringUtils
.
isNot
Null
(
methodParams
)
&&
methodParams
.
size
()
>
0
)
{
Method
method
=
bean
.
getClass
().
getDeclaredMethod
(
methodName
,
String
.
class
);
method
.
invoke
(
bean
,
methodParams
);
Method
method
=
bean
.
getClass
().
getDeclaredMethod
(
methodName
,
getMethodParamsType
(
methodParams
)
);
method
.
invoke
(
bean
,
getMethodParamsValue
(
methodParams
)
);
}
else
{
...
...
@@ -49,4 +61,122 @@ public class JobInvokeUtil
method
.
invoke
(
bean
);
}
}
/**
* 校验是否为为class包名
*
* @param str 名称
* @return true是 false否
*/
public
static
boolean
isValidClassName
(
String
invokeTarget
)
{
return
StringUtils
.
countMatches
(
invokeTarget
,
"."
)
>
1
;
}
/**
* 获取bean名称
*
* @param invokeTarget 目标字符串
* @return bean名称
*/
public
static
String
getBeanName
(
String
invokeTarget
)
{
String
beanName
=
StringUtils
.
substringBefore
(
invokeTarget
,
"("
);
return
StringUtils
.
substringBeforeLast
(
beanName
,
"."
);
}
/**
* 获取bean方法
*
* @param invokeTarget 目标字符串
* @return method方法
*/
public
static
String
getMethodName
(
String
invokeTarget
)
{
String
methodName
=
StringUtils
.
substringBefore
(
invokeTarget
,
"("
);
return
StringUtils
.
substringAfterLast
(
methodName
,
"."
);
}
/**
* 获取method方法参数相关列表
*
* @param invokeTarget 目标字符串
* @return method方法相关参数列表
*/
public
static
List
<
Object
[]>
getMethodParams
(
String
invokeTarget
)
{
String
methodStr
=
StringUtils
.
substringBetween
(
invokeTarget
,
"("
,
")"
);
if
(
StringUtils
.
isEmpty
(
methodStr
))
{
return
null
;
}
String
[]
methodParams
=
methodStr
.
split
(
","
);
List
<
Object
[]>
classs
=
new
LinkedList
<>();
for
(
int
i
=
0
;
i
<
methodParams
.
length
;
i
++)
{
String
str
=
StringUtils
.
trimToEmpty
(
methodParams
[
i
]);
// String字符串类型,包含'
if
(
StringUtils
.
contains
(
str
,
"'"
))
{
classs
.
add
(
new
Object
[]
{
StringUtils
.
replace
(
str
,
"'"
,
""
),
String
.
class
});
}
// boolean布尔类型,等于true或者false
else
if
(
StringUtils
.
equals
(
str
,
"true"
)
||
StringUtils
.
equalsIgnoreCase
(
str
,
"false"
))
{
classs
.
add
(
new
Object
[]
{
Boolean
.
valueOf
(
str
),
Boolean
.
class
});
}
// long长整形,包含L
else
if
(
StringUtils
.
containsIgnoreCase
(
str
,
"L"
))
{
classs
.
add
(
new
Object
[]
{
Long
.
valueOf
(
StringUtils
.
replaceIgnoreCase
(
str
,
"L"
,
""
)),
Long
.
class
});
}
// double浮点类型,包含D
else
if
(
StringUtils
.
containsIgnoreCase
(
str
,
"D"
))
{
classs
.
add
(
new
Object
[]
{
Double
.
valueOf
(
StringUtils
.
replaceIgnoreCase
(
str
,
"D"
,
""
)),
Double
.
class
});
}
// 其他类型归类为整形
else
{
classs
.
add
(
new
Object
[]
{
Integer
.
valueOf
(
str
),
Integer
.
class
});
}
}
return
classs
;
}
/**
* 获取参数类型
*
* @param methodParams 参数相关列表
* @return 参数类型列表
*/
public
static
Class
<?>[]
getMethodParamsType
(
List
<
Object
[]>
methodParams
)
{
Class
<?>[]
classs
=
new
Class
<?>[
methodParams
.
size
()];
int
index
=
0
;
for
(
Object
[]
os
:
methodParams
)
{
classs
[
index
]
=
(
Class
<?>)
os
[
1
];
index
++;
}
return
classs
;
}
/**
* 获取参数值
*
* @param methodParams 参数相关列表
* @return 参数值列表
*/
public
static
Object
[]
getMethodParamsValue
(
List
<
Object
[]>
methodParams
)
{
Object
[]
classs
=
new
Object
[
methodParams
.
size
()];
int
index
=
0
;
for
(
Object
[]
os
:
methodParams
)
{
classs
[
index
]
=
(
Object
)
os
[
0
];
index
++;
}
return
classs
;
}
}
ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/ScheduleUtils.java
View file @
d21284f3
...
...
@@ -4,15 +4,12 @@ import org.quartz.CronScheduleBuilder;
import
org.quartz.CronTrigger
;
import
org.quartz.Job
;
import
org.quartz.JobBuilder
;
import
org.quartz.JobDataMap
;
import
org.quartz.JobDetail
;
import
org.quartz.JobKey
;
import
org.quartz.Scheduler
;
import
org.quartz.SchedulerException
;
import
org.quartz.TriggerBuilder
;
import
org.quartz.TriggerKey
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
com.ruoyi.common.constant.ScheduleConstants
;
import
com.ruoyi.common.exception.job.TaskException
;
import
com.ruoyi.common.exception.job.TaskException.Code
;
...
...
@@ -26,8 +23,6 @@ import com.ruoyi.quartz.domain.SysJob;
*/
public
class
ScheduleUtils
{
private
static
final
Logger
log
=
LoggerFactory
.
getLogger
(
ScheduleUtils
.
class
);
/**
* 得到quartz任务类
*
...
...
@@ -41,35 +36,19 @@ public class ScheduleUtils
}
/**
*
获取触发器key
*
构建任务触发对象
*/
public
static
TriggerKey
getTriggerKey
(
Long
jobId
)
public
static
TriggerKey
getTriggerKey
(
Long
jobId
,
String
jobGroup
)
{
return
TriggerKey
.
triggerKey
(
ScheduleConstants
.
TASK_CLASS_NAME
+
jobId
);
return
TriggerKey
.
triggerKey
(
ScheduleConstants
.
TASK_CLASS_NAME
+
jobId
,
jobGroup
);
}
/**
*
获取jobKey
*
构建任务键对象
*/
public
static
JobKey
getJobKey
(
Long
jobId
)
public
static
JobKey
getJobKey
(
Long
jobId
,
String
jobGroup
)
{
return
JobKey
.
jobKey
(
ScheduleConstants
.
TASK_CLASS_NAME
+
jobId
);
}
/**
* 获取表达式触发器
*/
public
static
CronTrigger
getCronTrigger
(
Scheduler
scheduler
,
Long
jobId
)
{
try
{
return
(
CronTrigger
)
scheduler
.
getTrigger
(
getTriggerKey
(
jobId
));
}
catch
(
SchedulerException
e
)
{
log
.
error
(
"getCronTrigger 异常:"
,
e
);
}
return
null
;
return
JobKey
.
jobKey
(
ScheduleConstants
.
TASK_CLASS_NAME
+
jobId
,
jobGroup
);
}
/**
...
...
@@ -79,24 +58,26 @@ public class ScheduleUtils
{
Class
<?
extends
Job
>
jobClass
=
getQuartzJobClass
(
job
);
// 构建job信息
JobDetail
jobDetail
=
JobBuilder
.
newJob
(
jobClass
).
withIdentity
(
getJobKey
(
job
.
getJobId
())).
build
();
Long
jobId
=
job
.
getJobId
();
String
jobGroup
=
job
.
getJobGroup
();
JobDetail
jobDetail
=
JobBuilder
.
newJob
(
jobClass
).
withIdentity
(
getJobKey
(
jobId
,
jobGroup
)).
build
();
// 表达式调度构建器
CronScheduleBuilder
cronScheduleBuilder
=
CronScheduleBuilder
.
cronSchedule
(
job
.
getCronExpression
());
cronScheduleBuilder
=
handleCronScheduleMisfirePolicy
(
job
,
cronScheduleBuilder
);
// 按新的cronExpression表达式构建一个新的trigger
CronTrigger
trigger
=
TriggerBuilder
.
newTrigger
().
withIdentity
(
getTriggerKey
(
job
.
getJobId
()
))
CronTrigger
trigger
=
TriggerBuilder
.
newTrigger
().
withIdentity
(
getTriggerKey
(
job
Id
,
jobGroup
))
.
withSchedule
(
cronScheduleBuilder
).
build
();
// 放入参数,运行时的方法可以获取
jobDetail
.
getJobDataMap
().
put
(
ScheduleConstants
.
TASK_PROPERTIES
,
job
);
// 判断是否存在
if
(
scheduler
.
checkExists
(
getJobKey
(
job
.
getJobId
()
)))
if
(
scheduler
.
checkExists
(
getJobKey
(
job
Id
,
jobGroup
)))
{
// 防止创建时存在数据问题 先移除,然后在执行创建操作
scheduler
.
deleteJob
(
getJobKey
(
job
.
getJobId
()
));
scheduler
.
deleteJob
(
getJobKey
(
job
Id
,
jobGroup
));
}
scheduler
.
scheduleJob
(
jobDetail
,
trigger
);
...
...
@@ -104,54 +85,13 @@ public class ScheduleUtils
// 暂停任务
if
(
job
.
getStatus
().
equals
(
ScheduleConstants
.
Status
.
PAUSE
.
getValue
()))
{
pauseJob
(
scheduler
,
job
.
getJobId
(
));
scheduler
.
pauseJob
(
ScheduleUtils
.
getJobKey
(
jobId
,
jobGroup
));
}
}
/**
* 更新定时任务
*/
public
static
void
updateScheduleJob
(
Scheduler
scheduler
,
SysJob
job
)
throws
SchedulerException
,
TaskException
{
createScheduleJob
(
scheduler
,
job
);
}
/**
* 立即执行任务
*/
public
static
void
run
(
Scheduler
scheduler
,
SysJob
job
)
throws
SchedulerException
{
// 参数
JobDataMap
dataMap
=
new
JobDataMap
();
dataMap
.
put
(
ScheduleConstants
.
TASK_PROPERTIES
,
job
);
scheduler
.
triggerJob
(
getJobKey
(
job
.
getJobId
()),
dataMap
);
}
/**
* 暂停任务
*/
public
static
void
pauseJob
(
Scheduler
scheduler
,
Long
jobId
)
throws
SchedulerException
{
scheduler
.
pauseJob
(
getJobKey
(
jobId
));
}
/**
* 恢复任务
* 设置定时任务策略
*/
public
static
void
resumeJob
(
Scheduler
scheduler
,
Long
jobId
)
throws
SchedulerException
{
scheduler
.
resumeJob
(
getJobKey
(
jobId
));
}
/**
* 删除定时任务
*/
public
static
void
deleteScheduleJob
(
Scheduler
scheduler
,
Long
jobId
)
throws
SchedulerException
{
scheduler
.
deleteJob
(
getJobKey
(
jobId
));
}
public
static
CronScheduleBuilder
handleCronScheduleMisfirePolicy
(
SysJob
job
,
CronScheduleBuilder
cb
)
throws
TaskException
{
...
...
@@ -170,4 +110,4 @@ public class ScheduleUtils
+
"' cannot be used in cron schedule tasks"
,
Code
.
CONFIG_ERROR
);
}
}
}
}
\ No newline at end of file
ruoyi-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml
View file @
d21284f3
...
...
@@ -8,8 +8,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<id
property=
"jobLogId"
column=
"job_log_id"
/>
<result
property=
"jobName"
column=
"job_name"
/>
<result
property=
"jobGroup"
column=
"job_group"
/>
<result
property=
"methodName"
column=
"method_name"
/>
<result
property=
"methodParams"
column=
"method_params"
/>
<result
property=
"invokeTarget"
column=
"invoke_target"
/>
<result
property=
"jobMessage"
column=
"job_message"
/>
<result
property=
"status"
column=
"status"
/>
<result
property=
"exceptionInfo"
column=
"exception_info"
/>
...
...
@@ -17,7 +16,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap>
<sql
id=
"selectJobLogVo"
>
select job_log_id, job_name, job_group,
method_name, method_params
, job_message, status, exception_info, create_time
select job_log_id, job_name, job_group,
invoke_target
, job_message, status, exception_info, create_time
from sys_job_log
</sql>
...
...
@@ -30,8 +29,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if
test=
"status != null and status != ''"
>
AND status = #{status}
</if>
<if
test=
"
methodName != null and methodName
!= ''"
>
AND
method_name like concat('%', #{methodName
}, '%')
<if
test=
"
invokeTarget != null and invokeTarget
!= ''"
>
AND
invoke_target like concat('%', #{invokeTarget
}, '%')
</if>
<if
test=
"params.beginTime != null and params.beginTime != ''"
>
<!-- 开始时间检索 -->
and date_format(create_time,'%y%m%d')
>
= date_format(#{params.beginTime},'%y%m%d')
...
...
@@ -71,8 +70,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if
test=
"jobLogId != null and jobLogId != 0"
>
job_log_id,
</if>
<if
test=
"jobName != null and jobName != ''"
>
job_name,
</if>
<if
test=
"jobGroup != null and jobGroup != ''"
>
job_group,
</if>
<if
test=
"methodName != null and methodName != ''"
>
method_name,
</if>
<if
test=
"methodParams != null and methodParams != ''"
>
method_params,
</if>
<if
test=
"invokeTarget != null and invokeTarget != ''"
>
invoke_target,
</if>
<if
test=
"jobMessage != null and jobMessage != ''"
>
job_message,
</if>
<if
test=
"status != null and status != ''"
>
status,
</if>
<if
test=
"exceptionInfo != null and exceptionInfo != ''"
>
exception_info,
</if>
...
...
@@ -81,8 +79,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if
test=
"jobLogId != null and jobLogId != 0"
>
#{jobLogId},
</if>
<if
test=
"jobName != null and jobName != ''"
>
#{jobName},
</if>
<if
test=
"jobGroup != null and jobGroup != ''"
>
#{jobGroup},
</if>
<if
test=
"methodName != null and methodName != ''"
>
#{methodName},
</if>
<if
test=
"methodParams != null and methodParams != ''"
>
#{methodParams},
</if>
<if
test=
"invokeTarget != null and invokeTarget != ''"
>
#{invokeTarget},
</if>
<if
test=
"jobMessage != null and jobMessage != ''"
>
#{jobMessage},
</if>
<if
test=
"status != null and status != ''"
>
#{status},
</if>
<if
test=
"exceptionInfo != null and exceptionInfo != ''"
>
#{exceptionInfo},
</if>
...
...
ruoyi-quartz/src/main/resources/mapper/quartz/SysJobMapper.xml
View file @
d21284f3
...
...
@@ -8,8 +8,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<id
property=
"jobId"
column=
"job_id"
/>
<result
property=
"jobName"
column=
"job_name"
/>
<result
property=
"jobGroup"
column=
"job_group"
/>
<result
property=
"methodName"
column=
"method_name"
/>
<result
property=
"methodParams"
column=
"method_params"
/>
<result
property=
"invokeTarget"
column=
"invoke_target"
/>
<result
property=
"cronExpression"
column=
"cron_expression"
/>
<result
property=
"misfirePolicy"
column=
"misfire_policy"
/>
<result
property=
"concurrent"
column=
"concurrent"
/>
...
...
@@ -22,7 +21,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap>
<sql
id=
"selectJobVo"
>
select job_id, job_name, job_group,
method_name, method_params
, cron_expression, misfire_policy, concurrent, status, create_by, create_time, remark
select job_id, job_name, job_group,
invoke_target
, cron_expression, misfire_policy, concurrent, status, create_by, create_time, remark
from sys_job
</sql>
...
...
@@ -32,11 +31,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if
test=
"jobName != null and jobName != ''"
>
AND job_name like concat('%', #{jobName}, '%')
</if>
<if
test=
"jobGroup != null and jobGroup != ''"
>
AND job_group = #{jobGroup}
</if>
<if
test=
"status != null and status != ''"
>
AND status = #{status}
</if>
<if
test=
"
methodName != null and methodName
!= ''"
>
AND
method_name like concat('%', #{methodName
}, '%')
<if
test=
"
invokeTarget != null and invokeTarget
!= ''"
>
AND
invoke_target like concat('%', #{invokeTarget
}, '%')
</if>
</where>
</select>
...
...
@@ -66,8 +68,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<set>
<if
test=
"jobName != null and jobName != ''"
>
job_name = #{jobName},
</if>
<if
test=
"jobGroup != null and jobGroup != ''"
>
job_group = #{jobGroup},
</if>
<if
test=
"methodName != null and methodName != ''"
>
method_name = #{methodName},
</if>
<if
test=
"methodParams != null"
>
method_params = #{methodParams},
</if>
<if
test=
"invokeTarget != null and invokeTarget != ''"
>
invoke_target = #{invokeTarget},
</if>
<if
test=
"cronExpression != null and cronExpression != ''"
>
cron_expression = #{cronExpression},
</if>
<if
test=
"misfirePolicy != null and misfirePolicy != ''"
>
misfire_policy = #{misfirePolicy},
</if>
<if
test=
"concurrent != null and concurrent != ''"
>
concurrent = #{concurrent},
</if>
...
...
@@ -84,8 +85,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if
test=
"jobId != null and jobId != 0"
>
job_id,
</if>
<if
test=
"jobName != null and jobName != ''"
>
job_name,
</if>
<if
test=
"jobGroup != null and jobGroup != ''"
>
job_group,
</if>
<if
test=
"methodName != null and methodName != ''"
>
method_name,
</if>
<if
test=
"methodParams != null and methodParams != ''"
>
method_params,
</if>
<if
test=
"invokeTarget != null and invokeTarget != ''"
>
invoke_target,
</if>
<if
test=
"cronExpression != null and cronExpression != ''"
>
cron_expression,
</if>
<if
test=
"misfirePolicy != null and misfirePolicy != ''"
>
misfire_policy,
</if>
<if
test=
"concurrent != null and concurrent != ''"
>
concurrent,
</if>
...
...
@@ -97,8 +97,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if
test=
"jobId != null and jobId != 0"
>
#{jobId},
</if>
<if
test=
"jobName != null and jobName != ''"
>
#{jobName},
</if>
<if
test=
"jobGroup != null and jobGroup != ''"
>
#{jobGroup},
</if>
<if
test=
"methodName != null and methodName != ''"
>
#{methodName},
</if>
<if
test=
"methodParams != null and methodParams != ''"
>
#{methodParams},
</if>
<if
test=
"invokeTarget != null and invokeTarget != ''"
>
#{invokeTarget},
</if>
<if
test=
"cronExpression != null and cronExpression != ''"
>
#{cronExpression},
</if>
<if
test=
"misfirePolicy != null and misfirePolicy != ''"
>
#{misfirePolicy},
</if>
<if
test=
"concurrent != null and concurrent != ''"
>
#{concurrent},
</if>
...
...
ruoyi-quartz/src/main/resources/templates/monitor/job/add.html
View file @
d21284f3
...
...
@@ -14,21 +14,20 @@
</div>
</div>
<div
class=
"form-group"
>
<label
class=
"col-sm-3 control-label"
>
任务
组名
:
</label>
<label
class=
"col-sm-3 control-label"
>
任务
分组
:
</label>
<div
class=
"col-sm-8"
>
<input
class=
"form-control"
type=
"text"
name=
"jobGroup"
id=
"jobGroup"
required
>
<select
name=
"jobGroup"
class=
"form-control m-b"
th:with=
"type=${@dict.getType('sys_job_group')}"
>
<option
th:each=
"dict : ${type}"
th:text=
"${dict.dictLabel}"
th:value=
"${dict.dictValue}"
></option>
</select>
</div>
</div>
<div
class=
"form-group"
>
<label
class=
"col-sm-3 control-label "
>
方法名称
:
</label>
<label
class=
"col-sm-3 control-label "
>
调用目标字符串
:
</label>
<div
class=
"col-sm-8"
>
<input
class=
"form-control"
type=
"text"
name=
"methodName"
id=
"methodName"
required
>
</div>
</div>
<div
class=
"form-group"
>
<label
class=
"col-sm-3 control-label "
>
方法参数:
</label>
<div
class=
"col-sm-8"
>
<input
class=
"form-control"
type=
"text"
name=
"methodParams"
id=
"methodParams"
>
<input
class=
"form-control"
type=
"text"
name=
"invokeTarget"
id=
"invokeTarget"
required
>
<span
class=
"help-block m-b-none"
><i
class=
"fa fa-info-circle"
></i>
Bean调用示例:ryTask.ryParams('ry')
</span>
<span
class=
"help-block m-b-none"
><i
class=
"fa fa-info-circle"
></i>
Class类调用示例:com.ruoyi.quartz.task.RyTask.ryParams('ry')
</span>
<span
class=
"help-block m-b-none"
><i
class=
"fa fa-info-circle"
></i>
参数说明:支持字符串,布尔类型,长整型,浮点型,整形
</span>
</div>
</div>
<div
class=
"form-group"
>
...
...
ruoyi-quartz/src/main/resources/templates/monitor/job/detail.html
View file @
d21284f3
...
...
@@ -18,13 +18,13 @@
</div>
</div>
<div
class=
"form-group"
>
<label
class=
"col-sm-3 control-label"
>
任务
组名
:
</label>
<label
class=
"col-sm-3 control-label"
>
任务
分组
:
</label>
<div
class=
"form-control-static"
th:text=
"${jobLog.jobGroup}"
>
</div>
</div>
<div
class=
"form-group"
>
<label
class=
"col-sm-3 control-label"
>
任务方法
:
</label>
<div
class=
"form-control-static"
th:text=
"${jobLog.
methodName} + '(' + ${#strings.defaultString(jobLog.methodParams,'')} + ')'
"
>
<label
class=
"col-sm-3 control-label"
>
调用目标字符串
:
</label>
<div
class=
"form-control-static"
th:text=
"${jobLog.
invokeTarget}
"
>
</div>
</div>
<div
class=
"form-group"
>
...
...
@@ -56,13 +56,13 @@
</div>
</div>
<div
class=
"form-group"
>
<label
class=
"col-sm-3 control-label"
>
任务
组名
:
</label>
<label
class=
"col-sm-3 control-label"
>
任务
分组
:
</label>
<div
class=
"form-control-static"
th:text=
"${job.jobGroup}"
>
</div>
</div>
<div
class=
"form-group"
>
<label
class=
"col-sm-3 control-label"
>
任务方法
:
</label>
<div
class=
"form-control-static"
th:text=
"${job.
methodName} + '(' + ${#strings.defaultString(job.methodParams,'')} + ')'
"
>
<label
class=
"col-sm-3 control-label"
>
调用目标字符串
:
</label>
<div
class=
"form-control-static"
th:text=
"${job.
invokeTarget}
"
>
</div>
</div>
<div
class=
"form-group"
>
...
...
ruoyi-quartz/src/main/resources/templates/monitor/job/edit.html
View file @
d21284f3
...
...
@@ -15,21 +15,20 @@
</div>
</div>
<div
class=
"form-group"
>
<label
class=
"col-sm-3 control-label"
>
任务
组名
:
</label>
<label
class=
"col-sm-3 control-label"
>
任务
分组
:
</label>
<div
class=
"col-sm-8"
>
<input
class=
"form-control"
type=
"text"
name=
"jobGroup"
id=
"jobGroup"
th:field=
"*{jobGroup}"
required
>
<select
name=
"jobGroup"
class=
"form-control m-b"
th:with=
"type=${@dict.getType('sys_job_group')}"
>
<option
th:each=
"dict : ${type}"
th:text=
"${dict.dictLabel}"
th:value=
"${dict.dictValue}"
th:field=
"*{jobGroup}"
></option>
</select>
</div>
</div>
<div
class=
"form-group"
>
<label
class=
"col-sm-3 control-label "
>
方法名称
:
</label>
<label
class=
"col-sm-3 control-label "
>
调用目标字符串
:
</label>
<div
class=
"col-sm-8"
>
<input
class=
"form-control"
type=
"text"
name=
"methodName"
id=
"methodName"
th:field=
"*{methodName}"
required
>
</div>
</div>
<div
class=
"form-group"
>
<label
class=
"col-sm-3 control-label "
>
方法参数:
</label>
<div
class=
"col-sm-8"
>
<input
class=
"form-control"
type=
"text"
name=
"methodParams"
id=
"methodParams"
th:field=
"*{methodParams}"
>
<input
class=
"form-control"
type=
"text"
name=
"invokeTarget"
id=
"invokeTarget"
th:field=
"*{invokeTarget}"
required
>
<span
class=
"help-block m-b-none"
><i
class=
"fa fa-info-circle"
></i>
Bean调用示例:ryTask.ryParams('ry')
</span>
<span
class=
"help-block m-b-none"
><i
class=
"fa fa-info-circle"
></i>
Class类调用示例:com.ruoyi.quartz.task.RyTask.ryParams('ry')
</span>
<span
class=
"help-block m-b-none"
><i
class=
"fa fa-info-circle"
></i>
参数说明:支持字符串,布尔类型,长整型,浮点型,整形
</span>
</div>
</div>
<div
class=
"form-group"
>
...
...
@@ -77,15 +76,6 @@
$
(
"#form-job-edit"
).
validate
({
onkeyup
:
false
,
rules
:{
jobName
:{
required
:
true
,
},
jobGroup
:{
required
:
true
,
},
methodName
:{
required
:
true
,
},
cronExpression
:{
required
:
true
,
remote
:
{
...
...
ruoyi-quartz/src/main/resources/templates/monitor/job/job.html
View file @
d21284f3
...
...
@@ -14,7 +14,10 @@
任务名称:
<input
type=
"text"
name=
"jobName"
/>
</li>
<li>
方法名称:
<input
type=
"text"
name=
"methodName"
/>
任务分组:
<select
name=
"jobGroup"
th:with=
"type=${@dict.getType('sys_job_group')}"
>
<option
value=
""
>
所有
</option>
<option
th:each=
"dict : ${type}"
th:text=
"${dict.dictLabel}"
th:value=
"${dict.dictValue}"
></option>
</select>
</li>
<li>
任务状态:
<select
name=
"status"
th:with=
"type=${@dict.getType('sys_job_status')}"
>
...
...
@@ -60,7 +63,7 @@
var
editFlag
=
[[
$
{@
permission
.
hasPermi
(
'monitor:job:edit'
)}]];
var
removeFlag
=
[[
$
{@
permission
.
hasPermi
(
'monitor:job:remove'
)}]];
var
statusFlag
=
[[
$
{@
permission
.
hasPermi
(
'monitor:job:changeStatus'
)}]];
var
datas
=
[[
$
{@
dict
.
getType
(
'sys_job_
status
'
)}]];
var
datas
=
[[
$
{@
dict
.
getType
(
'sys_job_
group
'
)}]];
var
prefix
=
ctx
+
"monitor/job"
;
$
(
function
()
{
...
...
@@ -84,20 +87,20 @@
{
field
:
'jobName'
,
title
:
'任务名称'
,
sortable
:
true
},
{
field
:
'jobGroup'
,
title
:
'任务组名'
,
sortable
:
true
},
{
field
:
'methodName'
,
title
:
'方法名称'
title
:
'任务分组'
,
formatter
:
function
(
value
,
row
,
index
)
{
return
$
.
table
.
selectDictLabel
(
datas
,
value
);
}
},
{
field
:
'methodParams'
,
title
:
'方法参数'
field
:
'invokeTarget'
,
title
:
'调用目标字符串'
,
formatter
:
function
(
value
,
row
,
index
)
{
return
$
.
table
.
tooltip
(
value
);
}
},
{
field
:
'cronExpression'
,
...
...
@@ -121,7 +124,7 @@
align
:
'center'
,
formatter
:
function
(
value
,
row
,
index
)
{
var
actions
=
[];
actions
.
push
(
'<a class="btn btn-primary btn-xs '
+
statusFlag
+
'" href="javascript:void(0)" onclick="run(
\'
'
+
row
.
jobId
+
'
\'
)"><i class="fa fa-play-circle-o"></i> 执行一次</a> '
);
actions
.
push
(
'<a class="btn btn-primary btn-xs '
+
statusFlag
+
'" href="javascript:void(0)" onclick="run(
\'
'
+
row
.
jobId
+
'
\'
,
\'
'
+
row
.
jobGroup
+
'
\'
)"><i class="fa fa-play-circle-o"></i> 执行一次</a> '
);
actions
.
push
(
'<a class="btn btn-warning btn-xs '
+
detailFlag
+
'" href="javascript:void(0)" onclick="$.operate.detail(
\'
'
+
row
.
jobId
+
'
\'
)"><i class="fa fa-search"></i>详细</a> '
);
return
actions
.
join
(
''
);
}
...
...
@@ -133,30 +136,30 @@
/* 调度任务状态显示 */
function
statusTools
(
row
)
{
if
(
row
.
status
==
1
)
{
return
'<i class=
\
"fa fa-toggle-off text-info fa-2x
\
" onclick="start(
\'
'
+
row
.
jobId
+
'
\'
)"></i> '
;
return
'<i class=
\
"fa fa-toggle-off text-info fa-2x
\
" onclick="start(
\'
'
+
row
.
jobId
+
'
\'
,
\'
'
+
row
.
jobGroup
+
'
\'
)"></i> '
;
}
else
{
return
'<i class=
\
"fa fa-toggle-on text-info fa-2x
\
" onclick="stop(
\'
'
+
row
.
jobId
+
'
\'
)"></i> '
;
return
'<i class=
\
"fa fa-toggle-on text-info fa-2x
\
" onclick="stop(
\'
'
+
row
.
jobId
+
'
\'
,
\'
'
+
row
.
jobGroup
+
'
\'
)"></i> '
;
}
}
/* 立即执行一次 */
function
run
(
jobId
)
{
function
run
(
jobId
,
jobGroup
)
{
$
.
modal
.
confirm
(
"确认要立即执行一次任务吗?"
,
function
()
{
$
.
operate
.
post
(
prefix
+
"/run"
,
{
"jobId"
:
jobId
});
$
.
operate
.
post
(
prefix
+
"/run"
,
{
"jobId"
:
jobId
,
"jobId"
:
jobId
,
"jobGroup"
:
jobGroup
});
})
}
/* 调度任务-停用 */
function
stop
(
jobId
)
{
function
stop
(
jobId
,
jobGroup
)
{
$
.
modal
.
confirm
(
"确认要停用任务吗?"
,
function
()
{
$
.
operate
.
post
(
prefix
+
"/changeStatus"
,
{
"jobId"
:
jobId
,
"status"
:
1
});
$
.
operate
.
post
(
prefix
+
"/changeStatus"
,
{
"jobId"
:
jobId
,
"
jobGroup"
:
jobGroup
,
"
status"
:
1
});
})
}
/* 调度任务-启用 */
function
start
(
jobId
)
{
function
start
(
jobId
,
jobGroup
)
{
$
.
modal
.
confirm
(
"确认要启用任务吗?"
,
function
()
{
$
.
operate
.
post
(
prefix
+
"/changeStatus"
,
{
"jobId"
:
jobId
,
"status"
:
0
});
$
.
operate
.
post
(
prefix
+
"/changeStatus"
,
{
"jobId"
:
jobId
,
"
jobGroup"
:
jobGroup
,
"
status"
:
0
});
})
}
...
...
ruoyi-quartz/src/main/resources/templates/monitor/job/jobLog.html
View file @
d21284f3
...
...
@@ -58,7 +58,8 @@
<th:block
th:include=
"include :: footer"
/>
<script
th:inline=
"javascript"
>
var
detailFlag
=
[[
$
{@
permission
.
hasPermi
(
'monitor:job:detail'
)}]];
var
datas
=
[[
$
{@
dict
.
getType
(
'sys_common_status'
)}]];
var
statusDatas
=
[[
$
{@
dict
.
getType
(
'sys_common_status'
)}]];
var
groupDatas
=
[[
$
{@
dict
.
getType
(
'sys_job_group'
)}]];
var
prefix
=
ctx
+
"monitor/jobLog"
;
$
(
function
()
{
...
...
@@ -80,21 +81,21 @@
},
{
field
:
'jobName'
,
title
:
'任务名称'
,
sortable
:
true
title
:
'任务名称'
},
{
field
:
'jobGroup'
,
title
:
'任务组名'
,
sortable
:
true
},
{
field
:
'methodName'
,
title
:
'方法名称'
title
:
'任务分组'
,
formatter
:
function
(
value
,
row
,
index
)
{
return
$
.
table
.
selectDictLabel
(
groupDatas
,
value
);
}
},
{
field
:
'methodParams'
,
title
:
'方法参数'
field
:
'invokeTarget'
,
title
:
'调用目标字符串'
,
formatter
:
function
(
value
,
row
,
index
)
{
return
$
.
table
.
tooltip
(
value
);
}
},
{
field
:
'jobMessage'
,
...
...
@@ -105,7 +106,7 @@
title
:
'状态'
,
align
:
'center'
,
formatter
:
function
(
value
,
row
,
index
)
{
return
$
.
table
.
selectDictLabel
(
d
atas
,
value
);
return
$
.
table
.
selectDictLabel
(
statusD
atas
,
value
);
}
},
{
...
...
sql/ry_20190
601
.sql
→
sql/ry_20190
712
.sql
View file @
d21284f3
This source diff could not be displayed because it is too large. You can
view the blob
instead.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment