Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
X
XXL-JOB
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
靳帅
XXL-JOB
Commits
8a6d462d
提交
8a6d462d
authored
5月 10, 2017
作者:
xueli.xue
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
执行器与数据库彻底解耦,但是执行器需要配置调度中心集群地址。调度中心提供API供执行器回调和心跳注册服务,取消调度中心内部jetty,心跳周期调整为30s,心跳失效为三倍心跳;
上级
66de2818
显示空白字符变更
内嵌
并排
正在显示
30 个修改的文件
包含
444 行增加
和
247 行删除
+444
-247
JobApiController.java
...n/java/com/xxl/job/admin/controller/JobApiController.java
+47
-12
JobGroupController.java
...java/com/xxl/job/admin/controller/JobGroupController.java
+3
-7
RemoteHttpJobBean.java
...ava/com/xxl/job/admin/core/jobbean/RemoteHttpJobBean.java
+3
-20
XxlJobDynamicScheduler.java
...m/xxl/job/admin/core/schedule/XxlJobDynamicScheduler.java
+4
-33
JobRegistryMonitorHelper.java
...m/xxl/job/admin/core/thread/JobRegistryMonitorHelper.java
+8
-14
XxlJobServiceImpl.java
...ava/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java
+7
-4
applicationcontext-xxl-job-admin.xml
...ain/resources/spring/applicationcontext-xxl-job-admin.xml
+0
-5
springmvc-context.xml
...job-admin/src/main/resources/spring/springmvc-context.xml
+0
-0
xxl-job-admin.properties
xxl-job-admin/src/main/resources/xxl-job-admin.properties
+0
-4
jobgroup.index.ftl
.../main/webapp/WEB-INF/template/jobgroup/jobgroup.index.ftl
+0
-2
AdminApiTest.java
...dmin/src/test/java/com/xxl/job/dao/impl/AdminApiTest.java
+23
-0
AdminBiz.java
...job-core/src/main/java/com/xxl/job/core/biz/AdminBiz.java
+0
-13
HandleCallbackParam.java
.../java/com/xxl/job/core/biz/model/HandleCallbackParam.java
+10
-13
RegistryParam.java
...c/main/java/com/xxl/job/core/biz/model/RegistryParam.java
+54
-0
ReturnT.java
...ore/src/main/java/com/xxl/job/core/biz/model/ReturnT.java
+1
-0
TriggerParam.java
...rc/main/java/com/xxl/job/core/biz/model/TriggerParam.java
+13
-9
RegistryConfig.java
.../src/main/java/com/xxl/job/core/enums/RegistryConfig.java
+13
-0
XxlJobExecutor.java
...c/main/java/com/xxl/job/core/executor/XxlJobExecutor.java
+4
-5
RegistHelper.java
...src/main/java/com/xxl/job/core/registry/RegistHelper.java
+0
-13
DbRegistHelper.java
...n/java/com/xxl/job/core/registry/impl/DbRegistHelper.java
+0
-28
NetComServerFactory.java
...java/com/xxl/job/core/rpc/netcom/NetComServerFactory.java
+2
-3
JettyServer.java
...com/xxl/job/core/rpc/netcom/jetty/server/JettyServer.java
+2
-3
ExecutorRegistryThread.java
.../java/com/xxl/job/core/thread/ExecutorRegistryThread.java
+28
-13
JobThread.java
...core/src/main/java/com/xxl/job/core/thread/JobThread.java
+3
-3
TriggerCallbackThread.java
...n/java/com/xxl/job/core/thread/TriggerCallbackThread.java
+4
-12
AdminApiUtil.java
...ore/src/main/java/com/xxl/job/core/util/AdminApiUtil.java
+116
-0
HttpClientUtil.java
...e/src/main/java/com/xxl/job/core/util/HttpClientUtil.java
+0
-0
JacksonUtil.java
...core/src/main/java/com/xxl/job/core/util/JacksonUtil.java
+93
-0
applicationcontext-xxl-job.xml
...example/src/main/resources/applicationcontext-xxl-job.xml
+4
-26
xxl-job-executor.properties
...or-example/src/main/resources/xxl-job-executor.properties
+2
-5
没有找到文件。
xxl-job-admin/src/main/java/com/xxl/job/admin/co
re/biz/AdminBizImpl
.java
→
xxl-job-admin/src/main/java/com/xxl/job/admin/co
ntroller/JobApiController
.java
浏览文件 @
8a6d462d
package
com
.
xxl
.
job
.
admin
.
co
re
.
biz
;
package
com
.
xxl
.
job
.
admin
.
co
ntroller
;
import
com.xxl.job.admin.controller.annotation.PermessionLimit
;
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.schedule.XxlJobDynamicScheduler
;
import
com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler
;
import
com.xxl.job.core.biz.AdminBiz
;
import
com.xxl.job.admin.dao.IXxlJobInfoDao
;
import
com.xxl.job.admin.dao.IXxlJobLogDao
;
import
com.xxl.job.admin.dao.IXxlJobRegistryDao
;
import
com.xxl.job.core.biz.model.HandleCallbackParam
;
import
com.xxl.job.core.biz.model.HandleCallbackParam
;
import
com.xxl.job.core.biz.model.RegistryParam
;
import
com.xxl.job.core.biz.model.ReturnT
;
import
com.xxl.job.core.biz.model.ReturnT
;
import
com.xxl.job.core.util.AdminApiUtil
;
import
org.apache.commons.lang.StringUtils
;
import
org.apache.commons.lang.StringUtils
;
import
org.quartz.SchedulerException
;
import
org.quartz.SchedulerException
;
import
org.slf4j.Logger
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.stereotype.Controller
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMethod
;
import
org.springframework.web.bind.annotation.ResponseBody
;
import
javax.annotation.Resource
;
import
java.text.MessageFormat
;
import
java.text.MessageFormat
;
import
java.util.Date
;
import
java.util.Date
;
/**
/**
* Created by xuxueli on 17/
3/1
.
* Created by xuxueli on 17/
5/10
.
*/
*/
public
class
AdminBizImpl
implements
AdminBiz
{
@Controller
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
AdminBizImpl
.
class
);
public
class
JobApiController
{
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
JobApiController
.
class
);
@Resource
public
IXxlJobLogDao
xxlJobLogDao
;
@Resource
private
IXxlJobInfoDao
xxlJobInfoDao
;
@Resource
private
IXxlJobRegistryDao
xxlJobRegistryDao
;
@RequestMapping
(
value
=
AdminApiUtil
.
CALLBACK
,
method
=
RequestMethod
.
POST
,
consumes
=
"application/json"
)
@ResponseBody
@PermessionLimit
(
limit
=
false
)
public
ReturnT
<
String
>
callback
(
@RequestBody
HandleCallbackParam
handleCallbackParam
){
@Override
public
ReturnT
<
String
>
callback
(
HandleCallbackParam
handleCallbackParam
)
{
// valid log item
// valid log item
XxlJobLog
log
=
XxlJobDynamicScheduler
.
xxlJobLogDao
.
load
(
handleCallbackParam
.
getLogId
());
XxlJobLog
log
=
xxlJobLogDao
.
load
(
handleCallbackParam
.
getLogId
());
if
(
log
==
null
)
{
if
(
log
==
null
)
{
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
"log item not found."
);
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
"log item not found."
);
}
}
...
@@ -32,14 +55,14 @@ public class AdminBizImpl implements AdminBiz {
...
@@ -32,14 +55,14 @@ public class AdminBizImpl implements AdminBiz {
// trigger success, to trigger child job, and avoid repeat trigger child job
// trigger success, to trigger child job, and avoid repeat trigger child job
String
childTriggerMsg
=
null
;
String
childTriggerMsg
=
null
;
if
(
ReturnT
.
SUCCESS_CODE
==
handleCallbackParam
.
getExecuteResult
().
getCode
()
&&
ReturnT
.
SUCCESS_CODE
!=
log
.
getHandleCode
())
{
if
(
ReturnT
.
SUCCESS_CODE
==
handleCallbackParam
.
getExecuteResult
().
getCode
()
&&
ReturnT
.
SUCCESS_CODE
!=
log
.
getHandleCode
())
{
XxlJobInfo
xxlJobInfo
=
XxlJobDynamicScheduler
.
xxlJobInfoDao
.
loadById
(
log
.
getJobId
());
XxlJobInfo
xxlJobInfo
=
xxlJobInfoDao
.
loadById
(
log
.
getJobId
());
if
(
xxlJobInfo
!=
null
&&
StringUtils
.
isNotBlank
(
xxlJobInfo
.
getChildJobKey
()))
{
if
(
xxlJobInfo
!=
null
&&
StringUtils
.
isNotBlank
(
xxlJobInfo
.
getChildJobKey
()))
{
childTriggerMsg
=
"<hr>"
;
childTriggerMsg
=
"<hr>"
;
String
[]
childJobKeys
=
xxlJobInfo
.
getChildJobKey
().
split
(
","
);
String
[]
childJobKeys
=
xxlJobInfo
.
getChildJobKey
().
split
(
","
);
for
(
int
i
=
0
;
i
<
childJobKeys
.
length
;
i
++)
{
for
(
int
i
=
0
;
i
<
childJobKeys
.
length
;
i
++)
{
String
[]
jobKeyArr
=
childJobKeys
[
i
].
split
(
"_"
);
String
[]
jobKeyArr
=
childJobKeys
[
i
].
split
(
"_"
);
if
(
jobKeyArr
!=
null
&&
jobKeyArr
.
length
==
2
)
{
if
(
jobKeyArr
!=
null
&&
jobKeyArr
.
length
==
2
)
{
XxlJobInfo
childJobInfo
=
XxlJobDynamicScheduler
.
xxlJobInfoDao
.
loadById
(
Integer
.
valueOf
(
jobKeyArr
[
1
]));
XxlJobInfo
childJobInfo
=
xxlJobInfoDao
.
loadById
(
Integer
.
valueOf
(
jobKeyArr
[
1
]));
if
(
childJobInfo
!=
null
)
{
if
(
childJobInfo
!=
null
)
{
try
{
try
{
boolean
ret
=
XxlJobDynamicScheduler
.
triggerJob
(
String
.
valueOf
(
childJobInfo
.
getId
()),
String
.
valueOf
(
childJobInfo
.
getJobGroup
()));
boolean
ret
=
XxlJobDynamicScheduler
.
triggerJob
(
String
.
valueOf
(
childJobInfo
.
getId
()),
String
.
valueOf
(
childJobInfo
.
getJobGroup
()));
...
@@ -79,9 +102,21 @@ public class AdminBizImpl implements AdminBiz {
...
@@ -79,9 +102,21 @@ public class AdminBizImpl implements AdminBiz {
log
.
setHandleTime
(
new
Date
());
log
.
setHandleTime
(
new
Date
());
log
.
setHandleCode
(
handleCallbackParam
.
getExecuteResult
().
getCode
());
log
.
setHandleCode
(
handleCallbackParam
.
getExecuteResult
().
getCode
());
log
.
setHandleMsg
(
handleMsg
.
toString
());
log
.
setHandleMsg
(
handleMsg
.
toString
());
XxlJobDynamicScheduler
.
xxlJobLogDao
.
updateHandleInfo
(
log
);
xxlJobLogDao
.
updateHandleInfo
(
log
);
return
new
ReturnT
<
String
>(
ReturnT
.
SUCCESS_CODE
,
null
);
return
ReturnT
.
SUCCESS
;
}
@RequestMapping
(
value
=
AdminApiUtil
.
REGISTRY
,
method
=
RequestMethod
.
POST
,
consumes
=
"application/json"
)
@ResponseBody
@PermessionLimit
(
limit
=
false
)
public
ReturnT
<
String
>
registry
(
@RequestBody
RegistryParam
registryParam
){
int
ret
=
xxlJobRegistryDao
.
registryUpdate
(
registryParam
.
getRegistGroup
(),
registryParam
.
getRegistryKey
(),
registryParam
.
getRegistryValue
());
if
(
ret
<
1
)
{
xxlJobRegistryDao
.
registrySave
(
registryParam
.
getRegistGroup
(),
registryParam
.
getRegistryKey
(),
registryParam
.
getRegistryValue
());
}
return
ReturnT
.
SUCCESS
;
}
}
}
}
xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobGroupController.java
浏览文件 @
8a6d462d
package
com
.
xxl
.
job
.
admin
.
controller
;
package
com
.
xxl
.
job
.
admin
.
controller
;
import
com.xxl.job.admin.core.model.XxlJobGroup
;
import
com.xxl.job.admin.core.model.XxlJobGroup
;
import
com.xxl.job.admin.core.thread.JobRegistryHelper
;
import
com.xxl.job.admin.core.thread.JobRegistry
Monitor
Helper
;
import
com.xxl.job.admin.dao.IXxlJobGroupDao
;
import
com.xxl.job.admin.dao.IXxlJobGroupDao
;
import
com.xxl.job.admin.dao.IXxlJobInfoDao
;
import
com.xxl.job.admin.dao.IXxlJobInfoDao
;
import
com.xxl.job.core.biz.model.ReturnT
;
import
com.xxl.job.core.biz.model.ReturnT
;
import
com.xxl.job.core.
registry.RegistHelper
;
import
com.xxl.job.core.
enums.RegistryConfig
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.commons.lang.StringUtils
;
import
org.apache.commons.lang.StringUtils
;
import
org.springframework.stereotype.Controller
;
import
org.springframework.stereotype.Controller
;
...
@@ -33,9 +33,6 @@ public class JobGroupController {
...
@@ -33,9 +33,6 @@ public class JobGroupController {
@RequestMapping
@RequestMapping
public
String
index
(
Model
model
)
{
public
String
index
(
Model
model
)
{
// job admin
List
<
String
>
adminAddressList
=
JobRegistryHelper
.
discover
(
RegistHelper
.
RegistType
.
ADMIN
.
name
(),
RegistHelper
.
RegistType
.
ADMIN
.
name
());
// job group (executor)
// job group (executor)
List
<
XxlJobGroup
>
list
=
xxlJobGroupDao
.
findAll
();
List
<
XxlJobGroup
>
list
=
xxlJobGroupDao
.
findAll
();
...
@@ -43,7 +40,7 @@ public class JobGroupController {
...
@@ -43,7 +40,7 @@ public class JobGroupController {
for
(
XxlJobGroup
group:
list
)
{
for
(
XxlJobGroup
group:
list
)
{
List
<
String
>
registryList
=
null
;
List
<
String
>
registryList
=
null
;
if
(
group
.
getAddressType
()
==
0
)
{
if
(
group
.
getAddressType
()
==
0
)
{
registryList
=
JobRegistry
Helper
.
discover
(
RegistHelper
.
RegistType
.
EXECUTOR
.
name
(),
group
.
getAppName
());
registryList
=
JobRegistry
MonitorHelper
.
discover
(
RegistryConfig
.
RegistType
.
EXECUTOR
.
name
(),
group
.
getAppName
());
}
else
{
}
else
{
if
(
StringUtils
.
isNotBlank
(
group
.
getAddressList
()))
{
if
(
StringUtils
.
isNotBlank
(
group
.
getAddressList
()))
{
registryList
=
Arrays
.
asList
(
group
.
getAddressList
().
split
(
","
));
registryList
=
Arrays
.
asList
(
group
.
getAddressList
().
split
(
","
));
...
@@ -53,7 +50,6 @@ public class JobGroupController {
...
@@ -53,7 +50,6 @@ public class JobGroupController {
}
}
}
}
model
.
addAttribute
(
"adminAddressList"
,
adminAddressList
);
model
.
addAttribute
(
"list"
,
list
);
model
.
addAttribute
(
"list"
,
list
);
return
"jobgroup/jobgroup.index"
;
return
"jobgroup/jobgroup.index"
;
}
}
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/core/jobbean/RemoteHttpJobBean.java
浏览文件 @
8a6d462d
...
@@ -7,12 +7,12 @@ import com.xxl.job.admin.core.model.XxlJobLog;
...
@@ -7,12 +7,12 @@ import com.xxl.job.admin.core.model.XxlJobLog;
import
com.xxl.job.admin.core.route.ExecutorRouteStrategyEnum
;
import
com.xxl.job.admin.core.route.ExecutorRouteStrategyEnum
;
import
com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler
;
import
com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler
;
import
com.xxl.job.admin.core.thread.JobMonitorHelper
;
import
com.xxl.job.admin.core.thread.JobMonitorHelper
;
import
com.xxl.job.admin.core.thread.JobRegistryHelper
;
import
com.xxl.job.admin.core.thread.JobRegistry
Monitor
Helper
;
import
com.xxl.job.core.biz.ExecutorBiz
;
import
com.xxl.job.core.biz.ExecutorBiz
;
import
com.xxl.job.core.biz.model.ReturnT
;
import
com.xxl.job.core.biz.model.ReturnT
;
import
com.xxl.job.core.biz.model.TriggerParam
;
import
com.xxl.job.core.biz.model.TriggerParam
;
import
com.xxl.job.core.enums.ExecutorBlockStrategyEnum
;
import
com.xxl.job.core.enums.ExecutorBlockStrategyEnum
;
import
com.xxl.job.core.
registry.RegistHelper
;
import
com.xxl.job.core.
enums.RegistryConfig
;
import
com.xxl.job.core.rpc.netcom.NetComClientProxy
;
import
com.xxl.job.core.rpc.netcom.NetComClientProxy
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.commons.lang.StringUtils
;
import
org.apache.commons.lang.StringUtils
;
...
@@ -68,7 +68,6 @@ public class RemoteHttpJobBean extends QuartzJobBean {
...
@@ -68,7 +68,6 @@ public class RemoteHttpJobBean extends QuartzJobBean {
triggerParam
.
setGlueUpdatetime
(
jobInfo
.
getGlueUpdatetime
().
getTime
());
triggerParam
.
setGlueUpdatetime
(
jobInfo
.
getGlueUpdatetime
().
getTime
());
triggerParam
.
setLogId
(
jobLog
.
getId
());
triggerParam
.
setLogId
(
jobLog
.
getId
());
triggerParam
.
setLogDateTim
(
jobLog
.
getTriggerTime
().
getTime
());
triggerParam
.
setLogDateTim
(
jobLog
.
getTriggerTime
().
getTime
());
triggerParam
.
setLogAddress
(
findCallbackAddressList
());
// callback address list
// do trigger
// do trigger
ReturnT
<
String
>
triggerResult
=
doTrigger
(
triggerParam
,
jobInfo
,
jobLog
);
ReturnT
<
String
>
triggerResult
=
doTrigger
(
triggerParam
,
jobInfo
,
jobLog
);
...
@@ -100,7 +99,7 @@ public class RemoteHttpJobBean extends QuartzJobBean {
...
@@ -100,7 +99,7 @@ public class RemoteHttpJobBean extends QuartzJobBean {
XxlJobGroup
group
=
XxlJobDynamicScheduler
.
xxlJobGroupDao
.
load
(
jobInfo
.
getJobGroup
());
XxlJobGroup
group
=
XxlJobDynamicScheduler
.
xxlJobGroupDao
.
load
(
jobInfo
.
getJobGroup
());
if
(
group
.
getAddressType
()
==
0
)
{
if
(
group
.
getAddressType
()
==
0
)
{
triggerSb
.
append
(
"注册方式:自动注册"
);
triggerSb
.
append
(
"注册方式:自动注册"
);
addressList
=
(
ArrayList
<
String
>)
JobRegistry
Helper
.
discover
(
RegistHelper
.
RegistType
.
EXECUTOR
.
name
(),
group
.
getAppName
());
addressList
=
(
ArrayList
<
String
>)
JobRegistry
MonitorHelper
.
discover
(
RegistryConfig
.
RegistType
.
EXECUTOR
.
name
(),
group
.
getAppName
());
}
else
{
}
else
{
triggerSb
.
append
(
"注册方式:手动录入"
);
triggerSb
.
append
(
"注册方式:手动录入"
);
if
(
StringUtils
.
isNotBlank
(
group
.
getAddressList
()))
{
if
(
StringUtils
.
isNotBlank
(
group
.
getAddressList
()))
{
...
@@ -212,19 +211,4 @@ public class RemoteHttpJobBean extends QuartzJobBean {
...
@@ -212,19 +211,4 @@ public class RemoteHttpJobBean extends QuartzJobBean {
return
runResult
;
return
runResult
;
}
}
/**
* find callback address list
* @return
*/
public
Set
<
String
>
findCallbackAddressList
(){
Set
<
String
>
adminAddressSet
=
new
HashSet
<
String
>();
adminAddressSet
.
add
(
XxlJobDynamicScheduler
.
getCallbackAddress
());
List
<
String
>
adminAddressList
=
JobRegistryHelper
.
discover
(
RegistHelper
.
RegistType
.
ADMIN
.
name
(),
RegistHelper
.
RegistType
.
ADMIN
.
name
());
if
(
adminAddressList
!=
null
)
{
adminAddressSet
.
addAll
(
adminAddressList
);
}
return
adminAddressSet
;
}
}
}
\ No newline at end of file
xxl-job-admin/src/main/java/com/xxl/job/admin/core/schedule/XxlJobDynamicScheduler.java
浏览文件 @
8a6d462d
...
@@ -3,15 +3,12 @@ package com.xxl.job.admin.core.schedule;
...
@@ -3,15 +3,12 @@ package com.xxl.job.admin.core.schedule;
import
com.xxl.job.admin.core.jobbean.RemoteHttpJobBean
;
import
com.xxl.job.admin.core.jobbean.RemoteHttpJobBean
;
import
com.xxl.job.admin.core.model.XxlJobInfo
;
import
com.xxl.job.admin.core.model.XxlJobInfo
;
import
com.xxl.job.admin.core.thread.JobMonitorHelper
;
import
com.xxl.job.admin.core.thread.JobMonitorHelper
;
import
com.xxl.job.admin.core.thread.JobRegistryHelper
;
import
com.xxl.job.admin.core.thread.JobRegistry
Monitor
Helper
;
import
com.xxl.job.admin.dao.IXxlJobGroupDao
;
import
com.xxl.job.admin.dao.IXxlJobGroupDao
;
import
com.xxl.job.admin.dao.IXxlJobInfoDao
;
import
com.xxl.job.admin.dao.IXxlJobInfoDao
;
import
com.xxl.job.admin.dao.IXxlJobLogDao
;
import
com.xxl.job.admin.dao.IXxlJobLogDao
;
import
com.xxl.job.admin.dao.IXxlJobRegistryDao
;
import
com.xxl.job.admin.dao.IXxlJobRegistryDao
;
import
com.xxl.job.core.biz.AdminBiz
;
import
com.xxl.job.admin.core.biz.AdminBizImpl
;
import
com.xxl.job.core.rpc.netcom.NetComServerFactory
;
import
com.xxl.job.core.rpc.netcom.NetComServerFactory
;
import
com.xxl.job.core.util.IpUtil
;
import
org.quartz.*
;
import
org.quartz.*
;
import
org.quartz.Trigger.TriggerState
;
import
org.quartz.Trigger.TriggerState
;
import
org.quartz.impl.matchers.GroupMatcher
;
import
org.quartz.impl.matchers.GroupMatcher
;
...
@@ -39,37 +36,11 @@ public final class XxlJobDynamicScheduler implements ApplicationContextAware, In
...
@@ -39,37 +36,11 @@ public final class XxlJobDynamicScheduler implements ApplicationContextAware, In
XxlJobDynamicScheduler
.
scheduler
=
scheduler
;
XxlJobDynamicScheduler
.
scheduler
=
scheduler
;
}
}
// trigger callback address
private
String
callBackIp
;
private
int
callBackPort
=
8888
;
private
static
String
callbackAddress
;
public
void
setCallBackIp
(
String
callBackIp
)
{
this
.
callBackIp
=
callBackIp
;
}
public
void
setCallBackPort
(
int
callBackPort
)
{
this
.
callBackPort
=
callBackPort
;
}
public
static
String
getCallbackAddress
(){
return
callbackAddress
;
}
// init
// init
private
NetComServerFactory
serverFactory
=
new
NetComServerFactory
();
private
NetComServerFactory
serverFactory
=
new
NetComServerFactory
();
public
void
init
()
throws
Exception
{
public
void
init
()
throws
Exception
{
// server
// admin registry monitor run
NetComServerFactory
.
putService
(
AdminBiz
.
class
,
new
AdminBizImpl
());
JobRegistryMonitorHelper
.
getInstance
().
start
();
serverFactory
.
start
(
callBackPort
,
callBackIp
,
null
,
null
);
// init callbackAddress
if
(
callBackIp
!=
null
&&
callBackIp
.
trim
().
length
()>
0
)
{
callbackAddress
=
callBackIp
.
trim
().
concat
(
":"
).
concat
(
String
.
valueOf
(
callBackPort
));
}
else
{
callbackAddress
=
IpUtil
.
getIpPort
(
callBackPort
);;
}
// admin registry run
JobRegistryHelper
.
getInstance
().
start
();
// admin monitor run
// admin monitor run
JobMonitorHelper
.
getInstance
().
start
();
JobMonitorHelper
.
getInstance
().
start
();
...
@@ -78,7 +49,7 @@ public final class XxlJobDynamicScheduler implements ApplicationContextAware, In
...
@@ -78,7 +49,7 @@ public final class XxlJobDynamicScheduler implements ApplicationContextAware, In
// destroy
// destroy
public
void
destroy
(){
public
void
destroy
(){
// admin registry stop
// admin registry stop
JobRegistryHelper
.
getInstance
().
toStop
();
JobRegistry
Monitor
Helper
.
getInstance
().
toStop
();
// admin monitor stop
// admin monitor stop
JobMonitorHelper
.
getInstance
().
toStop
();
JobMonitorHelper
.
getInstance
().
toStop
();
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryHelper.java
→
xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistry
Monitor
Helper.java
浏览文件 @
8a6d462d
...
@@ -2,7 +2,7 @@ package com.xxl.job.admin.core.thread;
...
@@ -2,7 +2,7 @@ package com.xxl.job.admin.core.thread;
import
com.xxl.job.admin.core.model.XxlJobRegistry
;
import
com.xxl.job.admin.core.model.XxlJobRegistry
;
import
com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler
;
import
com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler
;
import
com.xxl.job.core.
registry.RegistHelper
;
import
com.xxl.job.core.
enums.RegistryConfig
;
import
org.slf4j.Logger
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.slf4j.LoggerFactory
;
...
@@ -15,11 +15,11 @@ import java.util.concurrent.TimeUnit;
...
@@ -15,11 +15,11 @@ import java.util.concurrent.TimeUnit;
* job registry instance
* job registry instance
* @author xuxueli 2016-10-02 19:10:24
* @author xuxueli 2016-10-02 19:10:24
*/
*/
public
class
JobRegistryHelper
{
public
class
JobRegistry
Monitor
Helper
{
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
JobRegistryHelper
.
class
);
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
JobRegistry
Monitor
Helper
.
class
);
private
static
JobRegistry
Helper
instance
=
new
JobRegistry
Helper
();
private
static
JobRegistry
MonitorHelper
instance
=
new
JobRegistryMonitor
Helper
();
public
static
JobRegistryHelper
getInstance
(){
public
static
JobRegistry
Monitor
Helper
getInstance
(){
return
instance
;
return
instance
;
}
}
...
@@ -33,18 +33,12 @@ public class JobRegistryHelper {
...
@@ -33,18 +33,12 @@ public class JobRegistryHelper {
public
void
run
()
{
public
void
run
()
{
while
(!
toStop
)
{
while
(!
toStop
)
{
try
{
try
{
// registry admin
int
ret
=
XxlJobDynamicScheduler
.
xxlJobRegistryDao
.
registryUpdate
(
RegistHelper
.
RegistType
.
ADMIN
.
name
(),
RegistHelper
.
RegistType
.
ADMIN
.
name
(),
XxlJobDynamicScheduler
.
getCallbackAddress
());
if
(
ret
<
1
)
{
XxlJobDynamicScheduler
.
xxlJobRegistryDao
.
registrySave
(
RegistHelper
.
RegistType
.
ADMIN
.
name
(),
RegistHelper
.
RegistType
.
ADMIN
.
name
(),
XxlJobDynamicScheduler
.
getCallbackAddress
());
}
// remove dead admin/executor
// remove dead admin/executor
XxlJobDynamicScheduler
.
xxlJobRegistryDao
.
removeDead
(
Regist
Helper
.
TIMEOUT
*
2
);
XxlJobDynamicScheduler
.
xxlJobRegistryDao
.
removeDead
(
Regist
ryConfig
.
DEAD_TIMEOUT
);
// fresh registry map
// fresh registry map
ConcurrentHashMap
<
String
,
List
<
String
>>
temp
=
new
ConcurrentHashMap
<
String
,
List
<
String
>>();
ConcurrentHashMap
<
String
,
List
<
String
>>
temp
=
new
ConcurrentHashMap
<
String
,
List
<
String
>>();
List
<
XxlJobRegistry
>
list
=
XxlJobDynamicScheduler
.
xxlJobRegistryDao
.
findAll
(
Regist
Helper
.
TIMEOUT
*
2
);
List
<
XxlJobRegistry
>
list
=
XxlJobDynamicScheduler
.
xxlJobRegistryDao
.
findAll
(
Regist
ryConfig
.
DEAD_TIMEOUT
);
if
(
list
!=
null
)
{
if
(
list
!=
null
)
{
for
(
XxlJobRegistry
item:
list
)
{
for
(
XxlJobRegistry
item:
list
)
{
String
groupKey
=
makeGroupKey
(
item
.
getRegistryGroup
(),
item
.
getRegistryKey
());
String
groupKey
=
makeGroupKey
(
item
.
getRegistryGroup
(),
item
.
getRegistryKey
());
...
@@ -61,7 +55,7 @@ public class JobRegistryHelper {
...
@@ -61,7 +55,7 @@ public class JobRegistryHelper {
logger
.
error
(
"job registry instance error:{}"
,
e
);
logger
.
error
(
"job registry instance error:{}"
,
e
);
}
}
try
{
try
{
TimeUnit
.
SECONDS
.
sleep
(
Regist
Helper
.
TIMEOUT
);
TimeUnit
.
SECONDS
.
sleep
(
Regist
ryConfig
.
BEAT_
TIMEOUT
);
}
catch
(
InterruptedException
e
)
{
}
catch
(
InterruptedException
e
)
{
logger
.
error
(
"job registry instance error:{}"
,
e
);
logger
.
error
(
"job registry instance error:{}"
,
e
);
}
}
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java
浏览文件 @
8a6d462d
...
@@ -5,13 +5,16 @@ import com.xxl.job.admin.core.model.XxlJobGroup;
...
@@ -5,13 +5,16 @@ import com.xxl.job.admin.core.model.XxlJobGroup;
import
com.xxl.job.admin.core.model.XxlJobInfo
;
import
com.xxl.job.admin.core.model.XxlJobInfo
;
import
com.xxl.job.admin.core.route.ExecutorRouteStrategyEnum
;
import
com.xxl.job.admin.core.route.ExecutorRouteStrategyEnum
;
import
com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler
;
import
com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler
;
import
com.xxl.job.admin.core.thread.JobRegistryHelper
;
import
com.xxl.job.admin.core.thread.JobRegistryMonitorHelper
;
import
com.xxl.job.admin.dao.*
;
import
com.xxl.job.admin.dao.IXxlJobGroupDao
;
import
com.xxl.job.admin.dao.IXxlJobInfoDao
;
import
com.xxl.job.admin.dao.IXxlJobLogDao
;
import
com.xxl.job.admin.dao.IXxlJobLogGlueDao
;
import
com.xxl.job.admin.service.IXxlJobService
;
import
com.xxl.job.admin.service.IXxlJobService
;
import
com.xxl.job.core.biz.model.ReturnT
;
import
com.xxl.job.core.biz.model.ReturnT
;
import
com.xxl.job.core.enums.ExecutorBlockStrategyEnum
;
import
com.xxl.job.core.enums.ExecutorBlockStrategyEnum
;
import
com.xxl.job.core.enums.RegistryConfig
;
import
com.xxl.job.core.glue.GlueTypeEnum
;
import
com.xxl.job.core.glue.GlueTypeEnum
;
import
com.xxl.job.core.registry.RegistHelper
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.commons.collections.CollectionUtils
;
import
org.apache.commons.lang.StringUtils
;
import
org.apache.commons.lang.StringUtils
;
import
org.apache.commons.lang.time.DateUtils
;
import
org.apache.commons.lang.time.DateUtils
;
...
@@ -289,7 +292,7 @@ public class XxlJobServiceImpl implements IXxlJobService {
...
@@ -289,7 +292,7 @@ public class XxlJobServiceImpl implements IXxlJobService {
for
(
XxlJobGroup
group:
groupList
)
{
for
(
XxlJobGroup
group:
groupList
)
{
List
<
String
>
registryList
=
null
;
List
<
String
>
registryList
=
null
;
if
(
group
.
getAddressType
()
==
0
)
{
if
(
group
.
getAddressType
()
==
0
)
{
registryList
=
JobRegistry
Helper
.
discover
(
RegistHelper
.
RegistType
.
EXECUTOR
.
name
(),
group
.
getAppName
());
registryList
=
JobRegistry
MonitorHelper
.
discover
(
RegistryConfig
.
RegistType
.
EXECUTOR
.
name
(),
group
.
getAppName
());
}
else
{
}
else
{
if
(
StringUtils
.
isNotBlank
(
group
.
getAddressList
()))
{
if
(
StringUtils
.
isNotBlank
(
group
.
getAddressList
()))
{
registryList
=
Arrays
.
asList
(
group
.
getAddressList
().
split
(
","
));
registryList
=
Arrays
.
asList
(
group
.
getAddressList
().
split
(
","
));
...
...
xxl-job-admin/src/main/resources/spring/applicationcontext-xxl-job-admin.xml
浏览文件 @
8a6d462d
...
@@ -84,10 +84,6 @@
...
@@ -84,10 +84,6 @@
<bean
id=
"xxlJobDynamicScheduler"
class=
"com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler"
init-method=
"init"
destroy-method=
"destroy"
>
<bean
id=
"xxlJobDynamicScheduler"
class=
"com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler"
init-method=
"init"
destroy-method=
"destroy"
>
<!-- (轻易不要变更“调度器名称”, 任务创建时会绑定该“调度器名称”) -->
<!-- (轻易不要变更“调度器名称”, 任务创建时会绑定该“调度器名称”) -->
<property
name=
"scheduler"
ref=
"quartzScheduler"
/>
<property
name=
"scheduler"
ref=
"quartzScheduler"
/>
<!-- 调度中心回调IP[选填],为空则自动获取 -->
<property
name=
"callBackIp"
value=
"${xxl.job.callBackIp}"
/>
<!-- 调度中心回调端口号 -->
<property
name=
"callBackPort"
value=
"${xxl.job.callBackPort}"
/>
</bean>
</bean>
</beans>
</beans>
\ No newline at end of file
xxl-job-admin/src/main/resources/spring/springmvc-context.xml
浏览文件 @
8a6d462d
xxl-job-admin/src/main/resources/xxl-job-admin.properties
浏览文件 @
8a6d462d
...
@@ -4,10 +4,6 @@ xxl.job.db.url=jdbc:mysql://localhost:3306/xxl-job?useUnicode=true&characterEnco
...
@@ -4,10 +4,6 @@ xxl.job.db.url=jdbc:mysql://localhost:3306/xxl-job?useUnicode=true&characterEnco
xxl.job.db.user
=
root
xxl.job.db.user
=
root
xxl.job.db.password
=
root_pwd
xxl.job.db.password
=
root_pwd
### xxl-job callback address
xxl.job.callBackIp
=
xxl.job.callBackPort
=
8888
### xxl-job email
### xxl-job email
xxl.job.mail.host
=
smtp.163.com
xxl.job.mail.host
=
smtp.163.com
xxl.job.mail.port
=
25
xxl.job.mail.port
=
25
...
...
xxl-job-admin/src/main/webapp/WEB-INF/template/jobgroup/jobgroup.index.ftl
浏览文件 @
8a6d462d
...
@@ -30,8 +30,6 @@
...
@@ -30,8 +30,6 @@
<div
class=
"box-header"
>
<div
class=
"box-header"
>
<h3
class=
"box-title"
>
执行器列表
</h3>
<h3
class=
"box-title"
>
执行器列表
</h3>
<button
class=
"btn btn-info btn-xs pull-left2 add"
>
+新增执行器
</button>
<button
class=
"btn btn-info btn-xs pull-left2 add"
>
+新增执行器
</button>
调度中心OnLine机器:
<
#
if
adminAddressList
?
exists
><
#
list
adminAddressList
as
item
><span
class=
"badge bg-green"
>
${item}
</span></
#
list></
#
if>
</div>
</div>
<div
class=
"box-body"
>
<div
class=
"box-body"
>
<table
id=
"joblog_list"
class=
"table table-bordered table-striped display"
width=
"100%"
>
<table
id=
"joblog_list"
class=
"table table-bordered table-striped display"
width=
"100%"
>
...
...
xxl-job-admin/src/test/java/com/xxl/job/dao/impl/AdminApiTest.java
0 → 100644
浏览文件 @
8a6d462d
package
com
.
xxl
.
job
.
dao
.
impl
;
import
com.xxl.job.core.biz.model.RegistryParam
;
import
com.xxl.job.core.biz.model.ReturnT
;
import
com.xxl.job.core.enums.RegistryConfig
;
import
com.xxl.job.core.util.AdminApiUtil
;
/**
* Created by xuxueli on 17/5/10.
*/
public
class
AdminApiTest
{
public
static
void
main
(
String
[]
args
)
{
try
{
RegistryParam
registryParam
=
new
RegistryParam
(
RegistryConfig
.
RegistType
.
EXECUTOR
.
name
(),
"aaa"
,
"112312312312"
);
ReturnT
<
String
>
registryResult
=
AdminApiUtil
.
callApi
(
"http://localhost:8080/xxl-job-admin"
+
AdminApiUtil
.
REGISTRY
,
registryParam
);
System
.
out
.
println
(
registryResult
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
}
xxl-job-core/src/main/java/com/xxl/job/core/biz/AdminBiz.java
deleted
100644 → 0
浏览文件 @
66de2818
package
com
.
xxl
.
job
.
core
.
biz
;
import
com.xxl.job.core.biz.model.HandleCallbackParam
;
import
com.xxl.job.core.biz.model.ReturnT
;
/**
* Created by xuxueli on 17/3/1.
*/
public
interface
AdminBiz
{
public
ReturnT
<
String
>
callback
(
HandleCallbackParam
handleCallbackParam
);
}
xxl-job-core/src/main/java/com/xxl/job/core/biz/model/HandleCallbackParam.java
浏览文件 @
8a6d462d
package
com
.
xxl
.
job
.
core
.
biz
.
model
;
package
com
.
xxl
.
job
.
core
.
biz
.
model
;
import
java.io.Serializable
;
import
java.io.Serializable
;
import
java.util.Set
;
/**
/**
* Created by xuxueli on 17/3/2.
* Created by xuxueli on 17/3/2.
...
@@ -10,13 +9,11 @@ public class HandleCallbackParam implements Serializable {
...
@@ -10,13 +9,11 @@ public class HandleCallbackParam implements Serializable {
private
static
final
long
serialVersionUID
=
42L
;
private
static
final
long
serialVersionUID
=
42L
;
private
int
logId
;
private
int
logId
;
private
Set
<
String
>
logAddress
;
private
ReturnT
<
String
>
executeResult
;
private
ReturnT
<
String
>
executeResult
;
public
HandleCallbackParam
(
int
logId
,
Set
<
String
>
logAddress
,
ReturnT
<
String
>
executeResult
)
{
public
HandleCallbackParam
(){}
public
HandleCallbackParam
(
int
logId
,
ReturnT
<
String
>
executeResult
)
{
this
.
logId
=
logId
;
this
.
logId
=
logId
;
this
.
logAddress
=
logAddress
;
this
.
executeResult
=
executeResult
;
this
.
executeResult
=
executeResult
;
}
}
...
@@ -28,14 +25,6 @@ public class HandleCallbackParam implements Serializable {
...
@@ -28,14 +25,6 @@ public class HandleCallbackParam implements Serializable {
this
.
logId
=
logId
;
this
.
logId
=
logId
;
}
}
public
Set
<
String
>
getLogAddress
()
{
return
logAddress
;
}
public
void
setLogAddress
(
Set
<
String
>
logAddress
)
{
this
.
logAddress
=
logAddress
;
}
public
ReturnT
<
String
>
getExecuteResult
()
{
public
ReturnT
<
String
>
getExecuteResult
()
{
return
executeResult
;
return
executeResult
;
}
}
...
@@ -43,4 +32,12 @@ public class HandleCallbackParam implements Serializable {
...
@@ -43,4 +32,12 @@ public class HandleCallbackParam implements Serializable {
public
void
setExecuteResult
(
ReturnT
<
String
>
executeResult
)
{
public
void
setExecuteResult
(
ReturnT
<
String
>
executeResult
)
{
this
.
executeResult
=
executeResult
;
this
.
executeResult
=
executeResult
;
}
}
@Override
public
String
toString
()
{
return
"HandleCallbackParam{"
+
"logId="
+
logId
+
", executeResult="
+
executeResult
+
'}'
;
}
}
}
xxl-job-core/src/main/java/com/xxl/job/core/biz/model/RegistryParam.java
0 → 100644
浏览文件 @
8a6d462d
package
com
.
xxl
.
job
.
core
.
biz
.
model
;
import
java.io.Serializable
;
/**
* Created by xuxueli on 2017-05-10 20:22:42
*/
public
class
RegistryParam
implements
Serializable
{
private
static
final
long
serialVersionUID
=
42L
;
private
String
registGroup
;
private
String
registryKey
;
private
String
registryValue
;
public
RegistryParam
(){}
public
RegistryParam
(
String
registGroup
,
String
registryKey
,
String
registryValue
)
{
this
.
registGroup
=
registGroup
;
this
.
registryKey
=
registryKey
;
this
.
registryValue
=
registryValue
;
}
public
String
getRegistGroup
()
{
return
registGroup
;
}
public
void
setRegistGroup
(
String
registGroup
)
{
this
.
registGroup
=
registGroup
;
}
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
;
}
@Override
public
String
toString
()
{
return
"RegistryParam{"
+
"registGroup='"
+
registGroup
+
'\''
+
", registryKey='"
+
registryKey
+
'\''
+
", registryValue='"
+
registryValue
+
'\''
+
'}'
;
}
}
xxl-job-core/src/main/java/com/xxl/job/core/biz/model/ReturnT.java
浏览文件 @
8a6d462d
...
@@ -19,6 +19,7 @@ public class ReturnT<T> implements Serializable {
...
@@ -19,6 +19,7 @@ public class ReturnT<T> implements Serializable {
private
String
msg
;
private
String
msg
;
private
T
content
;
private
T
content
;
public
ReturnT
(){}
public
ReturnT
(
int
code
,
String
msg
)
{
public
ReturnT
(
int
code
,
String
msg
)
{
this
.
code
=
code
;
this
.
code
=
code
;
this
.
msg
=
msg
;
this
.
msg
=
msg
;
...
...
xxl-job-core/src/main/java/com/xxl/job/core/biz/model/TriggerParam.java
浏览文件 @
8a6d462d
package
com
.
xxl
.
job
.
core
.
biz
.
model
;
package
com
.
xxl
.
job
.
core
.
biz
.
model
;
import
java.io.Serializable
;
import
java.io.Serializable
;
import
java.util.Set
;
/**
/**
* Created by xuxueli on 16/7/22.
* Created by xuxueli on 16/7/22.
...
@@ -22,8 +21,6 @@ public class TriggerParam implements Serializable{
...
@@ -22,8 +21,6 @@ public class TriggerParam implements Serializable{
private
int
logId
;
private
int
logId
;
private
long
logDateTim
;
private
long
logDateTim
;
private
Set
<
String
>
logAddress
;
public
int
getJobId
()
{
public
int
getJobId
()
{
return
jobId
;
return
jobId
;
}
}
...
@@ -96,11 +93,18 @@ public class TriggerParam implements Serializable{
...
@@ -96,11 +93,18 @@ public class TriggerParam implements Serializable{
this
.
logDateTim
=
logDateTim
;
this
.
logDateTim
=
logDateTim
;
}
}
public
Set
<
String
>
getLogAddress
()
{
@Override
return
logAddress
;
public
String
toString
()
{
}
return
"TriggerParam{"
+
"jobId="
+
jobId
+
public
void
setLogAddress
(
Set
<
String
>
logAddress
)
{
", executorHandler='"
+
executorHandler
+
'\''
+
this
.
logAddress
=
logAddress
;
", executorParams='"
+
executorParams
+
'\''
+
", executorBlockStrategy='"
+
executorBlockStrategy
+
'\''
+
", glueType='"
+
glueType
+
'\''
+
", glueSource='"
+
glueSource
+
'\''
+
", glueUpdatetime="
+
glueUpdatetime
+
", logId="
+
logId
+
", logDateTim="
+
logDateTim
+
'}'
;
}
}
}
}
xxl-job-core/src/main/java/com/xxl/job/core/enums/RegistryConfig.java
0 → 100644
浏览文件 @
8a6d462d
package
com
.
xxl
.
job
.
core
.
enums
;
/**
* Created by xuxueli on 17/5/10.
*/
public
class
RegistryConfig
{
public
static
final
int
BEAT_TIMEOUT
=
30
;
public
static
final
int
DEAD_TIMEOUT
=
BEAT_TIMEOUT
*
3
;
public
enum
RegistType
{
EXECUTOR
,
ADMIN
}
}
xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java
浏览文件 @
8a6d462d
...
@@ -4,7 +4,6 @@ import com.xxl.job.core.biz.ExecutorBiz;
...
@@ -4,7 +4,6 @@ import com.xxl.job.core.biz.ExecutorBiz;
import
com.xxl.job.core.biz.impl.ExecutorBizImpl
;
import
com.xxl.job.core.biz.impl.ExecutorBizImpl
;
import
com.xxl.job.core.handler.IJobHandler
;
import
com.xxl.job.core.handler.IJobHandler
;
import
com.xxl.job.core.handler.annotation.JobHander
;
import
com.xxl.job.core.handler.annotation.JobHander
;
import
com.xxl.job.core.registry.RegistHelper
;
import
com.xxl.job.core.rpc.netcom.NetComServerFactory
;
import
com.xxl.job.core.rpc.netcom.NetComServerFactory
;
import
com.xxl.job.core.thread.ExecutorRegistryThread
;
import
com.xxl.job.core.thread.ExecutorRegistryThread
;
import
com.xxl.job.core.thread.JobThread
;
import
com.xxl.job.core.thread.JobThread
;
...
@@ -30,7 +29,7 @@ public class XxlJobExecutor implements ApplicationContextAware, ApplicationListe
...
@@ -30,7 +29,7 @@ public class XxlJobExecutor implements ApplicationContextAware, ApplicationListe
private
String
ip
;
private
String
ip
;
private
int
port
=
9999
;
private
int
port
=
9999
;
private
String
appName
;
private
String
appName
;
p
rivate
RegistHelper
registHelper
;
p
ublic
static
String
adminAddresses
;
public
static
String
logPath
;
public
static
String
logPath
;
public
void
setIp
(
String
ip
)
{
public
void
setIp
(
String
ip
)
{
...
@@ -42,8 +41,8 @@ public class XxlJobExecutor implements ApplicationContextAware, ApplicationListe
...
@@ -42,8 +41,8 @@ public class XxlJobExecutor implements ApplicationContextAware, ApplicationListe
public
void
setAppName
(
String
appName
)
{
public
void
setAppName
(
String
appName
)
{
this
.
appName
=
appName
;
this
.
appName
=
appName
;
}
}
public
void
set
RegistHelper
(
RegistHelper
registHelper
)
{
public
void
set
AdminAddresses
(
String
adminAddresses
)
{
this
.
registHelper
=
registHelper
;
this
.
adminAddresses
=
adminAddresses
;
}
}
public
void
setLogPath
(
String
logPath
)
{
public
void
setLogPath
(
String
logPath
)
{
this
.
logPath
=
logPath
;
this
.
logPath
=
logPath
;
...
@@ -54,7 +53,7 @@ public class XxlJobExecutor implements ApplicationContextAware, ApplicationListe
...
@@ -54,7 +53,7 @@ public class XxlJobExecutor implements ApplicationContextAware, ApplicationListe
public
void
start
()
throws
Exception
{
public
void
start
()
throws
Exception
{
// executor start
// executor start
NetComServerFactory
.
putService
(
ExecutorBiz
.
class
,
new
ExecutorBizImpl
());
NetComServerFactory
.
putService
(
ExecutorBiz
.
class
,
new
ExecutorBizImpl
());
serverFactory
.
start
(
port
,
ip
,
appName
,
registHelper
);
serverFactory
.
start
(
port
,
ip
,
appName
);
// trigger callback thread start
// trigger callback thread start
TriggerCallbackThread
.
getInstance
().
start
();
TriggerCallbackThread
.
getInstance
().
start
();
...
...
xxl-job-core/src/main/java/com/xxl/job/core/registry/RegistHelper.java
deleted
100644 → 0
浏览文件 @
66de2818
package
com
.
xxl
.
job
.
core
.
registry
;
/**
* Created by xuxueli on 16/9/30.
*/
public
interface
RegistHelper
{
public
static
final
int
TIMEOUT
=
15
;
public
enum
RegistType
{
EXECUTOR
,
ADMIN
}
public
int
registry
(
String
registGroup
,
String
registryKey
,
String
registryValue
);
}
xxl-job-core/src/main/java/com/xxl/job/core/registry/impl/DbRegistHelper.java
deleted
100644 → 0
浏览文件 @
66de2818
package
com
.
xxl
.
job
.
core
.
registry
.
impl
;
import
com.xxl.job.core.registry.RegistHelper
;
import
com.xxl.job.core.util.DBUtil
;
import
javax.sql.DataSource
;
/**
* Created by xuxueli on 16/9/30.
*/
public
class
DbRegistHelper
implements
RegistHelper
{
private
DataSource
dataSource
;
public
void
setDataSource
(
DataSource
dataSource
)
{
this
.
dataSource
=
dataSource
;
}
@Override
public
int
registry
(
String
registGroup
,
String
registryKey
,
String
registryValue
)
{
String
updateSql
=
"UPDATE XXL_JOB_QRTZ_TRIGGER_REGISTRY SET `update_time` = NOW() WHERE `registry_group` = ? AND `registry_key` = ? AND `registry_value` = ?"
;
String
insertSql
=
"INSERT INTO XXL_JOB_QRTZ_TRIGGER_REGISTRY( `registry_group` , `registry_key` , `registry_value`, `update_time`) VALUES(? , ? , ?, NOW())"
;
int
ret
=
DBUtil
.
update
(
dataSource
,
updateSql
,
new
Object
[]{
registGroup
,
registryKey
,
registryValue
});
if
(
ret
<
1
)
{
ret
=
DBUtil
.
update
(
dataSource
,
insertSql
,
new
Object
[]{
registGroup
,
registryKey
,
registryValue
});
}
return
ret
;
}
}
xxl-job-core/src/main/java/com/xxl/job/core/rpc/netcom/NetComServerFactory.java
浏览文件 @
8a6d462d
package
com
.
xxl
.
job
.
core
.
rpc
.
netcom
;
package
com
.
xxl
.
job
.
core
.
rpc
.
netcom
;
import
com.xxl.job.core.biz.model.ReturnT
;
import
com.xxl.job.core.biz.model.ReturnT
;
import
com.xxl.job.core.registry.RegistHelper
;
import
com.xxl.job.core.rpc.codec.RpcRequest
;
import
com.xxl.job.core.rpc.codec.RpcRequest
;
import
com.xxl.job.core.rpc.codec.RpcResponse
;
import
com.xxl.job.core.rpc.codec.RpcResponse
;
import
com.xxl.job.core.rpc.netcom.jetty.server.JettyServer
;
import
com.xxl.job.core.rpc.netcom.jetty.server.JettyServer
;
...
@@ -22,8 +21,8 @@ public class NetComServerFactory {
...
@@ -22,8 +21,8 @@ public class NetComServerFactory {
// ---------------------- server start ----------------------
// ---------------------- server start ----------------------
JettyServer
server
=
new
JettyServer
();
JettyServer
server
=
new
JettyServer
();
public
void
start
(
int
port
,
String
ip
,
String
appName
,
RegistHelper
registHelper
)
throws
Exception
{
public
void
start
(
int
port
,
String
ip
,
String
appName
)
throws
Exception
{
server
.
start
(
port
,
ip
,
appName
,
registHelper
);
server
.
start
(
port
,
ip
,
appName
);
}
}
// ---------------------- server destroy ----------------------
// ---------------------- server destroy ----------------------
...
...
xxl-job-core/src/main/java/com/xxl/job/core/rpc/netcom/jetty/server/JettyServer.java
浏览文件 @
8a6d462d
package
com
.
xxl
.
job
.
core
.
rpc
.
netcom
.
jetty
.
server
;
package
com
.
xxl
.
job
.
core
.
rpc
.
netcom
.
jetty
.
server
;
import
com.xxl.job.core.registry.RegistHelper
;
import
com.xxl.job.core.thread.ExecutorRegistryThread
;
import
com.xxl.job.core.thread.ExecutorRegistryThread
;
import
org.eclipse.jetty.server.Connector
;
import
org.eclipse.jetty.server.Connector
;
import
org.eclipse.jetty.server.Handler
;
import
org.eclipse.jetty.server.Handler
;
...
@@ -20,7 +19,7 @@ public class JettyServer {
...
@@ -20,7 +19,7 @@ public class JettyServer {
private
Server
server
;
private
Server
server
;
private
Thread
thread
;
private
Thread
thread
;
public
void
start
(
final
int
port
,
final
String
ip
,
final
String
appName
,
final
RegistHelper
registHelper
)
throws
Exception
{
public
void
start
(
final
int
port
,
final
String
ip
,
final
String
appName
)
throws
Exception
{
thread
=
new
Thread
(
new
Runnable
()
{
thread
=
new
Thread
(
new
Runnable
()
{
@Override
@Override
public
void
run
()
{
public
void
run
()
{
...
@@ -42,7 +41,7 @@ public class JettyServer {
...
@@ -42,7 +41,7 @@ public class JettyServer {
// Start the server
// Start the server
server
.
start
();
server
.
start
();
logger
.
info
(
">>>>>>>>>>>> xxl-job jetty server start success at port:{}."
,
port
);
logger
.
info
(
">>>>>>>>>>>> xxl-job jetty server start success at port:{}."
,
port
);
ExecutorRegistryThread
.
getInstance
().
start
(
port
,
ip
,
appName
,
registHelper
);
ExecutorRegistryThread
.
getInstance
().
start
(
port
,
ip
,
appName
);
server
.
join
();
// block until thread stopped
server
.
join
();
// block until thread stopped
logger
.
info
(
">>>>>>>>>>> xxl-rpc server join success, netcon={}, port={}"
,
JettyServer
.
class
.
getName
(),
port
);
logger
.
info
(
">>>>>>>>>>> xxl-rpc server join success, netcon={}, port={}"
,
JettyServer
.
class
.
getName
(),
port
);
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
...
...
xxl-job-core/src/main/java/com/xxl/job/core/thread/ExecutorRegistryThread.java
浏览文件 @
8a6d462d
package
com
.
xxl
.
job
.
core
.
thread
;
package
com
.
xxl
.
job
.
core
.
thread
;
import
com.xxl.job.core.registry.RegistHelper
;
import
com.xxl.job.core.biz.model.RegistryParam
;
import
com.xxl.job.core.biz.model.ReturnT
;
import
com.xxl.job.core.enums.RegistryConfig
;
import
com.xxl.job.core.util.AdminApiUtil
;
import
com.xxl.job.core.util.IpUtil
;
import
com.xxl.job.core.util.IpUtil
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
java.util.concurrent.TimeUnit
;
import
java.util.concurrent.TimeUnit
;
...
@@ -9,6 +14,7 @@ import java.util.concurrent.TimeUnit;
...
@@ -9,6 +14,7 @@ import java.util.concurrent.TimeUnit;
* Created by xuxueli on 17/3/2.
* Created by xuxueli on 17/3/2.
*/
*/
public
class
ExecutorRegistryThread
extends
Thread
{
public
class
ExecutorRegistryThread
extends
Thread
{
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
ExecutorRegistryThread
.
class
);
private
static
ExecutorRegistryThread
instance
=
new
ExecutorRegistryThread
();
private
static
ExecutorRegistryThread
instance
=
new
ExecutorRegistryThread
();
public
static
ExecutorRegistryThread
getInstance
(){
public
static
ExecutorRegistryThread
getInstance
(){
...
@@ -17,27 +23,36 @@ public class ExecutorRegistryThread extends Thread {
...
@@ -17,27 +23,36 @@ public class ExecutorRegistryThread extends Thread {
private
Thread
registryThread
;
private
Thread
registryThread
;
private
boolean
toStop
=
false
;
private
boolean
toStop
=
false
;
public
void
start
(
final
int
port
,
final
String
ip
,
final
String
appName
,
final
RegistHelper
registHelper
){
public
void
start
(
final
int
port
,
final
String
ip
,
final
String
appName
){
if
(
registHelper
==
null
&&
appName
==
null
||
appName
.
trim
().
length
()==
0
)
{
if
(
appName
==
null
||
appName
.
trim
().
length
()==
0
)
{
logger
.
warn
(
">>>>>>>>>>>> xxl-job, executor registry config fail"
);
return
;
return
;
}
}
// executor address (generate addredd = ip:port)
final
String
executorAddress
;
if
(
ip
!=
null
&&
ip
.
trim
().
length
()>
0
)
{
executorAddress
=
ip
.
trim
().
concat
(
":"
).
concat
(
String
.
valueOf
(
port
));
}
else
{
executorAddress
=
IpUtil
.
getIpPort
(
port
);
}
registryThread
=
new
Thread
(
new
Runnable
()
{
registryThread
=
new
Thread
(
new
Runnable
()
{
@Override
@Override
public
void
run
()
{
public
void
run
()
{
while
(!
toStop
)
{
while
(!
toStop
)
{
try
{
try
{
// generate addredd = ip:port
RegistryParam
registryParam
=
new
RegistryParam
(
RegistryConfig
.
RegistType
.
EXECUTOR
.
name
(),
appName
,
executorAddress
);
String
address
=
null
;
ReturnT
<
String
>
registryResult
=
AdminApiUtil
.
callApiFailover
(
AdminApiUtil
.
REGISTRY
,
registryParam
);
if
(
ip
!=
null
&&
ip
.
trim
().
length
()>
0
)
{
logger
.
info
(
">>>>>>>>>>> xxl-job registry, RegistryParam:{}, registryResult:{}"
,
new
Object
[]{
registryParam
.
toString
(),
registryResult
.
toString
()});
address
=
ip
.
trim
().
concat
(
":"
).
concat
(
String
.
valueOf
(
port
));
}
catch
(
Exception
e
)
{
}
else
{
logger
.
error
(
">>>>>>>>>>> xxl-job ExecutorRegistryThread Exception:"
,
e
);
address
=
IpUtil
.
getIpPort
(
port
);
}
}
registHelper
.
registry
(
RegistHelper
.
RegistType
.
EXECUTOR
.
name
(),
appName
,
address
);
try
{
TimeUnit
.
SECONDS
.
sleep
(
Regist
Helper
.
TIMEOUT
);
TimeUnit
.
SECONDS
.
sleep
(
Regist
ryConfig
.
BEAT_
TIMEOUT
);
}
catch
(
Exception
e
)
{
}
catch
(
Interrupted
Exception
e
)
{
e
.
printStackTrace
(
);
logger
.
error
(
e
.
getMessage
(),
e
);
}
}
}
}
}
}
...
...
xxl-job-core/src/main/java/com/xxl/job/core/thread/JobThread.java
浏览文件 @
8a6d462d
...
@@ -131,11 +131,11 @@ public class JobThread extends Thread{
...
@@ -131,11 +131,11 @@ public class JobThread extends Thread{
// callback handler info
// callback handler info
if
(!
toStop
)
{
if
(!
toStop
)
{
// commonm
// commonm
TriggerCallbackThread
.
pushCallBack
(
new
HandleCallbackParam
(
triggerParam
.
getLogId
(),
triggerParam
.
getLogAddress
(),
executeResult
));
TriggerCallbackThread
.
pushCallBack
(
new
HandleCallbackParam
(
triggerParam
.
getLogId
(),
executeResult
));
}
else
{
}
else
{
// is killed
// is killed
ReturnT
<
String
>
stopResult
=
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
stopReason
+
" [业务运行中,被强制终止]"
);
ReturnT
<
String
>
stopResult
=
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
stopReason
+
" [业务运行中,被强制终止]"
);
TriggerCallbackThread
.
pushCallBack
(
new
HandleCallbackParam
(
triggerParam
.
getLogId
(),
triggerParam
.
getLogAddress
(),
stopResult
));
TriggerCallbackThread
.
pushCallBack
(
new
HandleCallbackParam
(
triggerParam
.
getLogId
(),
stopResult
));
}
}
}
}
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
...
@@ -156,7 +156,7 @@ public class JobThread extends Thread{
...
@@ -156,7 +156,7 @@ public class JobThread extends Thread{
if
(
triggerParam
!=
null
)
{
if
(
triggerParam
!=
null
)
{
// is killed
// is killed
ReturnT
<
String
>
stopResult
=
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
stopReason
+
" [任务尚未执行,在调度队列中被终止]"
);
ReturnT
<
String
>
stopResult
=
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
stopReason
+
" [任务尚未执行,在调度队列中被终止]"
);
TriggerCallbackThread
.
pushCallBack
(
new
HandleCallbackParam
(
triggerParam
.
getLogId
(),
triggerParam
.
getLogAddress
(),
stopResult
));
TriggerCallbackThread
.
pushCallBack
(
new
HandleCallbackParam
(
triggerParam
.
getLogId
(),
stopResult
));
}
}
}
}
...
...
xxl-job-core/src/main/java/com/xxl/job/core/thread/TriggerCallbackThread.java
浏览文件 @
8a6d462d
package
com
.
xxl
.
job
.
core
.
thread
;
package
com
.
xxl
.
job
.
core
.
thread
;
import
com.xxl.job.core.biz.AdminBiz
;
import
com.xxl.job.core.biz.model.HandleCallbackParam
;
import
com.xxl.job.core.biz.model.HandleCallbackParam
;
import
com.xxl.job.core.biz.model.ReturnT
;
import
com.xxl.job.core.biz.model.ReturnT
;
import
com.xxl.job.core.
rpc.netcom.NetComClientProxy
;
import
com.xxl.job.core.
util.AdminApiUtil
;
import
org.slf4j.Logger
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.slf4j.LoggerFactory
;
...
@@ -33,21 +32,14 @@ public class TriggerCallbackThread {
...
@@ -33,21 +32,14 @@ public class TriggerCallbackThread {
try
{
try
{
HandleCallbackParam
callback
=
getInstance
().
callBackQueue
.
take
();
HandleCallbackParam
callback
=
getInstance
().
callBackQueue
.
take
();
if
(
callback
!=
null
)
{
if
(
callback
!=
null
)
{
for
(
String
address
:
callback
.
getLogAddress
())
{
try
{
// callback
// callback
AdminBiz
adminBiz
=
(
AdminBiz
)
new
NetComClientProxy
(
AdminBiz
.
class
,
address
).
getObject
();
try
{
ReturnT
<
String
>
callbackResult
=
adminBiz
.
callback
(
callback
);
ReturnT
<
String
>
callbackResult
=
AdminApiUtil
.
callApiFailover
(
AdminApiUtil
.
CALLBACK
,
callback
);
logger
.
info
(
">>>>>>>>>>> xxl-job callback, HandleCallbackParam:{}, callbackResult:{}"
,
new
Object
[]{
callback
.
toString
(),
callbackResult
.
toString
()});
logger
.
info
(
">>>>>>>>>>> xxl-job callback , CallbackParam:{}, callbackResult:{}"
,
new
Object
[]{
callback
.
toString
(),
callbackResult
.
toString
()});
if
(
ReturnT
.
SUCCESS_CODE
==
callbackResult
.
getCode
())
{
break
;
}
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
logger
.
error
(
">>>>>>>>>>> xxl-job TriggerCallbackThread Exception:"
,
e
);
logger
.
error
(
">>>>>>>>>>> xxl-job TriggerCallbackThread Exception:"
,
e
);
}
}
}
}
}
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
logger
.
error
(
""
,
e
);
logger
.
error
(
""
,
e
);
}
}
...
...
xxl-job-core/src/main/java/com/xxl/job/core/util/AdminApiUtil.java
0 → 100644
浏览文件 @
8a6d462d
package
com
.
xxl
.
job
.
core
.
util
;
import
com.xxl.job.core.biz.model.ReturnT
;
import
com.xxl.job.core.executor.XxlJobExecutor
;
import
org.apache.http.HttpEntity
;
import
org.apache.http.HttpResponse
;
import
org.apache.http.client.config.RequestConfig
;
import
org.apache.http.client.methods.HttpPost
;
import
org.apache.http.entity.StringEntity
;
import
org.apache.http.impl.client.CloseableHttpClient
;
import
org.apache.http.impl.client.HttpClients
;
import
org.apache.http.util.EntityUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* @author xuxueli 2017-05-10 21:28:15
*/
public
class
AdminApiUtil
{
private
static
Logger
logger
=
LoggerFactory
.
getLogger
(
AdminApiUtil
.
class
);
public
static
final
String
CALLBACK
=
"/api/callback"
;
public
static
final
String
REGISTRY
=
"/api/registry"
;
public
static
ReturnT
<
String
>
callApiFailover
(
String
subUrl
,
Object
requestObj
)
throws
Exception
{
// admin assress list
List
<
String
>
adminAddressList
=
new
ArrayList
<
String
>();
if
(
XxlJobExecutor
.
adminAddresses
!=
null
)
{
for
(
String
adminAddressItem:
XxlJobExecutor
.
adminAddresses
.
split
(
","
))
{
if
(
adminAddressItem
.
trim
().
length
()>
0
&&
!
adminAddressList
.
contains
(
adminAddressItem
))
{
adminAddressList
.
add
(
adminAddressItem
);
}
}
}
if
(
adminAddressList
==
null
||
adminAddressList
.
size
()==
0
)
{
return
ReturnT
.
FAIL
;
}
for
(
String
adminAddress:
adminAddressList
)
{
ReturnT
<
String
>
registryResult
=
null
;
try
{
String
apiUrl
=
adminAddress
.
concat
(
subUrl
);
registryResult
=
callApi
(
apiUrl
,
requestObj
);
}
catch
(
Exception
e
)
{
logger
.
error
(
e
.
getMessage
(),
e
);
}
if
(
registryResult
!=
null
&&
registryResult
.
getCode
()==
ReturnT
.
SUCCESS_CODE
)
{
return
ReturnT
.
SUCCESS
;
}
}
return
ReturnT
.
FAIL
;
}
public
static
ReturnT
<
String
>
callApi
(
String
finalUrl
,
Object
requestObj
)
throws
Exception
{
HttpPost
httpPost
=
new
HttpPost
(
finalUrl
);
CloseableHttpClient
httpClient
=
HttpClients
.
createDefault
();
try
{
// timeout
RequestConfig
requestConfig
=
RequestConfig
.
custom
()
.
setConnectionRequestTimeout
(
10000
)
.
setSocketTimeout
(
10000
)
.
setConnectTimeout
(
10000
)
.
build
();
httpPost
.
setConfig
(
requestConfig
);
// data
if
(
requestObj
!=
null
)
{
String
json
=
JacksonUtil
.
writeValueAsString
(
requestObj
);
StringEntity
entity
=
new
StringEntity
(
json
,
"utf-8"
);
entity
.
setContentEncoding
(
"UTF-8"
);
entity
.
setContentType
(
"application/json"
);
httpPost
.
setEntity
(
entity
);
}
// do post
HttpResponse
response
=
httpClient
.
execute
(
httpPost
);
HttpEntity
entity
=
response
.
getEntity
();
if
(
null
!=
entity
)
{
if
(
response
.
getStatusLine
().
getStatusCode
()
!=
200
)
{
EntityUtils
.
consume
(
entity
);
return
ReturnT
.
FAIL
;
}
String
responseMsg
=
EntityUtils
.
toString
(
entity
,
"UTF-8"
);
EntityUtils
.
consume
(
entity
);
if
(
responseMsg
!=
null
&&
responseMsg
.
startsWith
(
"{"
))
{
ReturnT
<
String
>
result
=
JacksonUtil
.
readValue
(
responseMsg
,
ReturnT
.
class
);
return
result
;
}
}
return
ReturnT
.
FAIL
;
}
catch
(
Exception
e
)
{
logger
.
error
(
""
,
e
);
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
e
.
getMessage
());
}
finally
{
if
(
httpPost
!=
null
)
{
httpPost
.
releaseConnection
();
}
try
{
httpClient
.
close
();
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
}
}
}
xxl-job-core/src/main/java/com/xxl/job/core/util/HttpClientUtil.java
浏览文件 @
8a6d462d
xxl-job-core/src/main/java/com/xxl/job/core/util/JacksonUtil.java
0 → 100644
浏览文件 @
8a6d462d
package
com
.
xxl
.
job
.
core
.
util
;
import
org.codehaus.jackson.JsonGenerationException
;
import
org.codehaus.jackson.JsonParseException
;
import
org.codehaus.jackson.map.JsonMappingException
;
import
org.codehaus.jackson.map.ObjectMapper
;
import
org.codehaus.jackson.type.TypeReference
;
import
java.io.IOException
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* Jackson util
*
* 1、obj need private and set/get;
* 2、do not support inner class;
*
* @author xuxueli 2015-9-25 18:02:56
*/
public
class
JacksonUtil
{
private
final
static
ObjectMapper
objectMapper
=
new
ObjectMapper
();
public
static
ObjectMapper
getInstance
()
{
return
objectMapper
;
}
/**
* bean、array、List、Map --> json
*
* @param obj
* @return json string
* @throws Exception
*/
public
static
String
writeValueAsString
(
Object
obj
)
{
try
{
return
getInstance
().
writeValueAsString
(
obj
);
}
catch
(
JsonGenerationException
e
)
{
e
.
printStackTrace
();
}
catch
(
JsonMappingException
e
)
{
e
.
printStackTrace
();
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
return
null
;
}
/**
* string --> bean、Map、List(array)
*
* @param jsonStr
* @param clazz
* @return obj
* @throws Exception
*/
public
static
<
T
>
T
readValue
(
String
jsonStr
,
Class
<
T
>
clazz
)
{
try
{
return
getInstance
().
readValue
(
jsonStr
,
clazz
);
}
catch
(
JsonParseException
e
)
{
e
.
printStackTrace
();
}
catch
(
JsonMappingException
e
)
{
e
.
printStackTrace
();
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
return
null
;
}
public
static
<
T
>
T
readValueRefer
(
String
jsonStr
,
Class
<
T
>
clazz
)
{
try
{
return
getInstance
().
readValue
(
jsonStr
,
new
TypeReference
<
T
>()
{
});
}
catch
(
JsonParseException
e
)
{
e
.
printStackTrace
();
}
catch
(
JsonMappingException
e
)
{
e
.
printStackTrace
();
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
return
null
;
}
public
static
void
main
(
String
[]
args
)
{
try
{
Map
<
String
,
String
>
map
=
new
HashMap
<
String
,
String
>();
map
.
put
(
"aaa"
,
"111"
);
map
.
put
(
"bbb"
,
"222"
);
String
json
=
writeValueAsString
(
map
);
System
.
out
.
println
(
json
);
System
.
out
.
println
(
readValue
(
json
,
Map
.
class
));
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
}
xxl-job-executor-example/src/main/resources/applicationcontext-xxl-job.xml
浏览文件 @
8a6d462d
...
@@ -27,34 +27,13 @@
...
@@ -27,34 +27,13 @@
<property
name=
"ip"
value=
"${xxl.job.executor.ip}"
/>
<property
name=
"ip"
value=
"${xxl.job.executor.ip}"
/>
<!-- 执行器端口号 -->
<!-- 执行器端口号 -->
<property
name=
"port"
value=
"${xxl.job.executor.port}"
/>
<property
name=
"port"
value=
"${xxl.job.executor.port}"
/>
<!-- 执行器AppName,为空则关闭自动注册 -->
<property
name=
"appName"
value=
"${xxl.job.executor.appname}"
/>
<property
name=
"appName"
value=
"${xxl.job.executor.appname}"
/>
<!-- 执行器注册器 -->
<!-- 执行器注册中心地址,为空则关闭自动注册 -->
<property
name=
"registHelper"
>
<property
name=
"adminAddresses"
value=
"${xxl.job.admin.addresses}"
/>
<!-- 执行器 "DbRegistHelper" 依赖 "XXL-JOB公共数据源" ;推荐将其抽象为RPC远程服务, 可取消对JDBC的依赖;如不启用执行自动注册功能,也可忽略JDBC配置; -->
<!-- 执行器日志路径 -->
<bean
class=
"com.xxl.job.core.registry.impl.DbRegistHelper"
>
<!-- XXL-JOB公共数据源 -->
<property
name=
"dataSource"
ref=
"xxlJobDataSource"
/>
</bean>
</property>
<property
name=
"logPath"
value=
"${xxl.job.executor.logpath}"
/>
<property
name=
"logPath"
value=
"${xxl.job.executor.logpath}"
/>
</bean>
</bean>
<!-- ********************************* "XXL-JOB公共数据源" 配置, 仅在启动 "DbRegistHelper" 时才需要, 否则可删除 ********************************* -->
<!-- 配置03、XXL-JOB公共数据源 -->
<bean
id=
"xxlJobDataSource"
class=
"com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method=
"close"
>
<property
name=
"driverClass"
value=
"${xxl.job.db.driverClass}"
/>
<property
name=
"jdbcUrl"
value=
"${xxl.job.db.url}"
/>
<property
name=
"user"
value=
"${xxl.job.db.user}"
/>
<property
name=
"password"
value=
"${xxl.job.db.password}"
/>
<property
name=
"initialPoolSize"
value=
"3"
/>
<property
name=
"minPoolSize"
value=
"2"
/>
<property
name=
"maxPoolSize"
value=
"10"
/>
<property
name=
"maxIdleTime"
value=
"60"
/>
<property
name=
"acquireRetryDelay"
value=
"1000"
/>
<property
name=
"acquireRetryAttempts"
value=
"10"
/>
<property
name=
"preferredTestQuery"
value=
"SELECT 1"
/>
</bean>
</beans>
</beans>
\ No newline at end of file
xxl-job-executor-example/src/main/resources/xxl-job-executor.properties
浏览文件 @
8a6d462d
### xxl-job db
### xxl-job admin address, such as "http://host01:port01/project,http://host02:port02/project"
xxl.job.db.driverClass
=
com.mysql.jdbc.Driver
xxl.job.admin.addresses
=
http://127.0.0.1:8080/xxl-job-admin
xxl.job.db.url
=
jdbc:mysql://localhost:3306/xxl-job?useUnicode=true&characterEncoding=UTF-8
xxl.job.db.user
=
root
xxl.job.db.password
=
root_pwd
### xxl-job executor address
### xxl-job executor address
xxl.job.executor.appname
=
xxl-job-executor-example
xxl.job.executor.appname
=
xxl-job-executor-example
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论