Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
X
XXL-JOB
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
靳帅
XXL-JOB
Commits
5c16e16d
提交
5c16e16d
authored
9月 30, 2016
作者:
xueli.xue
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
调度中心, 支持根据AppName自动发现执行器地址;
上级
662e129a
隐藏空白字符变更
内嵌
并排
正在显示
6 个修改的文件
包含
177 行增加
和
38 行删除
+177
-38
RemoteHttpJobBean.java
...ava/com/xxl/job/admin/core/jobbean/RemoteHttpJobBean.java
+35
-15
XxlJobRegistry.java
...ain/java/com/xxl/job/admin/core/model/XxlJobRegistry.java
+55
-0
DynamicSchedulerUtil.java
...ava/com/xxl/job/admin/core/util/DynamicSchedulerUtil.java
+9
-23
IXxlJobRegistryDao.java
...c/main/java/com/xxl/job/admin/dao/IXxlJobRegistryDao.java
+12
-0
XxlJobRegistryDaoImpl.java
...ava/com/xxl/job/admin/dao/impl/XxlJobRegistryDaoImpl.java
+30
-0
XxlJobRegistryMapper.xml
...rc/main/resources/mybatis-mapper/XxlJobRegistryMapper.xml
+36
-0
没有找到文件。
xxl-job-admin/src/main/java/com/xxl/job/admin/core/jobbean/RemoteHttpJobBean.java
浏览文件 @
5c16e16d
...
@@ -3,8 +3,10 @@ package com.xxl.job.admin.core.jobbean;
...
@@ -3,8 +3,10 @@ package com.xxl.job.admin.core.jobbean;
import
com.xxl.job.admin.core.callback.XxlJobLogCallbackServer
;
import
com.xxl.job.admin.core.callback.XxlJobLogCallbackServer
;
import
com.xxl.job.admin.core.model.XxlJobInfo
;
import
com.xxl.job.admin.core.model.XxlJobInfo
;
import
com.xxl.job.admin.core.model.XxlJobLog
;
import
com.xxl.job.admin.core.model.XxlJobLog
;
import
com.xxl.job.admin.core.model.XxlJobRegistry
;
import
com.xxl.job.admin.core.thread.JobMonitorHelper
;
import
com.xxl.job.admin.core.thread.JobMonitorHelper
;
import
com.xxl.job.admin.core.util.DynamicSchedulerUtil
;
import
com.xxl.job.admin.core.util.DynamicSchedulerUtil
;
import
com.xxl.job.core.registry.RegistHelper
;
import
com.xxl.job.core.router.HandlerRouter.ActionRepository
;
import
com.xxl.job.core.router.HandlerRouter.ActionRepository
;
import
com.xxl.job.core.router.model.RequestModel
;
import
com.xxl.job.core.router.model.RequestModel
;
import
com.xxl.job.core.router.model.ResponseModel
;
import
com.xxl.job.core.router.model.ResponseModel
;
...
@@ -18,10 +20,7 @@ import org.slf4j.LoggerFactory;
...
@@ -18,10 +20,7 @@ import org.slf4j.LoggerFactory;
import
org.springframework.scheduling.quartz.QuartzJobBean
;
import
org.springframework.scheduling.quartz.QuartzJobBean
;
import
java.text.MessageFormat
;
import
java.text.MessageFormat
;
import
java.util.Arrays
;
import
java.util.*
;
import
java.util.Collections
;
import
java.util.Date
;
import
java.util.List
;
/**
/**
* http job bean
* http job bean
...
@@ -57,8 +56,25 @@ public class RemoteHttpJobBean extends QuartzJobBean {
...
@@ -57,8 +56,25 @@ public class RemoteHttpJobBean extends QuartzJobBean {
requestModel
.
setLogAddress
(
XxlJobLogCallbackServer
.
getTrigger_log_address
());
requestModel
.
setLogAddress
(
XxlJobLogCallbackServer
.
getTrigger_log_address
());
requestModel
.
setLogId
(
jobLog
.
getId
());
requestModel
.
setLogId
(
jobLog
.
getId
());
// parse address
List
<
String
>
addressList
=
new
ArrayList
<
String
>();
String
parseAddressMsg
=
null
;
if
(
StringUtils
.
isNotBlank
(
jobInfo
.
getExecutorAppname
()))
{
List
<
XxlJobRegistry
>
xxlJobRegistryList
=
DynamicSchedulerUtil
.
xxlJobRegistryDao
.
findRegistrys
(
RegistHelper
.
RegistType
.
EXECUTOR
.
name
(),
jobInfo
.
getExecutorAppname
());
if
(
xxlJobRegistryList
!=
null
&&
xxlJobRegistryList
.
size
()>
0
)
{
for
(
XxlJobRegistry
item:
xxlJobRegistryList
)
{
addressList
.
add
(
item
.
getRegistryValue
());
}
}
parseAddressMsg
=
MessageFormat
.
format
(
"Parse Address (Appname注册方式) <br>>>>[address list] : {0}<br><hr>"
,
addressList
.
toArray
());
}
else
{
List
<
String
>
addressArr
=
Arrays
.
asList
(
jobInfo
.
getExecutorAddress
().
split
(
","
));
addressList
.
addAll
(
addressArr
);
parseAddressMsg
=
MessageFormat
.
format
(
"Parse Address (地址配置方式) <br>>>>[address list] : {0}<br><hr>"
,
addressList
.
toArray
());
}
// failover trigger
// failover trigger
ResponseModel
responseModel
=
failoverTrigger
(
jobInfo
.
getExecutorAddress
()
,
requestModel
,
jobLog
);
ResponseModel
responseModel
=
failoverTrigger
(
addressList
,
requestModel
,
jobLog
);
jobLog
.
setExecutorHandler
(
jobInfo
.
getExecutorHandler
());
jobLog
.
setExecutorHandler
(
jobInfo
.
getExecutorHandler
());
jobLog
.
setExecutorParam
(
jobInfo
.
getExecutorParam
());
jobLog
.
setExecutorParam
(
jobInfo
.
getExecutorParam
());
logger
.
info
(
">>>>>>>>>>> xxl-job failoverTrigger response, jobId:{}, responseModel:{}"
,
jobLog
.
getId
(),
responseModel
.
toString
());
logger
.
info
(
">>>>>>>>>>> xxl-job failoverTrigger response, jobId:{}, responseModel:{}"
,
jobLog
.
getId
(),
responseModel
.
toString
());
...
@@ -66,7 +82,7 @@ public class RemoteHttpJobBean extends QuartzJobBean {
...
@@ -66,7 +82,7 @@ public class RemoteHttpJobBean extends QuartzJobBean {
// update trigger info
// update trigger info
jobLog
.
setTriggerTime
(
new
Date
());
jobLog
.
setTriggerTime
(
new
Date
());
jobLog
.
setTriggerStatus
(
responseModel
.
getStatus
());
jobLog
.
setTriggerStatus
(
responseModel
.
getStatus
());
jobLog
.
setTriggerMsg
(
responseModel
.
getMsg
());
jobLog
.
setTriggerMsg
(
parseAddressMsg
+
responseModel
.
getMsg
());
DynamicSchedulerUtil
.
xxlJobLogDao
.
updateTriggerInfo
(
jobLog
);
DynamicSchedulerUtil
.
xxlJobLogDao
.
updateTriggerInfo
(
jobLog
);
// monitor triger
// monitor triger
...
@@ -78,16 +94,14 @@ public class RemoteHttpJobBean extends QuartzJobBean {
...
@@ -78,16 +94,14 @@ public class RemoteHttpJobBean extends QuartzJobBean {
/**
/**
* failover for trigger remote address
* failover for trigger remote address
* @param handler_address
* @return
* @return
*/
*/
public
ResponseModel
failoverTrigger
(
String
handler_address
,
RequestModel
requestModel
,
XxlJobLog
jobLog
){
public
ResponseModel
failoverTrigger
(
List
<
String
>
addressList
,
RequestModel
requestModel
,
XxlJobLog
jobLog
){
if
(
handler_address
.
split
(
","
).
length
>
1
)
{
if
(
addressList
.
size
()
>
1
)
{
// for ha
// for ha
List
<
String
>
addressList
=
Arrays
.
asList
(
handler_address
.
split
(
","
));
Collections
.
shuffle
(
addressList
);
Collections
.
shuffle
(
addressList
);
// for failover
// for failover
String
failoverMessage
=
""
;
String
failoverMessage
=
""
;
for
(
String
address
:
addressList
)
{
for
(
String
address
:
addressList
)
{
...
@@ -119,14 +133,20 @@ public class RemoteHttpJobBean extends QuartzJobBean {
...
@@ -119,14 +133,20 @@ public class RemoteHttpJobBean extends QuartzJobBean {
result
.
setStatus
(
ResponseModel
.
FAIL
);
result
.
setStatus
(
ResponseModel
.
FAIL
);
result
.
setMsg
(
failoverMessage
);
result
.
setMsg
(
failoverMessage
);
return
result
;
return
result
;
}
else
{
}
else
if
(
addressList
.
size
()
==
1
)
{
String
address
=
addressList
.
get
(
0
);
// store real address
// store real address
jobLog
.
setExecutorAddress
(
handler_
address
);
jobLog
.
setExecutorAddress
(
address
);
ResponseModel
triggerCallback
=
XxlJobNetCommUtil
.
postHex
(
XxlJobNetCommUtil
.
addressToUrl
(
handler_
address
),
requestModel
);
ResponseModel
triggerCallback
=
XxlJobNetCommUtil
.
postHex
(
XxlJobNetCommUtil
.
addressToUrl
(
address
),
requestModel
);
String
failoverMessage
=
MessageFormat
.
format
(
"Trigger running, <br>>>>[address] : {0}, <br>>>>[status] : {1}, <br>>>>[msg] : {2} <br><hr>"
,
handler_
address
,
triggerCallback
.
getStatus
(),
triggerCallback
.
getMsg
());
String
failoverMessage
=
MessageFormat
.
format
(
"Trigger running, <br>>>>[address] : {0}, <br>>>>[status] : {1}, <br>>>>[msg] : {2} <br><hr>"
,
address
,
triggerCallback
.
getStatus
(),
triggerCallback
.
getMsg
());
triggerCallback
.
setMsg
(
failoverMessage
);
triggerCallback
.
setMsg
(
failoverMessage
);
return
triggerCallback
;
return
triggerCallback
;
}
else
{
ResponseModel
result
=
new
ResponseModel
();
result
.
setStatus
(
ResponseModel
.
FAIL
);
result
.
setMsg
(
"Trigger error, <br>>>>address list is null <br><hr>"
);
return
result
;
}
}
}
}
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/core/model/XxlJobRegistry.java
0 → 100644
浏览文件 @
5c16e16d
package
com
.
xxl
.
job
.
admin
.
core
.
model
;
import
java.util.Date
;
/**
* Created by xuxueli on 16/9/30.
*/
public
class
XxlJobRegistry
{
private
int
id
;
private
String
registryGroup
;
private
String
registryKey
;
private
String
registryValue
;
private
Date
updateTime
;
public
int
getId
()
{
return
id
;
}
public
void
setId
(
int
id
)
{
this
.
id
=
id
;
}
public
String
getRegistryGroup
()
{
return
registryGroup
;
}
public
void
setRegistryGroup
(
String
registryGroup
)
{
this
.
registryGroup
=
registryGroup
;
}
public
String
getRegistryKey
()
{
return
registryKey
;
}
public
void
setRegistryKey
(
String
registryKey
)
{
this
.
registryKey
=
registryKey
;
}
public
String
getRegistryValue
()
{
return
registryValue
;
}
public
void
setRegistryValue
(
String
registryValue
)
{
this
.
registryValue
=
registryValue
;
}
public
Date
getUpdateTime
()
{
return
updateTime
;
}
public
void
setUpdateTime
(
Date
updateTime
)
{
this
.
updateTime
=
updateTime
;
}
}
xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/DynamicSchedulerUtil.java
浏览文件 @
5c16e16d
package
com
.
xxl
.
job
.
admin
.
core
.
util
;
package
com
.
xxl
.
job
.
admin
.
core
.
util
;
import
java.util.ArrayList
;
import
com.xxl.job.admin.core.callback.XxlJobLogCallbackServer
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.HashSet
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Set
;
import
com.xxl.job.admin.core.jobbean.RemoteHttpJobBean
;
import
com.xxl.job.admin.core.jobbean.RemoteHttpJobBean
;
import
org.quartz.CronScheduleBuilder
;
import
com.xxl.job.admin.core.model.XxlJobInfo
;
import
org.quartz.CronTrigger
;
import
com.xxl.job.admin.dao.IXxlJobInfoDao
;
import
org.quartz.Job
;
import
com.xxl.job.admin.dao.IXxlJobLogDao
;
import
org.quartz.JobBuilder
;
import
com.xxl.job.admin.dao.IXxlJobRegistryDao
;
import
org.quartz.JobDetail
;
import
org.quartz.*
;
import
org.quartz.JobKey
;
import
org.quartz.Scheduler
;
import
org.quartz.SchedulerException
;
import
org.quartz.Trigger
;
import
org.quartz.Trigger.TriggerState
;
import
org.quartz.Trigger.TriggerState
;
import
org.quartz.TriggerBuilder
;
import
org.quartz.TriggerKey
;
import
org.quartz.impl.matchers.GroupMatcher
;
import
org.quartz.impl.matchers.GroupMatcher
;
import
org.quartz.impl.triggers.CronTriggerImpl
;
import
org.quartz.impl.triggers.CronTriggerImpl
;
import
org.slf4j.Logger
;
import
org.slf4j.Logger
;
...
@@ -31,10 +18,7 @@ import org.springframework.context.ApplicationContext;
...
@@ -31,10 +18,7 @@ import org.springframework.context.ApplicationContext;
import
org.springframework.context.ApplicationContextAware
;
import
org.springframework.context.ApplicationContextAware
;
import
org.springframework.util.Assert
;
import
org.springframework.util.Assert
;
import
com.xxl.job.admin.core.callback.XxlJobLogCallbackServer
;
import
java.util.*
;
import
com.xxl.job.admin.core.model.XxlJobInfo
;
import
com.xxl.job.admin.dao.IXxlJobInfoDao
;
import
com.xxl.job.admin.dao.IXxlJobLogDao
;
/**
/**
* base quartz scheduler util
* base quartz scheduler util
...
@@ -77,11 +61,13 @@ public final class DynamicSchedulerUtil implements ApplicationContextAware, Init
...
@@ -77,11 +61,13 @@ public final class DynamicSchedulerUtil implements ApplicationContextAware, Init
// xxlJobLogDao、xxlJobInfoDao
// xxlJobLogDao、xxlJobInfoDao
public
static
IXxlJobLogDao
xxlJobLogDao
;
public
static
IXxlJobLogDao
xxlJobLogDao
;
public
static
IXxlJobInfoDao
xxlJobInfoDao
;
public
static
IXxlJobInfoDao
xxlJobInfoDao
;
public
static
IXxlJobRegistryDao
xxlJobRegistryDao
;
@Override
@Override
public
void
setApplicationContext
(
ApplicationContext
applicationContext
)
throws
BeansException
{
public
void
setApplicationContext
(
ApplicationContext
applicationContext
)
throws
BeansException
{
DynamicSchedulerUtil
.
xxlJobLogDao
=
applicationContext
.
getBean
(
IXxlJobLogDao
.
class
);
DynamicSchedulerUtil
.
xxlJobLogDao
=
applicationContext
.
getBean
(
IXxlJobLogDao
.
class
);
DynamicSchedulerUtil
.
xxlJobInfoDao
=
applicationContext
.
getBean
(
IXxlJobInfoDao
.
class
);
DynamicSchedulerUtil
.
xxlJobInfoDao
=
applicationContext
.
getBean
(
IXxlJobInfoDao
.
class
);
DynamicSchedulerUtil
.
xxlJobRegistryDao
=
applicationContext
.
getBean
(
IXxlJobRegistryDao
.
class
);
}
}
@Override
@Override
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/dao/IXxlJobRegistryDao.java
0 → 100644
浏览文件 @
5c16e16d
package
com
.
xxl
.
job
.
admin
.
dao
;
import
com.xxl.job.admin.core.model.XxlJobRegistry
;
import
java.util.List
;
/**
* Created by xuxueli on 16/9/30.
*/
public
interface
IXxlJobRegistryDao
{
List
<
XxlJobRegistry
>
findRegistrys
(
String
registryGroup
,
String
registryKey
);
}
xxl-job-admin/src/main/java/com/xxl/job/admin/dao/impl/XxlJobRegistryDaoImpl.java
0 → 100644
浏览文件 @
5c16e16d
package
com
.
xxl
.
job
.
admin
.
dao
.
impl
;
import
com.xxl.job.admin.core.model.XxlJobRegistry
;
import
com.xxl.job.admin.dao.IXxlJobRegistryDao
;
import
org.mybatis.spring.SqlSessionTemplate
;
import
org.springframework.stereotype.Repository
;
import
javax.annotation.Resource
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
/**
* Created by xuxueli on 16/9/30.
*/
@Repository
public
class
XxlJobRegistryDaoImpl
implements
IXxlJobRegistryDao
{
@Resource
public
SqlSessionTemplate
sqlSessionTemplate
;
@Override
public
List
<
XxlJobRegistry
>
findRegistrys
(
String
registryGroup
,
String
registryKey
)
{
Map
<
String
,
String
>
params
=
new
HashMap
<
String
,
String
>();
params
.
put
(
"registryGroup"
,
registryGroup
);
params
.
put
(
"registryKey"
,
registryKey
);
return
sqlSessionTemplate
.
selectList
(
"XxlJobRegistryMapper.findRegistrys"
,
params
);
}
}
xxl-job-admin/src/main/resources/mybatis-mapper/XxlJobRegistryMapper.xml
0 → 100644
浏览文件 @
5c16e16d
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"XxlJobRegistryMapper"
>
<resultMap
id=
"XxlJobRegistry"
type=
"com.xxl.job.admin.core.model.XxlJobRegistry"
>
<result
column=
"id"
property=
"id"
/>
<result
column=
"registry_group"
property=
"registryGroup"
/>
<result
column=
"registry_key"
property=
"registryKey"
/>
<result
column=
"registry_value"
property=
"registryValue"
/>
<result
column=
"update_time"
property=
"updateTime"
/>
</resultMap>
<sql
id=
"Base_Column_List"
>
t.id,
t.registry_group,
t.registry_key,
t.registry_value,
t.update_time
</sql>
<select
id=
"findRegistrys"
parameterType=
"java.util.HashMap"
resultMap=
"XxlJobRegistry"
>
SELECT
<include
refid=
"Base_Column_List"
/>
FROM XXL_JOB_QRTZ_TRIGGER_REGISTRY AS t
WHERE t.registry_group = #{registryGroup}
AND t.registry_key = #{registryKey}
AND t.update_time
<![CDATA[ > ]]>
DATE_ADD(NOW(),INTERVAL -30 SECOND)
</select>
<delete
id=
"refresh"
>
delete from XXL_JOB_QRTZ_TRIGGER_REGISTRY
WHERE update_time
<![CDATA[ < ]]>
DATE_ADD(NOW(),INTERVAL -30 SECOND)
</delete>
</mapper>
\ No newline at end of file
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论