Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
B
byit-myth-job
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
liyuan
byit-myth-job
Commits
8b44c534
Commit
8b44c534
authored
Apr 23, 2020
by
huangfusuper
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修正任务不遵循cron表达式 重复调用问题
parent
3a01736d
Show whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
205 additions
and
3 deletions
+205
-3
AdminApplication.java
byit-myth-admin/src/main/java/com/byit/AdminApplication.java
+22
-0
ApiNodeController.java
...h-admin/src/main/java/com/byit/api/ApiNodeController.java
+7
-0
ApiNodeService.java
...-admin/src/main/java/com/byit/service/ApiNodeService.java
+9
-0
ApiNodeServiceImpl.java
...c/main/java/com/byit/service/impl/ApiNodeServiceImpl.java
+18
-0
FlowViewController.java
...admin/src/main/java/com/byit/view/FlowViewController.java
+27
-0
WorkRoulette.java
...h-admin-core/src/main/java/com/byit/job/WorkRoulette.java
+1
-1
FlowVersionMapper.java
...core/src/main/java/com/byit/mapper/FlowVersionMapper.java
+10
-0
FlowVersionService.java
...re/src/main/java/com/byit/service/FlowVersionService.java
+17
-0
FlowVersionServiceImpl.java
...in/java/com/byit/service/impl/FlowVersionServiceImpl.java
+39
-0
ScriptExecutorJobTask.java
...re/src/main/java/com/byit/task/ScriptExecutorJobTask.java
+2
-0
TaskThreadRunHelper.java
...main/java/com/byit/thread/helper/TaskThreadRunHelper.java
+1
-1
FlowVersionVo.java
...h-admin-core/src/main/java/com/byit/vo/FlowVersionVo.java
+28
-0
FlowVersionMapper.xml
...dmin-core/src/main/resources/mapper/FlowVersionMapper.xml
+5
-0
JobTaskRunLogMapper.xml
...in-core/src/main/resources/mapper/JobTaskRunLogMapper.xml
+1
-1
JobUtils.java
...xecutor-plugin/src/main/java/com/byit/utils/JobUtils.java
+16
-0
AddComplexPy1.java
...demo-client/src/main/java/com/byit/job/AddComplexPy1.java
+2
-0
No files found.
byit-myth-admin/src/main/java/com/byit/AdminApplication.java
View file @
8b44c534
...
@@ -2,8 +2,13 @@ package com.byit;
...
@@ -2,8 +2,13 @@ package com.byit;
import
com.byit.annotations.EnablePluginClient
;
import
com.byit.annotations.EnablePluginClient
;
import
com.byit.rpc.remoting.provider.annotation.RpcService
;
import
com.byit.rpc.remoting.provider.annotation.RpcService
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.web.cors.CorsConfiguration
;
import
org.springframework.web.cors.UrlBasedCorsConfigurationSource
;
import
org.springframework.web.filter.CorsFilter
;
/**
/**
* @program: byit-myth-job->AdminApplication
* @program: byit-myth-job->AdminApplication
...
@@ -18,4 +23,21 @@ public class AdminApplication {
...
@@ -18,4 +23,21 @@ public class AdminApplication {
public
static
void
main
(
String
[]
args
)
{
public
static
void
main
(
String
[]
args
)
{
SpringApplication
.
run
(
AdminApplication
.
class
,
args
);
SpringApplication
.
run
(
AdminApplication
.
class
,
args
);
}
}
private
CorsConfiguration
corsConfiguration
(){
CorsConfiguration
corsConfiguration
=
new
CorsConfiguration
();
corsConfiguration
.
addAllowedOrigin
(
"*"
);
corsConfiguration
.
addAllowedHeader
(
"*"
);
corsConfiguration
.
addAllowedMethod
(
"*"
);
corsConfiguration
.
setAllowCredentials
(
true
);
corsConfiguration
.
setMaxAge
(
3600L
);
return
corsConfiguration
;
}
@Bean
public
CorsFilter
corsFilter
(){
UrlBasedCorsConfigurationSource
source
=
new
UrlBasedCorsConfigurationSource
();
source
.
registerCorsConfiguration
(
"/**"
,
corsConfiguration
());
return
new
CorsFilter
(
source
);
}
}
}
byit-myth-admin/src/main/java/com/byit/api/ApiNodeController.java
View file @
8b44c534
...
@@ -30,6 +30,7 @@ public class ApiNodeController {
...
@@ -30,6 +30,7 @@ public class ApiNodeController {
return
monitorKey
;
return
monitorKey
;
}
}
@PostMapping
(
"runHistory"
)
@PostMapping
(
"runHistory"
)
public
ResponseResult
runHistory
(
String
nodeId
){
public
ResponseResult
runHistory
(
String
nodeId
){
List
<
JobTaskRunLog
>
jobTaskRunLogList
=
apiNodeService
.
runHistory
(
nodeId
);
List
<
JobTaskRunLog
>
jobTaskRunLogList
=
apiNodeService
.
runHistory
(
nodeId
);
...
@@ -84,6 +85,12 @@ public class ApiNodeController {
...
@@ -84,6 +85,12 @@ public class ApiNodeController {
return
ResponseResult
.
ok
(
"SUCCESS"
);
return
ResponseResult
.
ok
(
"SUCCESS"
);
}
}
@PostMapping
(
"runTask"
)
public
ResponseResult
runTask
(
String
jobName
){
apiNodeService
.
runTask
(
jobName
);
return
ResponseResult
.
ok
(
"SUCCESS"
);
}
@PostMapping
(
"loadCurrentStatusByJobName"
)
@PostMapping
(
"loadCurrentStatusByJobName"
)
public
ResponseResult
loadCurrentStatusByJobName
(
String
jobNames
){
public
ResponseResult
loadCurrentStatusByJobName
(
String
jobNames
){
Map
<
String
,
JobTaskRunLog
>
jobTaskRunLogMap
=
apiNodeService
.
loadCurrentStatusByJobName
(
jobNames
);
Map
<
String
,
JobTaskRunLog
>
jobTaskRunLogMap
=
apiNodeService
.
loadCurrentStatusByJobName
(
jobNames
);
...
...
byit-myth-admin/src/main/java/com/byit/service/ApiNodeService.java
View file @
8b44c534
...
@@ -17,6 +17,8 @@ public interface ApiNodeService {
...
@@ -17,6 +17,8 @@ public interface ApiNodeService {
*/
*/
String
runNode
(
String
param
);
String
runNode
(
String
param
);
/**
/**
* 根据nodeid查询运行历史
* 根据nodeid查询运行历史
* @param nodeId
* @param nodeId
...
@@ -43,6 +45,13 @@ public interface ApiNodeService {
...
@@ -43,6 +45,13 @@ public interface ApiNodeService {
void
addJavaTask
(
String
param
)
throws
Exception
;
void
addJavaTask
(
String
param
)
throws
Exception
;
/**
/**
* 立即运行任务不需要验证是否存在
* @param param
* @throws Exception
*/
void
runTask
(
String
param
)
;
/**
* 功能描述 更新任务配置信息
* 功能描述 更新任务配置信息
* @author gml
* @author gml
* @date 2020-04-14 11:28
* @date 2020-04-14 11:28
...
...
byit-myth-admin/src/main/java/com/byit/service/impl/ApiNodeServiceImpl.java
View file @
8b44c534
...
@@ -21,6 +21,7 @@ import com.byit.task.JavaTaskJobTask;
...
@@ -21,6 +21,7 @@ import com.byit.task.JavaTaskJobTask;
import
com.byit.task.ScriptExecutorJobTask
;
import
com.byit.task.ScriptExecutorJobTask
;
import
com.byit.utils.ValidationUtil
;
import
com.byit.utils.ValidationUtil
;
import
io.netty.util.TimerTask
;
import
io.netty.util.TimerTask
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.data.redis.core.StringRedisTemplate
;
import
org.springframework.data.redis.core.StringRedisTemplate
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
...
@@ -143,6 +144,23 @@ public class ApiNodeServiceImpl implements ApiNodeService {
...
@@ -143,6 +144,23 @@ public class ApiNodeServiceImpl implements ApiNodeService {
}
}
@Override
@Override
public
void
runTask
(
String
param
)
{
ValidationUtil
.
dataNotBank
(
param
,
"请求参数不允许为空!"
);
JavaTask
javaTask
=
JSON
.
parseObject
(
param
,
JavaTask
.
class
);
ValidationUtil
.
dataNotBank
(
javaTask
.
getTaskName
(),
"任务实现类的名称不允许为空!"
);
if
(
StringUtils
.
isBlank
(
javaTask
.
getJobName
())){
javaTask
.
setJobName
(
javaTask
.
getTaskName
());
}
javaTask
.
setTriggerTime
(
0L
);
if
(
null
!=
javaTask
.
getAlarmlAction
()
&&
"0"
.
equals
(
javaTask
.
getRepeatCount
())){
ValidationUtil
.
dataNotBank
(
javaTask
.
getAlarmEmail
(),
"设置为告警时告警邮箱不允许为空"
);
}
TimerTask
timerTask
=
new
JavaTaskJobTask
(
javaTask
);
WorkRoulette
.
addJob
(
timerTask
,
System
.
currentTimeMillis
());
}
@Override
public
void
updateJavaTask
(
String
param
)
throws
Exception
{
public
void
updateJavaTask
(
String
param
)
throws
Exception
{
JavaTask
javaTask
=
validate
(
param
);
JavaTask
javaTask
=
validate
(
param
);
ValidationUtil
.
dataNotBank
(
javaTask
.
getJobName
(),
"jobName不允许为空"
);
ValidationUtil
.
dataNotBank
(
javaTask
.
getJobName
(),
"jobName不允许为空"
);
...
...
byit-myth-admin/src/main/java/com/byit/view/FlowViewController.java
0 → 100644
View file @
8b44c534
package
com
.
byit
.
view
;
import
com.byit.service.FlowVersionService
;
import
com.byit.vo.FlowVersionVo
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.util.List
;
/**
* 工作流视图界面
* @author huangfu
*/
@RestController
@RequestMapping
(
"view/flow"
)
public
class
FlowViewController
{
private
final
FlowVersionService
flowVersionService
;
public
FlowViewController
(
FlowVersionService
flowVersionService
)
{
this
.
flowVersionService
=
flowVersionService
;
}
@PostMapping
(
"getAllFlowVersion"
)
public
List
<
FlowVersionVo
>
getAllFlowVersion
(){
return
flowVersionService
.
findAllFlow
();
}
}
byit-myth-core/myth-admin-core/src/main/java/com/byit/job/WorkRoulette.java
View file @
8b44c534
...
@@ -27,7 +27,7 @@ public class WorkRoulette {
...
@@ -27,7 +27,7 @@ public class WorkRoulette {
public
static
void
addJob
(
TimerTask
timerTask
,
long
triggerNextTime
)
{
public
static
void
addJob
(
TimerTask
timerTask
,
long
triggerNextTime
)
{
log
.
info
(
"-----添加任务{}-------"
,((
JavaTaskJobTask
)
timerTask
).
getJavaTask
().
getTaskName
());
//
log.info("-----添加任务{}-------",((JavaTaskJobTask)timerTask).getJavaTask().getTaskName());
HASHED_WHEEL_TIMER
.
newTimeout
(
timerTask
,
TimeUnit
.
MILLISECONDS
.
toNanos
(
triggerNextTime
-
System
.
currentTimeMillis
()),
TimeUnit
.
NANOSECONDS
);
HASHED_WHEEL_TIMER
.
newTimeout
(
timerTask
,
TimeUnit
.
MILLISECONDS
.
toNanos
(
triggerNextTime
-
System
.
currentTimeMillis
()),
TimeUnit
.
NANOSECONDS
);
}
}
...
...
byit-myth-core/myth-admin-core/src/main/java/com/byit/mapper/FlowVersionMapper.java
View file @
8b44c534
package
com
.
byit
.
mapper
;
package
com
.
byit
.
mapper
;
import
com.byit.model.FlowVersion
;
import
com.byit.model.FlowVersion
;
import
org.springframework.stereotype.Repository
;
import
java.util.List
;
@Repository
public
interface
FlowVersionMapper
{
public
interface
FlowVersionMapper
{
/**
* 查询全部的工作流
* @return
*/
List
<
FlowVersion
>
findAllFlow
();
int
deleteById
(
Integer
flowVersionId
);
int
deleteById
(
Integer
flowVersionId
);
int
insertSelective
(
FlowVersion
record
);
int
insertSelective
(
FlowVersion
record
);
...
...
byit-myth-core/myth-admin-core/src/main/java/com/byit/service/FlowVersionService.java
0 → 100644
View file @
8b44c534
package
com
.
byit
.
service
;
import
com.byit.model.FlowVersion
;
import
com.byit.vo.FlowVersionVo
;
import
java.util.List
;
/**
* @author huangfu
*/
public
interface
FlowVersionService
{
/**
* 查询全部的工作流
* @return
*/
List
<
FlowVersionVo
>
findAllFlow
();
}
byit-myth-core/myth-admin-core/src/main/java/com/byit/service/impl/FlowVersionServiceImpl.java
0 → 100644
View file @
8b44c534
package
com
.
byit
.
service
.
impl
;
import
com.byit.mapper.FlowVersionMapper
;
import
com.byit.model.FlowVersion
;
import
com.byit.service.FlowVersionService
;
import
com.byit.vo.FlowVersionVo
;
import
org.springframework.stereotype.Service
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
/**
* 工作流版本业务的实现
* @author huangfu
*/
@Service
public
class
FlowVersionServiceImpl
implements
FlowVersionService
{
private
final
FlowVersionMapper
flowVersionMapper
;
public
FlowVersionServiceImpl
(
FlowVersionMapper
flowVersionMapper
)
{
this
.
flowVersionMapper
=
flowVersionMapper
;
}
@Override
public
List
<
FlowVersionVo
>
findAllFlow
()
{
List
<
FlowVersion
>
allFlow
=
flowVersionMapper
.
findAllFlow
();
Map
<
String
,
List
<
FlowVersion
>>
versionColl
=
allFlow
.
stream
().
collect
(
Collectors
.
groupingBy
(
FlowVersion:
:
getFlowName
));
List
<
FlowVersionVo
>
flowVersionVos
=
new
ArrayList
<>();
versionColl
.
forEach
((
key
,
value
)
->{
FlowVersionVo
flowVersionVo
=
new
FlowVersionVo
();
flowVersionVo
.
setFlowName
(
key
);
flowVersionVo
.
setChildren
(
value
);
flowVersionVos
.
add
(
flowVersionVo
);
});
return
flowVersionVos
;
}
}
byit-myth-core/myth-admin-core/src/main/java/com/byit/task/ScriptExecutorJobTask.java
View file @
8b44c534
...
@@ -152,6 +152,8 @@ public class ScriptExecutorJobTask implements TimerTask {
...
@@ -152,6 +152,8 @@ public class ScriptExecutorJobTask implements TimerTask {
//上一次的执行日志
//上一次的执行日志
String
runMsg
=
jobTaskRunLogById
.
getRunMsg
();
String
runMsg
=
jobTaskRunLogById
.
getRunMsg
();
jobTaskRunLog
.
setRunMsg
(
runMsg
+
"|"
+
dispatchResponseDto
.
getMsg
());
jobTaskRunLog
.
setRunMsg
(
runMsg
+
"|"
+
dispatchResponseDto
.
getMsg
());
}
else
{
jobTaskRunLog
.
setRunMsg
(
dispatchResponseDto
.
getMsg
());
}
}
}
}
//获取执行机地址
//获取执行机地址
...
...
byit-myth-core/myth-admin-core/src/main/java/com/byit/thread/helper/TaskThreadRunHelper.java
View file @
8b44c534
...
@@ -230,7 +230,7 @@ public class TaskThreadRunHelper extends BaseThreadRunHelper {
...
@@ -230,7 +230,7 @@ public class TaskThreadRunHelper extends BaseThreadRunHelper {
}
}
for
(
JobTaskRunLog
jobTaskRunLog
:
errorJobLog
)
{
for
(
JobTaskRunLog
jobTaskRunLog
:
errorJobLog
)
{
//失败重试次数大于0 而且错误原因不是上级节点执行失败
//失败重试次数大于0 而且错误原因不是上级节点执行失败
if
(
jobTaskRunLog
.
getFailedRemainingCount
()
>
0
&&
!(
"6"
.
equals
(
jobTaskRunLog
.
getRunCode
())
&&
"5"
.
equals
(
jobTaskRunLog
.
getRunCode
()))){
if
(
jobTaskRunLog
.
getFailedRemainingCount
()
!=
null
&&
jobTaskRunLog
.
getFailedRemainingCount
()>
0
&&
!(
"6"
.
equals
(
jobTaskRunLog
.
getRunCode
())
||
"5"
.
equals
(
jobTaskRunLog
.
getRunCode
()))){
log
.
debug
(
"----------------【{}节点没有重试完毕】----------------"
,
jobTaskRunLog
);
log
.
debug
(
"----------------【{}节点没有重试完毕】----------------"
,
jobTaskRunLog
);
return
false
;
return
false
;
}
}
...
...
byit-myth-core/myth-admin-core/src/main/java/com/byit/vo/FlowVersionVo.java
0 → 100644
View file @
8b44c534
package
com
.
byit
.
vo
;
import
com.byit.model.FlowVersion
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
java.io.Serializable
;
import
java.util.List
;
/**
* 工作流版本的视图载体
* @author huangfu
*/
@ApiModel
(
"工作流版本的视图载体"
)
@Data
public
class
FlowVersionVo
implements
Serializable
{
/**
* 工作流名字
*/
@ApiModelProperty
(
"工作流的名字"
)
private
String
flowName
;
/**
* 对应的版本
*/
@ApiModelProperty
(
"对应的工作流的所由版本"
)
private
List
<
FlowVersion
>
children
;
}
byit-myth-core/myth-admin-core/src/main/resources/mapper/FlowVersionMapper.xml
View file @
8b44c534
...
@@ -31,6 +31,11 @@
...
@@ -31,6 +31,11 @@
repeat_count, version_mark, workspace_id, author, principal, version_name, is_inner
repeat_count, version_mark, workspace_id, author, principal, version_name, is_inner
</sql>
</sql>
<select
id=
"findAllFlow"
resultMap=
"BaseResultMap"
>
select
<include
refid=
"Base_Column_List"
/>
from flow_version where remove_mark = '1'
</select>
<select
id=
"getById"
parameterType=
"java.lang.Integer"
resultMap=
"BaseResultMap"
>
<select
id=
"getById"
parameterType=
"java.lang.Integer"
resultMap=
"BaseResultMap"
>
<!-- generated @mbg.generated date: 2019-12-31 -->
<!-- generated @mbg.generated date: 2019-12-31 -->
select
select
...
...
byit-myth-core/myth-admin-core/src/main/resources/mapper/JobTaskRunLogMapper.xml
View file @
8b44c534
...
@@ -349,7 +349,7 @@
...
@@ -349,7 +349,7 @@
#{triggerCode,jdbcType=VARCHAR},
#{triggerCode,jdbcType=VARCHAR},
</if>
</if>
<if
test=
"triggerTime != null"
>
<if
test=
"triggerTime != null"
>
#{triggerTime,jdbcType=
DATE
},
#{triggerTime,jdbcType=
TIMESTAMP
},
</if>
</if>
<if
test=
"jobGroupIp != null"
>
<if
test=
"jobGroupIp != null"
>
#{jobGroupIp,jdbcType=VARCHAR},
#{jobGroupIp,jdbcType=VARCHAR},
...
...
byit-myth-executor/myth-executor-plugin/src/main/java/com/byit/utils/JobUtils.java
View file @
8b44c534
...
@@ -139,6 +139,10 @@ public class JobUtils {
...
@@ -139,6 +139,10 @@ public class JobUtils {
*/
*/
private
static
final
String
REQUEST_RUN_JAVATASK
=
"/api/node/runJavaTask"
;
private
static
final
String
REQUEST_RUN_JAVATASK
=
"/api/node/runJavaTask"
;
/**
/**
* 立即运行quartz任务
*/
private
static
final
String
REQUEST_RUN_TASK
=
"/api/node/runTask"
;
/**
* 获取当前的运行状态
* 获取当前的运行状态
*/
*/
private
static
final
String
REQUEST_LOADSTATUS_JAVATASK
=
"/api/node/loadCurrentStatusByJobName"
;
private
static
final
String
REQUEST_LOADSTATUS_JAVATASK
=
"/api/node/loadCurrentStatusByJobName"
;
...
@@ -597,6 +601,18 @@ public class JobUtils {
...
@@ -597,6 +601,18 @@ public class JobUtils {
}
}
/**
/**
* 立即运行quartz任务 不验证是否存在数据库中
* @param javaTask
* @return
*/
public
static
ResponseResult
runTask
(
JavaTask
javaTask
){
log
.
info
(
"-------------立即运行quartz任务----------------------"
);
String
response
=
createHttpRequest
(
REQUEST_RUN_TASK
,
"param="
+
JSON
.
toJSONString
(
javaTask
,
WriteClassName
));
log
.
info
(
"--------------------立即运行quartz任务,结果为:{}------------------------"
,
response
);
return
JSON
.
parseObject
(
response
,
ResponseResult
.
class
);
}
/**
* 获取当前的运行状态
* 获取当前的运行状态
* @param jobNames
* @param jobNames
* @return
* @return
...
...
demo-client/byit-demo-client/src/main/java/com/byit/job/AddComplexPy1.java
View file @
8b44c534
...
@@ -13,11 +13,13 @@ import java.util.concurrent.TimeUnit;
...
@@ -13,11 +13,13 @@ import java.util.concurrent.TimeUnit;
*/
*/
public
class
AddComplexPy1
{
public
class
AddComplexPy1
{
public
static
void
main
(
String
[]
args
)
{
public
static
void
main
(
String
[]
args
)
{
PluginPackage
pluginPackage
=
new
PluginPackage
();
PluginPackage
pluginPackage
=
new
PluginPackage
();
pluginPackage
.
setWorkspaceName
(
"test"
);
pluginPackage
.
setWorkspaceName
(
"test"
);
pluginPackage
.
setFlow
(
createFlow
());
pluginPackage
.
setFlow
(
createFlow
());
JobUtils
.
setRequestUrl
(
"http://127.0.0.1:8081/myth-job-admin"
);
JobUtils
.
setRequestUrl
(
"http://127.0.0.1:8081/myth-job-admin"
);
JobUtils
.
setTOKEN
(
"test"
);
JobUtils
.
setTOKEN
(
"test"
);
//JobUtils.addWorkspace("test");
JobUtils
.
publish
(
pluginPackage
);
JobUtils
.
publish
(
pluginPackage
);
}
}
...
...
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