Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
X
XXL-JOB
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
靳帅
XXL-JOB
Commits
65cfe57b
提交
65cfe57b
authored
1月 21, 2017
作者:
xueli.xue
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
执行器、调度中心,支持自定义注册IP地址;解决机器多网卡时错误网卡注册的情况;
上级
c86d7d1c
隐藏空白字符变更
内嵌
并排
正在显示
8 个修改的文件
包含
43 行增加
和
18 行删除
+43
-18
README.md
README.md
+1
-0
XxlJobLogCallbackServer.java
.../xxl/job/admin/core/callback/XxlJobLogCallbackServer.java
+0
-10
RemoteHttpJobBean.java
...ava/com/xxl/job/admin/core/jobbean/RemoteHttpJobBean.java
+1
-2
JobRegistryHelper.java
...java/com/xxl/job/admin/core/thread/JobRegistryHelper.java
+2
-3
DynamicSchedulerUtil.java
...ava/com/xxl/job/admin/core/util/DynamicSchedulerUtil.java
+19
-2
applicationcontext-xxl-job.xml
...b-admin/src/main/resources/applicationcontext-xxl-job.xml
+4
-0
XxlJobExecutor.java
.../java/com/xxl/job/core/executor/jetty/XxlJobExecutor.java
+14
-1
applicationcontext-xxl-job.xml
...example/src/main/resources/applicationcontext-xxl-job.xml
+2
-0
没有找到文件。
README.md
浏览文件 @
65cfe57b
...
...
@@ -702,6 +702,7 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
#### 6.10 版本 V1.5.2 特性
-
1、IP工具类优化,IP静态缓存;
-
2、执行器、调度中心,支持自定义注册IP地址;解决机器多网卡时错误网卡注册的情况;
#### 规划中
-
1、集群执行器选择规则自定义:单点=选择第一个,随机=随机选择一个;
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/core/callback/XxlJobLogCallbackServer.java
浏览文件 @
65cfe57b
...
...
@@ -9,25 +9,15 @@ import org.eclipse.jetty.util.thread.ExecutorThreadPool;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
com.xxl.job.core.util.IpUtil
;
/**
* Created by xuxueli on 2016-5-22 11:15:42
*/
public
class
XxlJobLogCallbackServer
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
XxlJobLogCallbackServer
.
class
);
private
static
String
trigger_log_address
;
public
static
String
getTrigger_log_address
()
{
return
trigger_log_address
;
}
Server
server
=
null
;
public
void
start
(
int
callBackPort
)
throws
Exception
{
// init address
trigger_log_address
=
IpUtil
.
getIpPort
(
callBackPort
);
final
int
port
=
Integer
.
valueOf
(
callBackPort
);
new
Thread
(
new
Runnable
()
{
@Override
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/core/jobbean/RemoteHttpJobBean.java
浏览文件 @
65cfe57b
package
com
.
xxl
.
job
.
admin
.
core
.
jobbean
;
import
com.xxl.job.admin.core.callback.XxlJobLogCallbackServer
;
import
com.xxl.job.admin.core.model.XxlJobGroup
;
import
com.xxl.job.admin.core.model.XxlJobInfo
;
import
com.xxl.job.admin.core.model.XxlJobLog
;
...
...
@@ -51,7 +50,7 @@ public class RemoteHttpJobBean extends QuartzJobBean {
if
(
adminAddressList
!=
null
)
{
adminAddressSet
.
addAll
(
adminAddressList
);
}
adminAddressSet
.
add
(
XxlJobLogCallbackServer
.
getTrigger_log_a
ddress
());
adminAddressSet
.
add
(
DynamicSchedulerUtil
.
getCallbackA
ddress
());
// trigger request
RequestModel
requestModel
=
new
RequestModel
();
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobRegistryHelper.java
浏览文件 @
65cfe57b
package
com
.
xxl
.
job
.
admin
.
core
.
thread
;
import
com.xxl.job.admin.core.callback.XxlJobLogCallbackServer
;
import
com.xxl.job.admin.core.model.XxlJobRegistry
;
import
com.xxl.job.admin.core.util.DynamicSchedulerUtil
;
import
com.xxl.job.core.registry.RegistHelper
;
...
...
@@ -29,9 +28,9 @@ public class JobRegistryHelper {
while
(
true
)
{
try
{
// registry admin
int
ret
=
DynamicSchedulerUtil
.
xxlJobRegistryDao
.
registryUpdate
(
RegistHelper
.
RegistType
.
ADMIN
.
name
(),
RegistHelper
.
RegistType
.
ADMIN
.
name
(),
XxlJobLogCallbackServer
.
getTrigger_log_a
ddress
());
int
ret
=
DynamicSchedulerUtil
.
xxlJobRegistryDao
.
registryUpdate
(
RegistHelper
.
RegistType
.
ADMIN
.
name
(),
RegistHelper
.
RegistType
.
ADMIN
.
name
(),
DynamicSchedulerUtil
.
getCallbackA
ddress
());
if
(
ret
<
1
)
{
DynamicSchedulerUtil
.
xxlJobRegistryDao
.
registrySave
(
RegistHelper
.
RegistType
.
ADMIN
.
name
(),
RegistHelper
.
RegistType
.
ADMIN
.
name
(),
XxlJobLogCallbackServer
.
getTrigger_log_a
ddress
());
DynamicSchedulerUtil
.
xxlJobRegistryDao
.
registrySave
(
RegistHelper
.
RegistType
.
ADMIN
.
name
(),
RegistHelper
.
RegistType
.
ADMIN
.
name
(),
DynamicSchedulerUtil
.
getCallbackA
ddress
());
}
// fresh registry map
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/core/util/DynamicSchedulerUtil.java
浏览文件 @
65cfe57b
...
...
@@ -8,6 +8,7 @@ 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.IXxlJobRegistryDao
;
import
com.xxl.job.core.util.IpUtil
;
import
org.quartz.*
;
import
org.quartz.Trigger.TriggerState
;
import
org.quartz.impl.matchers.GroupMatcher
;
...
...
@@ -35,12 +36,21 @@ public final class DynamicSchedulerUtil implements ApplicationContextAware, Init
DynamicSchedulerUtil
.
scheduler
=
scheduler
;
}
// trigger callback port
// 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
XxlJobLogCallbackServer
xxlJobLogCallbackServer
=
null
;
public
void
init
(){
...
...
@@ -52,6 +62,13 @@ public final class DynamicSchedulerUtil implements ApplicationContextAware, Init
e
.
printStackTrace
();
}
// init callbackAddress
if
(
callBackIp
!=
null
&&
callBackIp
.
trim
().
length
()>
0
)
{
callbackAddress
=
callBackIp
.
trim
().
concat
(
":"
).
concat
(
String
.
valueOf
(
callBackPort
));
}
else
{
callbackAddress
=
IpUtil
.
getIpPort
(
callBackPort
);;
}
// init JobRegistryHelper
JobRegistryHelper
.
discover
(
"g"
,
"k"
);
}
...
...
xxl-job-admin/src/main/resources/applicationcontext-xxl-job.xml
浏览文件 @
65cfe57b
...
...
@@ -4,6 +4,7 @@
xsi:schemaLocation=
"http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"
>
<!-- quartz-调度器 -->
<bean
id=
"quartzScheduler"
lazy-init=
"false"
class=
"org.springframework.scheduling.quartz.SchedulerFactoryBean"
>
<property
name=
"dataSource"
ref=
"dataSource"
/>
<property
name=
"autoStartup"
value=
"true"
/>
<!--自动启动 -->
...
...
@@ -16,6 +17,9 @@
<bean
id=
"dynamicSchedulerUtil"
class=
"com.xxl.job.admin.core.util.DynamicSchedulerUtil"
init-method=
"init"
destroy-method=
"destroy"
>
<!-- (轻易不要变更“调度器名称”, 任务创建时会绑定该“调度器名称”) -->
<property
name=
"scheduler"
ref=
"quartzScheduler"
/>
<!-- 调度中心回调IP[选填],为空则自动获取 -->
<property
name=
"callBackIp"
value=
""
/>
<!-- 调度中心回调端口号 -->
<property
name=
"callBackPort"
value=
"8888"
/>
</bean>
...
...
xxl-job-core/src/main/java/com/xxl/job/core/executor/jetty/XxlJobExecutor.java
浏览文件 @
65cfe57b
...
...
@@ -26,9 +26,14 @@ import java.util.concurrent.TimeUnit;
public
class
XxlJobExecutor
implements
ApplicationContextAware
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
XxlJobExecutor
.
class
);
private
String
ip
;
private
int
port
=
9999
;
private
String
appName
;
private
RegistHelper
registHelper
;
public
void
setIp
(
String
ip
)
{
this
.
ip
=
ip
;
}
public
void
setPort
(
int
port
)
{
this
.
port
=
port
;
}
...
...
@@ -94,7 +99,15 @@ public class XxlJobExecutor implements ApplicationContextAware {
public
void
run
()
{
while
(
true
)
{
try
{
String
address
=
IpUtil
.
getIpPort
(
port
);
// generate addredd = ip:port
String
address
=
null
;
if
(
ip
!=
null
&&
ip
.
trim
().
length
()>
0
)
{
address
=
ip
.
trim
().
concat
(
":"
).
concat
(
String
.
valueOf
(
port
));
}
else
{
address
=
IpUtil
.
getIpPort
(
port
);
}
registHelper
.
registry
(
RegistHelper
.
RegistType
.
EXECUTOR
.
name
(),
appName
,
address
);
TimeUnit
.
SECONDS
.
sleep
(
RegistHelper
.
TIMEOUT
);
}
catch
(
Exception
e
)
{
...
...
xxl-job-executor-example/src/main/resources/applicationcontext-xxl-job.xml
浏览文件 @
65cfe57b
...
...
@@ -14,6 +14,8 @@
<!-- 配置02、执行器 -->
<bean
id=
"xxlJobExecutor"
class=
"com.xxl.job.core.executor.jetty.XxlJobExecutor"
init-method=
"start"
destroy-method=
"destroy"
>
<!-- 执行器IP[选填],为空则自动获取 -->
<property
name=
"ip"
value=
""
/>
<!-- 执行器端口号 -->
<property
name=
"port"
value=
"9999"
/>
<property
name=
"appName"
value=
"xxl-job-executor-example"
/>
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论