Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
jinli gu
RuoYi Vue
Commits
2cc14e5f
"xxpay4spring-boot/vscode:/vscode.git/clone" did not exist on "0764c266dfb44751b9f1fa5aeae1d4f2d75ac8a6"
Commit
2cc14e5f
authored
Mar 18, 2020
by
RuoYi
Browse files
若依 2.2
parent
505ee1d6
Changes
42
Hide whitespace changes
Inline
Side-by-side
ruoyi/src/main/java/com/ruoyi/common/utils/job/QuartzDisallowConcurrentExecution.java
0 → 100644
View file @
2cc14e5f
package
com.ruoyi.common.utils.job
;
import
org.quartz.DisallowConcurrentExecution
;
import
org.quartz.JobExecutionContext
;
import
com.ruoyi.project.monitor.domain.SysJob
;
/**
* 定时任务处理(禁止并发执行)
*
* @author ruoyi
*
*/
@DisallowConcurrentExecution
public
class
QuartzDisallowConcurrentExecution
extends
AbstractQuartzJob
{
@Override
protected
void
doExecute
(
JobExecutionContext
context
,
SysJob
sysJob
)
throws
Exception
{
JobInvokeUtil
.
invokeMethod
(
sysJob
);
}
}
ruoyi/src/main/java/com/ruoyi/common/utils/job/QuartzJobExecution.java
0 → 100644
View file @
2cc14e5f
package
com.ruoyi.common.utils.job
;
import
org.quartz.JobExecutionContext
;
import
com.ruoyi.project.monitor.domain.SysJob
;
/**
* 定时任务处理(允许并发执行)
*
* @author ruoyi
*
*/
public
class
QuartzJobExecution
extends
AbstractQuartzJob
{
@Override
protected
void
doExecute
(
JobExecutionContext
context
,
SysJob
sysJob
)
throws
Exception
{
JobInvokeUtil
.
invokeMethod
(
sysJob
);
}
}
ruoyi/src/main/java/com/ruoyi/common/utils/job/ScheduleUtils.java
0 → 100644
View file @
2cc14e5f
package
com.ruoyi.common.utils.job
;
import
org.quartz.CronScheduleBuilder
;
import
org.quartz.CronTrigger
;
import
org.quartz.Job
;
import
org.quartz.JobBuilder
;
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
com.ruoyi.common.constant.ScheduleConstants
;
import
com.ruoyi.common.exception.job.TaskException
;
import
com.ruoyi.common.exception.job.TaskException.Code
;
import
com.ruoyi.project.monitor.domain.SysJob
;
/**
* 定时任务工具类
*
* @author ruoyi
*
*/
public
class
ScheduleUtils
{
/**
* 得到quartz任务类
*
* @param sysJob 执行计划
* @return 具体执行任务类
*/
private
static
Class
<?
extends
Job
>
getQuartzJobClass
(
SysJob
sysJob
)
{
boolean
isConcurrent
=
"0"
.
equals
(
sysJob
.
getConcurrent
());
return
isConcurrent
?
QuartzJobExecution
.
class
:
QuartzDisallowConcurrentExecution
.
class
;
}
/**
* 构建任务触发对象
*/
public
static
TriggerKey
getTriggerKey
(
Long
jobId
,
String
jobGroup
)
{
return
TriggerKey
.
triggerKey
(
ScheduleConstants
.
TASK_CLASS_NAME
+
jobId
,
jobGroup
);
}
/**
* 构建任务键对象
*/
public
static
JobKey
getJobKey
(
Long
jobId
,
String
jobGroup
)
{
return
JobKey
.
jobKey
(
ScheduleConstants
.
TASK_CLASS_NAME
+
jobId
,
jobGroup
);
}
/**
* 创建定时任务
*/
public
static
void
createScheduleJob
(
Scheduler
scheduler
,
SysJob
job
)
throws
SchedulerException
,
TaskException
{
Class
<?
extends
Job
>
jobClass
=
getQuartzJobClass
(
job
);
// 构建job信息
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
(
jobId
,
jobGroup
))
.
withSchedule
(
cronScheduleBuilder
).
build
();
// 放入参数,运行时的方法可以获取
jobDetail
.
getJobDataMap
().
put
(
ScheduleConstants
.
TASK_PROPERTIES
,
job
);
// 判断是否存在
if
(
scheduler
.
checkExists
(
getJobKey
(
jobId
,
jobGroup
)))
{
// 防止创建时存在数据问题 先移除,然后在执行创建操作
scheduler
.
deleteJob
(
getJobKey
(
jobId
,
jobGroup
));
}
scheduler
.
scheduleJob
(
jobDetail
,
trigger
);
// 暂停任务
if
(
job
.
getStatus
().
equals
(
ScheduleConstants
.
Status
.
PAUSE
.
getValue
()))
{
scheduler
.
pauseJob
(
ScheduleUtils
.
getJobKey
(
jobId
,
jobGroup
));
}
}
/**
* 设置定时任务策略
*/
public
static
CronScheduleBuilder
handleCronScheduleMisfirePolicy
(
SysJob
job
,
CronScheduleBuilder
cb
)
throws
TaskException
{
switch
(
job
.
getMisfirePolicy
())
{
case
ScheduleConstants
.
MISFIRE_DEFAULT
:
return
cb
;
case
ScheduleConstants
.
MISFIRE_IGNORE_MISFIRES
:
return
cb
.
withMisfireHandlingInstructionIgnoreMisfires
();
case
ScheduleConstants
.
MISFIRE_FIRE_AND_PROCEED
:
return
cb
.
withMisfireHandlingInstructionFireAndProceed
();
case
ScheduleConstants
.
MISFIRE_DO_NOTHING
:
return
cb
.
withMisfireHandlingInstructionDoNothing
();
default
:
throw
new
TaskException
(
"The task misfire policy '"
+
job
.
getMisfirePolicy
()
+
"' cannot be used in cron schedule tasks"
,
Code
.
CONFIG_ERROR
);
}
}
}
\ No newline at end of file
ruoyi/src/main/java/com/ruoyi/framework/config/ScheduleConfig.java
0 → 100644
View file @
2cc14e5f
package
com.ruoyi.framework.config
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.scheduling.quartz.SchedulerFactoryBean
;
import
javax.sql.DataSource
;
import
java.util.Properties
;
/**
* 定时任务配置
*
* @author ruoyi
*/
@Configuration
public
class
ScheduleConfig
{
@Bean
public
SchedulerFactoryBean
schedulerFactoryBean
(
DataSource
dataSource
)
{
SchedulerFactoryBean
factory
=
new
SchedulerFactoryBean
();
factory
.
setDataSource
(
dataSource
);
// quartz参数
Properties
prop
=
new
Properties
();
prop
.
put
(
"org.quartz.scheduler.instanceName"
,
"RuoyiScheduler"
);
prop
.
put
(
"org.quartz.scheduler.instanceId"
,
"AUTO"
);
// 线程池配置
prop
.
put
(
"org.quartz.threadPool.class"
,
"org.quartz.simpl.SimpleThreadPool"
);
prop
.
put
(
"org.quartz.threadPool.threadCount"
,
"20"
);
prop
.
put
(
"org.quartz.threadPool.threadPriority"
,
"5"
);
// JobStore配置
prop
.
put
(
"org.quartz.jobStore.class"
,
"org.quartz.impl.jdbcjobstore.JobStoreTX"
);
// 集群配置
prop
.
put
(
"org.quartz.jobStore.isClustered"
,
"true"
);
prop
.
put
(
"org.quartz.jobStore.clusterCheckinInterval"
,
"15000"
);
prop
.
put
(
"org.quartz.jobStore.maxMisfiresToHandleAtATime"
,
"1"
);
prop
.
put
(
"org.quartz.jobStore.txIsolationLevelSerializable"
,
"true"
);
// sqlserver 启用
// prop.put("org.quartz.jobStore.selectWithLockSQL", "SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ?");
prop
.
put
(
"org.quartz.jobStore.misfireThreshold"
,
"12000"
);
prop
.
put
(
"org.quartz.jobStore.tablePrefix"
,
"QRTZ_"
);
factory
.
setQuartzProperties
(
prop
);
factory
.
setSchedulerName
(
"RuoyiScheduler"
);
// 延时启动
factory
.
setStartupDelay
(
1
);
factory
.
setApplicationContextSchedulerContextKey
(
"applicationContextKey"
);
// 可选,QuartzScheduler
// 启动时更新己存在的Job,这样就不用每次修改targetObject后删除qrtz_job_details表对应记录了
factory
.
setOverwriteExistingJobs
(
true
);
// 设置自动启动,默认为true
factory
.
setAutoStartup
(
true
);
return
factory
;
}
}
ruoyi/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
View file @
2cc14e5f
...
@@ -99,6 +99,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
...
@@ -99,6 +99,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
).
permitAll
()
).
permitAll
()
.
antMatchers
(
"/profile/**"
).
anonymous
()
.
antMatchers
(
"/profile/**"
).
anonymous
()
.
antMatchers
(
"/common/download**"
).
anonymous
()
.
antMatchers
(
"/common/download**"
).
anonymous
()
.
antMatchers
(
"/common/download/resource**"
).
anonymous
()
.
antMatchers
(
"/swagger-ui.html"
).
anonymous
()
.
antMatchers
(
"/swagger-ui.html"
).
anonymous
()
.
antMatchers
(
"/swagger-resources/**"
).
anonymous
()
.
antMatchers
(
"/swagger-resources/**"
).
anonymous
()
.
antMatchers
(
"/webjars/**"
).
anonymous
()
.
antMatchers
(
"/webjars/**"
).
anonymous
()
...
...
ruoyi/src/main/java/com/ruoyi/framework/interceptor/impl/SameUrlDataInterceptor.java
View file @
2cc14e5f
...
@@ -59,7 +59,7 @@ public class SameUrlDataInterceptor extends RepeatSubmitInterceptor
...
@@ -59,7 +59,7 @@ public class SameUrlDataInterceptor extends RepeatSubmitInterceptor
nowDataMap
.
put
(
REPEAT_PARAMS
,
nowParams
);
nowDataMap
.
put
(
REPEAT_PARAMS
,
nowParams
);
nowDataMap
.
put
(
REPEAT_TIME
,
System
.
currentTimeMillis
());
nowDataMap
.
put
(
REPEAT_TIME
,
System
.
currentTimeMillis
());
// 请求地址(作为存放
session
的key值)
// 请求地址(作为存放
cache
的key值)
String
url
=
request
.
getRequestURI
();
String
url
=
request
.
getRequestURI
();
Object
sessionObj
=
redisCache
.
getCacheObject
(
CACHE_REPEAT_KEY
);
Object
sessionObj
=
redisCache
.
getCacheObject
(
CACHE_REPEAT_KEY
);
...
...
ruoyi/src/main/java/com/ruoyi/framework/task/RyTask.java
0 → 100644
View file @
2cc14e5f
package
com.ruoyi.framework.task
;
import
org.springframework.stereotype.Component
;
import
com.ruoyi.common.utils.StringUtils
;
/**
* 定时任务调度测试
*
* @author ruoyi
*/
@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
);
}
public
void
ryNoParams
()
{
System
.
out
.
println
(
"执行无参方法"
);
}
}
ruoyi/src/main/java/com/ruoyi/framework/web/domain/Server.java
View file @
2cc14e5f
...
@@ -28,7 +28,6 @@ import oshi.util.Util;
...
@@ -28,7 +28,6 @@ import oshi.util.Util;
*/
*/
public
class
Server
public
class
Server
{
{
private
static
final
int
OSHI_WAIT_SECOND
=
1000
;
private
static
final
int
OSHI_WAIT_SECOND
=
1000
;
/**
/**
...
...
ruoyi/src/main/java/com/ruoyi/project/common/CommonController.java
View file @
2cc14e5f
...
@@ -9,6 +9,7 @@ import org.springframework.web.bind.annotation.GetMapping;
...
@@ -9,6 +9,7 @@ import org.springframework.web.bind.annotation.GetMapping;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.web.multipart.MultipartFile
;
import
org.springframework.web.multipart.MultipartFile
;
import
com.ruoyi.common.constant.Constants
;
import
com.ruoyi.common.utils.StringUtils
;
import
com.ruoyi.common.utils.StringUtils
;
import
com.ruoyi.common.utils.file.FileUploadUtils
;
import
com.ruoyi.common.utils.file.FileUploadUtils
;
import
com.ruoyi.common.utils.file.FileUtils
;
import
com.ruoyi.common.utils.file.FileUtils
;
...
@@ -86,4 +87,23 @@ public class CommonController
...
@@ -86,4 +87,23 @@ public class CommonController
return
AjaxResult
.
error
(
e
.
getMessage
());
return
AjaxResult
.
error
(
e
.
getMessage
());
}
}
}
}
/**
* 本地资源通用下载
*/
@GetMapping
(
"/common/download/resource"
)
public
void
resourceDownload
(
String
name
,
HttpServletRequest
request
,
HttpServletResponse
response
)
throws
Exception
{
// 本地资源路径
String
localPath
=
RuoYiConfig
.
getProfile
();
// 数据库资源地址
String
downloadPath
=
localPath
+
StringUtils
.
substringAfter
(
name
,
Constants
.
RESOURCE_PREFIX
);
// 下载名称
String
downloadName
=
StringUtils
.
substringAfterLast
(
downloadPath
,
"/"
);
response
.
setCharacterEncoding
(
"utf-8"
);
response
.
setContentType
(
"multipart/form-data"
);
response
.
setHeader
(
"Content-Disposition"
,
"attachment;fileName="
+
FileUtils
.
setFileDownloadHeader
(
request
,
downloadName
));
FileUtils
.
writeBytes
(
downloadPath
,
response
.
getOutputStream
());
}
}
}
ruoyi/src/main/java/com/ruoyi/project/monitor/controller/SysJobController.java
0 → 100644
View file @
2cc14e5f
package
com.ruoyi.project.monitor.controller
;
import
java.util.List
;
import
org.quartz.SchedulerException
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.security.access.prepost.PreAuthorize
;
import
org.springframework.web.bind.annotation.DeleteMapping
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.PathVariable
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.PutMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
com.ruoyi.common.exception.job.TaskException
;
import
com.ruoyi.common.utils.poi.ExcelUtil
;
import
com.ruoyi.framework.aspectj.lang.annotation.Log
;
import
com.ruoyi.framework.aspectj.lang.enums.BusinessType
;
import
com.ruoyi.framework.web.controller.BaseController
;
import
com.ruoyi.framework.web.domain.AjaxResult
;
import
com.ruoyi.framework.web.page.TableDataInfo
;
import
com.ruoyi.project.monitor.domain.SysJob
;
import
com.ruoyi.project.monitor.service.ISysJobService
;
/**
* 调度任务信息操作处理
*
* @author ruoyi
*/
@RestController
@RequestMapping
(
"/monitor/job"
)
public
class
SysJobController
extends
BaseController
{
@Autowired
private
ISysJobService
jobService
;
/**
* 查询定时任务列表
*/
@PreAuthorize
(
"@ss.hasPermi('monitor:job:list')"
)
@GetMapping
(
"/list"
)
public
TableDataInfo
list
(
SysJob
sysJob
)
{
startPage
();
List
<
SysJob
>
list
=
jobService
.
selectJobList
(
sysJob
);
return
getDataTable
(
list
);
}
/**
* 导出定时任务列表
*/
@PreAuthorize
(
"@ss.hasPermi('monitor:job:export')"
)
@Log
(
title
=
"定时任务"
,
businessType
=
BusinessType
.
EXPORT
)
@GetMapping
(
"/export"
)
public
AjaxResult
export
(
SysJob
sysJob
)
{
List
<
SysJob
>
list
=
jobService
.
selectJobList
(
sysJob
);
ExcelUtil
<
SysJob
>
util
=
new
ExcelUtil
<
SysJob
>(
SysJob
.
class
);
return
util
.
exportExcel
(
list
,
"定时任务"
);
}
/**
* 获取定时任务详细信息
*/
@PreAuthorize
(
"@ss.hasPermi('monitor:job:query')"
)
@GetMapping
(
value
=
"/{jobId}"
)
public
AjaxResult
getInfo
(
@PathVariable
(
"jobId"
)
Long
jobId
)
{
return
AjaxResult
.
success
(
jobService
.
selectJobById
(
jobId
));
}
/**
* 新增定时任务
*/
@PreAuthorize
(
"@ss.hasPermi('monitor:job:add')"
)
@Log
(
title
=
"定时任务"
,
businessType
=
BusinessType
.
INSERT
)
@PostMapping
public
AjaxResult
add
(
@RequestBody
SysJob
sysJob
)
throws
SchedulerException
,
TaskException
{
return
toAjax
(
jobService
.
insertJob
(
sysJob
));
}
/**
* 修改定时任务
*/
@PreAuthorize
(
"@ss.hasPermi('monitor:job:edit')"
)
@Log
(
title
=
"定时任务"
,
businessType
=
BusinessType
.
UPDATE
)
@PutMapping
public
AjaxResult
edit
(
@RequestBody
SysJob
sysJob
)
throws
SchedulerException
,
TaskException
{
return
toAjax
(
jobService
.
updateJob
(
sysJob
));
}
/**
* 定时任务状态修改
*/
@PreAuthorize
(
"@ss.hasPermi('monitor:job:changeStatus')"
)
@Log
(
title
=
"定时任务"
,
businessType
=
BusinessType
.
UPDATE
)
@PutMapping
(
"/changeStatus"
)
public
AjaxResult
changeStatus
(
@RequestBody
SysJob
job
)
throws
SchedulerException
{
SysJob
newJob
=
jobService
.
selectJobById
(
job
.
getJobId
());
newJob
.
setStatus
(
job
.
getStatus
());
return
toAjax
(
jobService
.
changeStatus
(
newJob
));
}
/**
* 定时任务立即执行一次
*/
@PreAuthorize
(
"@ss.hasPermi('monitor:job:changeStatus')"
)
@Log
(
title
=
"定时任务"
,
businessType
=
BusinessType
.
UPDATE
)
@PutMapping
(
"/run"
)
public
AjaxResult
run
(
@RequestBody
SysJob
job
)
throws
SchedulerException
{
jobService
.
run
(
job
);
return
AjaxResult
.
success
();
}
/**
* 删除定时任务
*/
@PreAuthorize
(
"@ss.hasPermi('monitor:job:remove')"
)
@Log
(
title
=
"定时任务"
,
businessType
=
BusinessType
.
DELETE
)
@DeleteMapping
(
"/{jobIds}"
)
public
AjaxResult
remove
(
@PathVariable
Long
[]
jobIds
)
throws
SchedulerException
,
TaskException
{
jobService
.
deleteJobByIds
(
jobIds
);
return
AjaxResult
.
success
();
}
}
ruoyi/src/main/java/com/ruoyi/project/monitor/controller/SysJobLogController.java
0 → 100644
View file @
2cc14e5f
package
com.ruoyi.project.monitor.controller
;
import
java.util.List
;
import
org.springframework.security.access.prepost.PreAuthorize
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.DeleteMapping
;
import
org.springframework.web.bind.annotation.PathVariable
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
com.ruoyi.framework.aspectj.lang.annotation.Log
;
import
com.ruoyi.framework.aspectj.lang.enums.BusinessType
;
import
com.ruoyi.project.monitor.domain.SysJobLog
;
import
com.ruoyi.project.monitor.service.ISysJobLogService
;
import
com.ruoyi.framework.web.controller.BaseController
;
import
com.ruoyi.framework.web.domain.AjaxResult
;
import
com.ruoyi.common.utils.poi.ExcelUtil
;
import
com.ruoyi.framework.web.page.TableDataInfo
;
/**
* 调度日志操作处理
*
* @author ruoyi
*/
@RestController
@RequestMapping
(
"/monitor/jobLog"
)
public
class
SysJobLogController
extends
BaseController
{
@Autowired
private
ISysJobLogService
jobLogService
;
/**
* 查询定时任务调度日志列表
*/
@PreAuthorize
(
"@ss.hasPermi('monitor:job:list')"
)
@GetMapping
(
"/list"
)
public
TableDataInfo
list
(
SysJobLog
sysJobLog
)
{
startPage
();
List
<
SysJobLog
>
list
=
jobLogService
.
selectJobLogList
(
sysJobLog
);
return
getDataTable
(
list
);
}
/**
* 导出定时任务调度日志列表
*/
@PreAuthorize
(
"@ss.hasPermi('monitor:job:export')"
)
@Log
(
title
=
"任务调度日志"
,
businessType
=
BusinessType
.
EXPORT
)
@GetMapping
(
"/export"
)
public
AjaxResult
export
(
SysJobLog
sysJobLog
)
{
List
<
SysJobLog
>
list
=
jobLogService
.
selectJobLogList
(
sysJobLog
);
ExcelUtil
<
SysJobLog
>
util
=
new
ExcelUtil
<
SysJobLog
>(
SysJobLog
.
class
);
return
util
.
exportExcel
(
list
,
"调度日志"
);
}
/**
* 根据调度编号获取详细信息
*/
@PreAuthorize
(
"@ss.hasPermi('monitor:job:query')"
)
@GetMapping
(
value
=
"/{configId}"
)
public
AjaxResult
getInfo
(
@PathVariable
Long
jobLogId
)
{
return
AjaxResult
.
success
(
jobLogService
.
selectJobLogById
(
jobLogId
));
}
/**
* 删除定时任务调度日志
*/
@PreAuthorize
(
"@ss.hasPermi('monitor:job:remove')"
)
@Log
(
title
=
"定时任务调度日志"
,
businessType
=
BusinessType
.
DELETE
)
@DeleteMapping
(
"/{jobLogIds}"
)
public
AjaxResult
remove
(
@PathVariable
Long
[]
jobLogIds
)
{
return
toAjax
(
jobLogService
.
deleteJobLogByIds
(
jobLogIds
));
}
@PreAuthorize
(
"@ss.hasPermi('monitor:job:remove')"
)
@Log
(
title
=
"调度日志"
,
businessType
=
BusinessType
.
CLEAN
)
@DeleteMapping
(
"/clean"
)
public
AjaxResult
clean
()
{
jobLogService
.
cleanJobLog
();
return
AjaxResult
.
success
();
}
}
ruoyi/src/main/java/com/ruoyi/project/monitor/domain/SysJob.java
0 → 100644
View file @
2cc14e5f
package
com.ruoyi.project.monitor.domain
;
import
java.io.Serializable
;
import
java.util.Date
;
import
javax.validation.constraints.NotBlank
;
import
javax.validation.constraints.Size
;
import
org.apache.commons.lang3.builder.ToStringBuilder
;
import
org.apache.commons.lang3.builder.ToStringStyle
;
import
com.ruoyi.common.constant.ScheduleConstants
;
import
com.ruoyi.common.utils.StringUtils
;
import
com.ruoyi.common.utils.job.CronUtils
;
import
com.ruoyi.framework.aspectj.lang.annotation.Excel
;
import
com.ruoyi.framework.aspectj.lang.annotation.Excel.ColumnType
;
import
com.ruoyi.framework.web.domain.BaseEntity
;
/**
* 定时任务调度表 sys_job
*
* @author ruoyi
*/
public
class
SysJob
extends
BaseEntity
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
/** 任务ID */
@Excel
(
name
=
"任务序号"
,
cellType
=
ColumnType
.
NUMERIC
)
private
Long
jobId
;
/** 任务名称 */
@Excel
(
name
=
"任务名称"
)
private
String
jobName
;
/** 任务组名 */
@Excel
(
name
=
"任务组名"
)
private
String
jobGroup
;
/** 调用目标字符串 */
@Excel
(
name
=
"调用目标字符串"
)
private
String
invokeTarget
;
/** cron执行表达式 */
@Excel
(
name
=
"执行表达式 "
)
private
String
cronExpression
;
/** cron计划策略 */
@Excel
(
name
=
"计划策略 "
,
readConverterExp
=
"0=默认,1=立即触发执行,2=触发一次执行,3=不触发立即执行"
)
private
String
misfirePolicy
=
ScheduleConstants
.
MISFIRE_DEFAULT
;
/** 是否并发执行(0允许 1禁止) */
@Excel
(
name
=
"并发执行"
,
readConverterExp
=
"0=允许,1=禁止"
)
private
String
concurrent
;
/** 任务状态(0正常 1暂停) */
@Excel
(
name
=
"任务状态"
,
readConverterExp
=
"0=正常,1=暂停"
)
private
String
status
;
public
Long
getJobId
()
{
return
jobId
;
}
public
void
setJobId
(
Long
jobId
)
{
this
.
jobId
=
jobId
;
}
@NotBlank
(
message
=
"任务名称不能为空"
)
@Size
(
min
=
0
,
max
=
64
,
message
=
"任务名称不能超过64个字符"
)
public
String
getJobName
()
{
return
jobName
;
}
public
void
setJobName
(
String
jobName
)
{
this
.
jobName
=
jobName
;
}
public
String
getJobGroup
()
{
return
jobGroup
;
}
public
void
setJobGroup
(
String
jobGroup
)
{
this
.
jobGroup
=
jobGroup
;
}
@NotBlank
(
message
=
"调用目标字符串不能为空"
)
@Size
(
min
=
0
,
max
=
1000
,
message
=
"调用目标字符串长度不能超过500个字符"
)
public
String
getInvokeTarget
()
{
return
invokeTarget
;
}
public
void
setInvokeTarget
(
String
invokeTarget
)
{
this
.
invokeTarget
=
invokeTarget
;
}
@NotBlank
(
message
=
"Cron执行表达式不能为空"
)
@Size
(
min
=
0
,
max
=
255
,
message
=
"Cron执行表达式不能超过255个字符"
)
public
String
getCronExpression
()
{
return
cronExpression
;
}
public
void
setCronExpression
(
String
cronExpression
)
{
this
.
cronExpression
=
cronExpression
;
}
public
Date
getNextValidTime
()
{
if
(
StringUtils
.
isNotEmpty
(
cronExpression
))
{
return
CronUtils
.
getNextExecution
(
cronExpression
);
}
return
null
;
}
public
String
getMisfirePolicy
()
{
return
misfirePolicy
;
}
public
void
setMisfirePolicy
(
String
misfirePolicy
)
{
this
.
misfirePolicy
=
misfirePolicy
;
}
public
String
getConcurrent
()
{
return
concurrent
;
}
public
void
setConcurrent
(
String
concurrent
)
{
this
.
concurrent
=
concurrent
;
}
public
String
getStatus
()
{
return
status
;
}
public
void
setStatus
(
String
status
)
{
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
(
"cronExpression"
,
getCronExpression
())
.
append
(
"nextValidTime"
,
getNextValidTime
())
.
append
(
"misfirePolicy"
,
getMisfirePolicy
())
.
append
(
"concurrent"
,
getConcurrent
())
.
append
(
"status"
,
getStatus
())
.
append
(
"createBy"
,
getCreateBy
())
.
append
(
"createTime"
,
getCreateTime
())
.
append
(
"updateBy"
,
getUpdateBy
())
.
append
(
"updateTime"
,
getUpdateTime
())
.
append
(
"remark"
,
getRemark
())
.
toString
();
}
}
\ No newline at end of file
ruoyi/src/main/java/com/ruoyi/project/monitor/domain/SysJobLog.java
0 → 100644
View file @
2cc14e5f
package
com.ruoyi.project.monitor.domain
;
import
java.util.Date
;
import
org.apache.commons.lang3.builder.ToStringBuilder
;
import
org.apache.commons.lang3.builder.ToStringStyle
;
import
com.ruoyi.framework.aspectj.lang.annotation.Excel
;
import
com.ruoyi.framework.web.domain.BaseEntity
;
/**
* 定时任务调度日志表 sys_job_log
*
* @author ruoyi
*/
public
class
SysJobLog
extends
BaseEntity
{
private
static
final
long
serialVersionUID
=
1L
;
/** ID */
@Excel
(
name
=
"日志序号"
)
private
Long
jobLogId
;
/** 任务名称 */
@Excel
(
name
=
"任务名称"
)
private
String
jobName
;
/** 任务组名 */
@Excel
(
name
=
"任务组名"
)
private
String
jobGroup
;
/** 调用目标字符串 */
@Excel
(
name
=
"调用目标字符串"
)
private
String
invokeTarget
;
/** 日志信息 */
@Excel
(
name
=
"日志信息"
)
private
String
jobMessage
;
/** 执行状态(0正常 1失败) */
@Excel
(
name
=
"执行状态"
,
readConverterExp
=
"0=正常,1=失败"
)
private
String
status
;
/** 异常信息 */
@Excel
(
name
=
"异常信息"
)
private
String
exceptionInfo
;
/** 开始时间 */
private
Date
startTime
;
/** 停止时间 */
private
Date
stopTime
;
public
Long
getJobLogId
()
{
return
jobLogId
;
}
public
void
setJobLogId
(
Long
jobLogId
)
{
this
.
jobLogId
=
jobLogId
;
}
public
String
getJobName
()
{
return
jobName
;
}
public
void
setJobName
(
String
jobName
)
{
this
.
jobName
=
jobName
;
}
public
String
getJobGroup
()
{
return
jobGroup
;
}
public
void
setJobGroup
(
String
jobGroup
)
{
this
.
jobGroup
=
jobGroup
;
}
public
String
getInvokeTarget
()
{
return
invokeTarget
;
}
public
void
setInvokeTarget
(
String
invokeTarget
)
{
this
.
invokeTarget
=
invokeTarget
;
}
public
String
getJobMessage
()
{
return
jobMessage
;
}
public
void
setJobMessage
(
String
jobMessage
)
{
this
.
jobMessage
=
jobMessage
;
}
public
String
getStatus
()
{
return
status
;
}
public
void
setStatus
(
String
status
)
{
this
.
status
=
status
;
}
public
String
getExceptionInfo
()
{
return
exceptionInfo
;
}
public
void
setExceptionInfo
(
String
exceptionInfo
)
{
this
.
exceptionInfo
=
exceptionInfo
;
}
public
Date
getStartTime
()
{
return
startTime
;
}
public
void
setStartTime
(
Date
startTime
)
{
this
.
startTime
=
startTime
;
}
public
Date
getStopTime
()
{
return
stopTime
;
}
public
void
setStopTime
(
Date
stopTime
)
{
this
.
stopTime
=
stopTime
;
}
@Override
public
String
toString
()
{
return
new
ToStringBuilder
(
this
,
ToStringStyle
.
MULTI_LINE_STYLE
)
.
append
(
"jobLogId"
,
getJobLogId
())
.
append
(
"jobName"
,
getJobName
())
.
append
(
"jobGroup"
,
getJobGroup
())
.
append
(
"jobMessage"
,
getJobMessage
())
.
append
(
"status"
,
getStatus
())
.
append
(
"exceptionInfo"
,
getExceptionInfo
())
.
append
(
"startTime"
,
getStartTime
())
.
append
(
"stopTime"
,
getStopTime
())
.
toString
();
}
}
ruoyi/src/main/java/com/ruoyi/project/monitor/mapper/SysJobLogMapper.java
0 → 100644
View file @
2cc14e5f
package
com.ruoyi.project.monitor.mapper
;
import
java.util.List
;
import
com.ruoyi.project.monitor.domain.SysJobLog
;
/**
* 调度任务日志信息 数据层
*
* @author ruoyi
*/
public
interface
SysJobLogMapper
{
/**
* 获取quartz调度器日志的计划任务
*
* @param jobLog 调度日志信息
* @return 调度任务日志集合
*/
public
List
<
SysJobLog
>
selectJobLogList
(
SysJobLog
jobLog
);
/**
* 查询所有调度任务日志
*
* @return 调度任务日志列表
*/
public
List
<
SysJobLog
>
selectJobLogAll
();
/**
* 通过调度任务日志ID查询调度信息
*
* @param jobLogId 调度任务日志ID
* @return 调度任务日志对象信息
*/
public
SysJobLog
selectJobLogById
(
Long
jobLogId
);
/**
* 新增任务日志
*
* @param jobLog 调度日志信息
* @return 结果
*/
public
int
insertJobLog
(
SysJobLog
jobLog
);
/**
* 批量删除调度日志信息
*
* @param logIds 需要删除的数据ID
* @return 结果
*/
public
int
deleteJobLogByIds
(
Long
[]
logIds
);
/**
* 删除任务日志
*
* @param jobId 调度日志ID
* @return 结果
*/
public
int
deleteJobLogById
(
Long
jobId
);
/**
* 清空任务日志
*/
public
void
cleanJobLog
();
}
ruoyi/src/main/java/com/ruoyi/project/monitor/mapper/SysJobMapper.java
0 → 100644
View file @
2cc14e5f
package
com.ruoyi.project.monitor.mapper
;
import
java.util.List
;
import
com.ruoyi.project.monitor.domain.SysJob
;
/**
* 调度任务信息 数据层
*
* @author ruoyi
*/
public
interface
SysJobMapper
{
/**
* 查询调度任务日志集合
*
* @param job 调度信息
* @return 操作日志集合
*/
public
List
<
SysJob
>
selectJobList
(
SysJob
job
);
/**
* 查询所有调度任务
*
* @return 调度任务列表
*/
public
List
<
SysJob
>
selectJobAll
();
/**
* 通过调度ID查询调度任务信息
*
* @param jobId 调度ID
* @return 角色对象信息
*/
public
SysJob
selectJobById
(
Long
jobId
);
/**
* 通过调度ID删除调度任务信息
*
* @param jobId 调度ID
* @return 结果
*/
public
int
deleteJobById
(
Long
jobId
);
/**
* 批量删除调度任务信息
*
* @param ids 需要删除的数据ID
* @return 结果
*/
public
int
deleteJobByIds
(
Long
[]
ids
);
/**
* 修改调度任务信息
*
* @param job 调度任务信息
* @return 结果
*/
public
int
updateJob
(
SysJob
job
);
/**
* 新增调度任务信息
*
* @param job 调度任务信息
* @return 结果
*/
public
int
insertJob
(
SysJob
job
);
}
ruoyi/src/main/java/com/ruoyi/project/monitor/service/ISysJobLogService.java
0 → 100644
View file @
2cc14e5f
package
com.ruoyi.project.monitor.service
;
import
java.util.List
;
import
com.ruoyi.project.monitor.domain.SysJobLog
;
/**
* 定时任务调度日志信息信息 服务层
*
* @author ruoyi
*/
public
interface
ISysJobLogService
{
/**
* 获取quartz调度器日志的计划任务
*
* @param jobLog 调度日志信息
* @return 调度任务日志集合
*/
public
List
<
SysJobLog
>
selectJobLogList
(
SysJobLog
jobLog
);
/**
* 通过调度任务日志ID查询调度信息
*
* @param jobLogId 调度任务日志ID
* @return 调度任务日志对象信息
*/
public
SysJobLog
selectJobLogById
(
Long
jobLogId
);
/**
* 新增任务日志
*
* @param jobLog 调度日志信息
*/
public
void
addJobLog
(
SysJobLog
jobLog
);
/**
* 批量删除调度日志信息
*
* @param logIds 需要删除的日志ID
* @return 结果
*/
public
int
deleteJobLogByIds
(
Long
[]
logIds
);
/**
* 删除任务日志
*
* @param jobId 调度日志ID
* @return 结果
*/
public
int
deleteJobLogById
(
Long
jobId
);
/**
* 清空任务日志
*/
public
void
cleanJobLog
();
}
ruoyi/src/main/java/com/ruoyi/project/monitor/service/ISysJobService.java
0 → 100644
View file @
2cc14e5f
package
com.ruoyi.project.monitor.service
;
import
java.util.List
;
import
org.quartz.SchedulerException
;
import
com.ruoyi.common.exception.job.TaskException
;
import
com.ruoyi.project.monitor.domain.SysJob
;
/**
* 定时任务调度信息信息 服务层
*
* @author ruoyi
*/
public
interface
ISysJobService
{
/**
* 获取quartz调度器的计划任务
*
* @param job 调度信息
* @return 调度任务集合
*/
public
List
<
SysJob
>
selectJobList
(
SysJob
job
);
/**
* 通过调度任务ID查询调度信息
*
* @param jobId 调度任务ID
* @return 调度任务对象信息
*/
public
SysJob
selectJobById
(
Long
jobId
);
/**
* 暂停任务
*
* @param job 调度信息
* @return 结果
*/
public
int
pauseJob
(
SysJob
job
)
throws
SchedulerException
;
/**
* 恢复任务
*
* @param job 调度信息
* @return 结果
*/
public
int
resumeJob
(
SysJob
job
)
throws
SchedulerException
;
/**
* 删除任务后,所对应的trigger也将被删除
*
* @param job 调度信息
* @return 结果
*/
public
int
deleteJob
(
SysJob
job
)
throws
SchedulerException
;
/**
* 批量删除调度信息
*
* @param jobIds 需要删除的任务ID
* @return 结果
*/
public
void
deleteJobByIds
(
Long
[]
jobIds
)
throws
SchedulerException
;
/**
* 任务调度状态修改
*
* @param job 调度信息
* @return 结果
*/
public
int
changeStatus
(
SysJob
job
)
throws
SchedulerException
;
/**
* 立即运行任务
*
* @param job 调度信息
* @return 结果
*/
public
void
run
(
SysJob
job
)
throws
SchedulerException
;
/**
* 新增任务
*
* @param job 调度信息
* @return 结果
*/
public
int
insertJob
(
SysJob
job
)
throws
SchedulerException
,
TaskException
;
/**
* 更新任务
*
* @param job 调度信息
* @return 结果
*/
public
int
updateJob
(
SysJob
job
)
throws
SchedulerException
,
TaskException
;
/**
* 校验cron表达式是否有效
*
* @param cronExpression 表达式
* @return 结果
*/
public
boolean
checkCronExpressionIsValid
(
String
cronExpression
);
}
\ No newline at end of file
ruoyi/src/main/java/com/ruoyi/project/monitor/service/impl/SysJobLogServiceImpl.java
0 → 100644
View file @
2cc14e5f
package
com.ruoyi.project.monitor.service.impl
;
import
java.util.List
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
com.ruoyi.project.monitor.domain.SysJobLog
;
import
com.ruoyi.project.monitor.mapper.SysJobLogMapper
;
import
com.ruoyi.project.monitor.service.ISysJobLogService
;
/**
* 定时任务调度日志信息 服务层
*
* @author ruoyi
*/
@Service
public
class
SysJobLogServiceImpl
implements
ISysJobLogService
{
@Autowired
private
SysJobLogMapper
jobLogMapper
;
/**
* 获取quartz调度器日志的计划任务
*
* @param jobLog 调度日志信息
* @return 调度任务日志集合
*/
@Override
public
List
<
SysJobLog
>
selectJobLogList
(
SysJobLog
jobLog
)
{
return
jobLogMapper
.
selectJobLogList
(
jobLog
);
}
/**
* 通过调度任务日志ID查询调度信息
*
* @param jobLogId 调度任务日志ID
* @return 调度任务日志对象信息
*/
@Override
public
SysJobLog
selectJobLogById
(
Long
jobLogId
)
{
return
jobLogMapper
.
selectJobLogById
(
jobLogId
);
}
/**
* 新增任务日志
*
* @param jobLog 调度日志信息
*/
@Override
public
void
addJobLog
(
SysJobLog
jobLog
)
{
jobLogMapper
.
insertJobLog
(
jobLog
);
}
/**
* 批量删除调度日志信息
*
* @param logIds 需要删除的数据ID
* @return 结果
*/
@Override
public
int
deleteJobLogByIds
(
Long
[]
logIds
)
{
return
jobLogMapper
.
deleteJobLogByIds
(
logIds
);
}
/**
* 删除任务日志
*
* @param jobId 调度日志ID
*/
@Override
public
int
deleteJobLogById
(
Long
jobId
)
{
return
jobLogMapper
.
deleteJobLogById
(
jobId
);
}
/**
* 清空任务日志
*/
@Override
public
void
cleanJobLog
()
{
jobLogMapper
.
cleanJobLog
();
}
}
ruoyi/src/main/java/com/ruoyi/project/monitor/service/impl/SysJobServiceImpl.java
0 → 100644
View file @
2cc14e5f
package
com.ruoyi.project.monitor.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
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
com.ruoyi.common.constant.ScheduleConstants
;
import
com.ruoyi.common.exception.job.TaskException
;
import
com.ruoyi.common.utils.job.CronUtils
;
import
com.ruoyi.common.utils.job.ScheduleUtils
;
import
com.ruoyi.project.monitor.domain.SysJob
;
import
com.ruoyi.project.monitor.mapper.SysJobMapper
;
import
com.ruoyi.project.monitor.service.ISysJobService
;
/**
* 定时任务调度信息 服务层
*
* @author ruoyi
*/
@Service
public
class
SysJobServiceImpl
implements
ISysJobService
{
@Autowired
private
Scheduler
scheduler
;
@Autowired
private
SysJobMapper
jobMapper
;
/**
* 项目启动时,初始化定时器 主要是防止手动修改数据库导致未同步到定时任务处理(注:不能手动修改数据库ID和任务组名,否则会导致脏数据)
*/
@PostConstruct
public
void
init
()
throws
SchedulerException
,
TaskException
{
scheduler
.
clear
();
List
<
SysJob
>
jobList
=
jobMapper
.
selectJobAll
();
for
(
SysJob
job
:
jobList
)
{
ScheduleUtils
.
createScheduleJob
(
scheduler
,
job
);
}
}
/**
* 获取quartz调度器的计划任务列表
*
* @param job 调度信息
* @return
*/
@Override
public
List
<
SysJob
>
selectJobList
(
SysJob
job
)
{
return
jobMapper
.
selectJobList
(
job
);
}
/**
* 通过调度任务ID查询调度信息
*
* @param jobId 调度任务ID
* @return 调度任务对象信息
*/
@Override
public
SysJob
selectJobById
(
Long
jobId
)
{
return
jobMapper
.
selectJobById
(
jobId
);
}
/**
* 暂停任务
*
* @param job 调度信息
*/
@Override
@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
)
{
scheduler
.
pauseJob
(
ScheduleUtils
.
getJobKey
(
jobId
,
jobGroup
));
}
return
rows
;
}
/**
* 恢复任务
*
* @param job 调度信息
*/
@Override
@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
)
{
scheduler
.
resumeJob
(
ScheduleUtils
.
getJobKey
(
jobId
,
jobGroup
));
}
return
rows
;
}
/**
* 删除任务后,所对应的trigger也将被删除
*
* @param job 调度信息
*/
@Override
@Transactional
public
int
deleteJob
(
SysJob
job
)
throws
SchedulerException
{
Long
jobId
=
job
.
getJobId
();
String
jobGroup
=
job
.
getJobGroup
();
int
rows
=
jobMapper
.
deleteJobById
(
jobId
);
if
(
rows
>
0
)
{
scheduler
.
deleteJob
(
ScheduleUtils
.
getJobKey
(
jobId
,
jobGroup
));
}
return
rows
;
}
/**
* 批量删除调度信息
*
* @param jobIds 需要删除的任务ID
* @return 结果
*/
@Override
@Transactional
public
void
deleteJobByIds
(
Long
[]
jobIds
)
throws
SchedulerException
{
for
(
Long
jobId
:
jobIds
)
{
SysJob
job
=
jobMapper
.
selectJobById
(
jobId
);
deleteJob
(
job
);
}
}
/**
* 任务调度状态修改
*
* @param job 调度信息
*/
@Override
@Transactional
public
int
changeStatus
(
SysJob
job
)
throws
SchedulerException
{
int
rows
=
0
;
String
status
=
job
.
getStatus
();
if
(
ScheduleConstants
.
Status
.
NORMAL
.
getValue
().
equals
(
status
))
{
rows
=
resumeJob
(
job
);
}
else
if
(
ScheduleConstants
.
Status
.
PAUSE
.
getValue
().
equals
(
status
))
{
rows
=
pauseJob
(
job
);
}
return
rows
;
}
/**
* 立即运行任务
*
* @param job 调度信息
*/
@Override
@Transactional
public
void
run
(
SysJob
job
)
throws
SchedulerException
{
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
);
}
/**
* 新增任务
*
* @param job 调度信息 调度信息
*/
@Override
@Transactional
public
int
insertJob
(
SysJob
job
)
throws
SchedulerException
,
TaskException
{
job
.
setStatus
(
ScheduleConstants
.
Status
.
PAUSE
.
getValue
());
int
rows
=
jobMapper
.
insertJob
(
job
);
if
(
rows
>
0
)
{
ScheduleUtils
.
createScheduleJob
(
scheduler
,
job
);
}
return
rows
;
}
/**
* 更新任务的时间表达式
*
* @param job 调度信息
*/
@Override
@Transactional
public
int
updateJob
(
SysJob
job
)
throws
SchedulerException
,
TaskException
{
SysJob
properties
=
selectJobById
(
job
.
getJobId
());
int
rows
=
jobMapper
.
updateJob
(
job
);
if
(
rows
>
0
)
{
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 表达式
* @return 结果
*/
@Override
public
boolean
checkCronExpressionIsValid
(
String
cronExpression
)
{
return
CronUtils
.
isValid
(
cronExpression
);
}
}
\ No newline at end of file
ruoyi/src/main/resources/application.yml
View file @
2cc14e5f
...
@@ -3,7 +3,7 @@ ruoyi:
...
@@ -3,7 +3,7 @@ ruoyi:
# 名称
# 名称
name
:
RuoYi
name
:
RuoYi
# 版本
# 版本
version
:
2.
1
.0
version
:
2.
2
.0
# 版权年份
# 版权年份
copyrightYear
:
2019
copyrightYear
:
2019
# 实例演示开关
# 实例演示开关
...
@@ -28,7 +28,6 @@ server:
...
@@ -28,7 +28,6 @@ server:
# Tomcat启动初始化的线程数,默认值25
# Tomcat启动初始化的线程数,默认值25
min-spare-threads
:
30
min-spare-threads
:
30
# 日志配置
# 日志配置
logging
:
logging
:
level
:
level
:
...
...
Prev
1
2
3
Next
Write
Preview
Supports
Markdown
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