Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
X
XXL-JOB
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
靳帅
XXL-JOB
Commits
c1363c75
提交
c1363c75
authored
5月 22, 2016
作者:
xueli.xue
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
重构通讯逻辑
上级
c7a24c0a
隐藏空白字符变更
内嵌
并排
正在显示
12 个修改的文件
包含
208 行增加
和
17 行删除
+208
-17
README.md
README.md
+1
-1
JobLogController.java
...rc/main/java/com/xxl/job/controller/JobLogController.java
+2
-3
XxlJobCallbackServer.java
.../java/com/xxl/job/core/callback/XxlJobCallbackServer.java
+62
-0
XxlJobCallbackServerHandler.java
...om/xxl/job/core/callback/XxlJobCallbackServerHandler.java
+57
-0
DynamicSchedulerUtil.java
...main/java/com/xxl/job/core/util/DynamicSchedulerUtil.java
+17
-0
RemoteHttpJobBean.java
.../main/java/com/xxl/job/service/job/RemoteHttpJobBean.java
+3
-6
applicationcontext-trigger-db.xml
...dmin/src/main/resources/applicationcontext-trigger-db.xml
+3
-1
config.properties
xxl-job-admin/src/main/resources/config.properties
+0
-3
HandlerRepository.java
...in/java/com/xxl/job/client/handler/HandlerRepository.java
+1
-1
HandlerThread.java
...c/main/java/com/xxl/job/client/handler/HandlerThread.java
+2
-2
HttpUtil.java
...lient/src/main/java/com/xxl/job/client/util/HttpUtil.java
+10
-0
IpUtil.java
...-client/src/main/java/com/xxl/job/client/util/IpUtil.java
+50
-0
没有找到文件。
README.md
浏览文件 @
c1363c75
...
@@ -49,7 +49,7 @@ git.osc地址:http://git.oschina.net/xuxueli0323/xxl-job
...
@@ -49,7 +49,7 @@ git.osc地址:http://git.oschina.net/xuxueli0323/xxl-job
# 新版本 V1.3.x,新特性
# 新版本 V1.3.x,新特性
1、遗弃“本地任务”模式,推荐使用“远程任务”,易于系统解耦,任务对应的JobHander统称为“执行器”;
1、遗弃“本地任务”模式,推荐使用“远程任务”,易于系统解耦,任务对应的JobHander统称为“执行器”;
2、遗弃“servlet”方式底层系统通讯,推荐使用JETTY方式,重构通讯逻辑;
2、遗弃“servlet”方式底层系统通讯,推荐使用JETTY方式,
调度+回调双向通讯,
重构通讯逻辑;
3、UI交互优化:左侧菜单展开状态优化,菜单项选中状态优化,任务列表打开表格有压缩优化;
3、UI交互优化:左侧菜单展开状态优化,菜单项选中状态优化,任务列表打开表格有压缩优化;
4、【重要】“执行器”细分为:BEAN、GLUE两种开发模式,简介见下文:
4、【重要】“执行器”细分为:BEAN、GLUE两种开发模式,简介见下文:
...
...
xxl-job-admin/src/main/java/com/xxl/job/controller/JobLogController.java
浏览文件 @
c1363c75
...
@@ -19,7 +19,6 @@ import org.springframework.web.bind.annotation.ResponseBody;
...
@@ -19,7 +19,6 @@ import org.springframework.web.bind.annotation.ResponseBody;
import
com.xxl.job.client.handler.HandlerRepository
;
import
com.xxl.job.client.handler.HandlerRepository
;
import
com.xxl.job.client.util.HttpUtil
;
import
com.xxl.job.client.util.HttpUtil
;
import
com.xxl.job.client.util.HttpUtil.RemoteCallBack
;
import
com.xxl.job.client.util.HttpUtil.RemoteCallBack
;
import
com.xxl.job.controller.annotation.PermessionLimit
;
import
com.xxl.job.client.util.JacksonUtil
;
import
com.xxl.job.client.util.JacksonUtil
;
import
com.xxl.job.core.constant.Constants.JobGroupEnum
;
import
com.xxl.job.core.constant.Constants.JobGroupEnum
;
import
com.xxl.job.core.model.ReturnT
;
import
com.xxl.job.core.model.ReturnT
;
...
@@ -76,7 +75,7 @@ public class JobLogController {
...
@@ -76,7 +75,7 @@ public class JobLogController {
return
maps
;
return
maps
;
}
}
@RequestMapping
(
"/save"
)
/*
@RequestMapping("/save")
@ResponseBody
@ResponseBody
@PermessionLimit(limit=false)
@PermessionLimit(limit=false)
public RemoteCallBack triggerLog(int trigger_log_id, String status, String msg) {
public RemoteCallBack triggerLog(int trigger_log_id, String status, String msg) {
...
@@ -92,7 +91,7 @@ public class JobLogController {
...
@@ -92,7 +91,7 @@ public class JobLogController {
return callBack;
return callBack;
}
}
return callBack;
return callBack;
}
}
*/
@RequestMapping
(
"/logDetail"
)
@RequestMapping
(
"/logDetail"
)
@ResponseBody
@ResponseBody
...
...
xxl-job-admin/src/main/java/com/xxl/job/core/callback/XxlJobCallbackServer.java
0 → 100644
浏览文件 @
c1363c75
package
com
.
xxl
.
job
.
core
.
callback
;
import
org.eclipse.jetty.server.Connector
;
import
org.eclipse.jetty.server.Handler
;
import
org.eclipse.jetty.server.Server
;
import
org.eclipse.jetty.server.handler.HandlerCollection
;
import
org.eclipse.jetty.server.nio.SelectChannelConnector
;
import
org.eclipse.jetty.util.thread.ExecutorThreadPool
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
com.xxl.job.client.util.IpUtil
;
/**
* Created by xuxueli on 2016-5-22 11:15:42
*/
public
class
XxlJobCallbackServer
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
XxlJobCallbackServer
.
class
);
private
static
String
trigger_log_address
;
public
static
String
getTrigger_log_address
()
{
return
trigger_log_address
;
}
public
void
start
(
int
callBackPort
)
throws
Exception
{
// init address
String
ip
=
IpUtil
.
getIp
();
trigger_log_address
=
ip
.
concat
(
":"
).
concat
(
String
.
valueOf
(
callBackPort
));
final
int
port
=
Integer
.
valueOf
(
callBackPort
);
new
Thread
(
new
Runnable
()
{
@Override
public
void
run
()
{
Server
server
=
new
Server
();
server
.
setThreadPool
(
new
ExecutorThreadPool
(
200
,
200
,
30000
));
// 非阻塞
// connector
SelectChannelConnector
connector
=
new
SelectChannelConnector
();
connector
.
setPort
(
port
);
connector
.
setMaxIdleTime
(
30000
);
server
.
setConnectors
(
new
Connector
[]
{
connector
});
// handler
HandlerCollection
handlerc
=
new
HandlerCollection
();
handlerc
.
setHandlers
(
new
Handler
[]{
new
XxlJobCallbackServerHandler
()});
server
.
setHandler
(
handlerc
);
try
{
server
.
start
();
logger
.
info
(
">>>>>>>>>>>> xxl-job XxlJobCallbackServer start success at port:{}."
,
port
);
server
.
join
();
// block until server ready
logger
.
info
(
">>>>>>>>>>>> xxl-job XxlJobCallbackServer join success at port:{}."
,
port
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
}).
start
();
}
}
xxl-job-admin/src/main/java/com/xxl/job/core/callback/XxlJobCallbackServerHandler.java
0 → 100644
浏览文件 @
c1363c75
package
com
.
xxl
.
job
.
core
.
callback
;
import
java.io.IOException
;
import
java.util.Date
;
import
javax.servlet.ServletException
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
org.apache.commons.lang.StringUtils
;
import
org.eclipse.jetty.server.Request
;
import
org.eclipse.jetty.server.handler.AbstractHandler
;
import
com.xxl.job.client.util.HttpUtil.RemoteCallBack
;
import
com.xxl.job.client.util.JacksonUtil
;
import
com.xxl.job.core.model.XxlJobLog
;
import
com.xxl.job.core.util.DynamicSchedulerUtil
;
/**
* Created by xuxueli on 2016-5-22 11:15:42
*/
public
class
XxlJobCallbackServerHandler
extends
AbstractHandler
{
@Override
public
void
handle
(
String
s
,
Request
baseRequest
,
HttpServletRequest
httpServletRequest
,
HttpServletResponse
httpServletResponse
)
throws
IOException
,
ServletException
{
httpServletRequest
.
setCharacterEncoding
(
"UTF-8"
);
httpServletResponse
.
setCharacterEncoding
(
"UTF-8"
);
// parse param
String
trigger_log_id
=
httpServletRequest
.
getParameter
(
"trigger_log_id"
);
String
status
=
httpServletRequest
.
getParameter
(
"status"
);
String
msg
=
httpServletRequest
.
getParameter
(
"msg"
);
// process
RemoteCallBack
callBack
=
new
RemoteCallBack
();
callBack
.
setStatus
(
RemoteCallBack
.
FAIL
);
if
(
StringUtils
.
isNumeric
(
trigger_log_id
)
&&
StringUtils
.
isNotBlank
(
status
))
{
XxlJobLog
log
=
DynamicSchedulerUtil
.
xxlJobLogDao
.
load
(
Integer
.
valueOf
(
trigger_log_id
));
if
(
log
!=
null
)
{
log
.
setHandleTime
(
new
Date
());
log
.
setHandleStatus
(
status
);
log
.
setHandleMsg
(
msg
);
DynamicSchedulerUtil
.
xxlJobLogDao
.
updateHandleInfo
(
log
);
callBack
.
setStatus
(
RemoteCallBack
.
SUCCESS
);
}
}
String
resp
=
JacksonUtil
.
writeValueAsString
(
callBack
);
// response
httpServletResponse
.
setContentType
(
"text/html;charset=utf-8"
);
httpServletResponse
.
setStatus
(
HttpServletResponse
.
SC_OK
);
baseRequest
.
setHandled
(
true
);
httpServletResponse
.
getWriter
().
println
(
resp
);
}
}
xxl-job-admin/src/main/java/com/xxl/job/core/util/DynamicSchedulerUtil.java
浏览文件 @
c1363c75
...
@@ -32,6 +32,7 @@ import org.springframework.context.ApplicationContextAware;
...
@@ -32,6 +32,7 @@ import org.springframework.context.ApplicationContextAware;
import
org.springframework.util.Assert
;
import
org.springframework.util.Assert
;
import
com.xxl.job.client.util.JacksonUtil
;
import
com.xxl.job.client.util.JacksonUtil
;
import
com.xxl.job.core.callback.XxlJobCallbackServer
;
import
com.xxl.job.core.model.XxlJobInfo
;
import
com.xxl.job.core.model.XxlJobInfo
;
import
com.xxl.job.dao.IXxlJobInfoDao
;
import
com.xxl.job.dao.IXxlJobInfoDao
;
import
com.xxl.job.dao.IXxlJobLogDao
;
import
com.xxl.job.dao.IXxlJobLogDao
;
...
@@ -49,6 +50,22 @@ public final class DynamicSchedulerUtil implements ApplicationContextAware, Init
...
@@ -49,6 +50,22 @@ public final class DynamicSchedulerUtil implements ApplicationContextAware, Init
DynamicSchedulerUtil
.
scheduler
=
scheduler
;
DynamicSchedulerUtil
.
scheduler
=
scheduler
;
}
}
// trigger callback port
private
int
callBackPort
=
8888
;
public
void
setCallBackPort
(
int
callBackPort
)
{
this
.
callBackPort
=
callBackPort
;
}
// init
public
void
init
(){
try
{
// start callback server
new
XxlJobCallbackServer
().
start
(
callBackPort
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
// xxlJobLogDao、xxlJobInfoDao
// xxlJobLogDao、xxlJobInfoDao
public
static
IXxlJobLogDao
xxlJobLogDao
;
public
static
IXxlJobLogDao
xxlJobLogDao
;
public
static
IXxlJobInfoDao
xxlJobInfoDao
;
public
static
IXxlJobInfoDao
xxlJobInfoDao
;
...
...
xxl-job-admin/src/main/java/com/xxl/job/service/job/RemoteHttpJobBean.java
浏览文件 @
c1363c75
...
@@ -16,11 +16,11 @@ import com.xxl.job.client.handler.HandlerRepository;
...
@@ -16,11 +16,11 @@ import com.xxl.job.client.handler.HandlerRepository;
import
com.xxl.job.client.util.HttpUtil
;
import
com.xxl.job.client.util.HttpUtil
;
import
com.xxl.job.client.util.HttpUtil.RemoteCallBack
;
import
com.xxl.job.client.util.HttpUtil.RemoteCallBack
;
import
com.xxl.job.client.util.JacksonUtil
;
import
com.xxl.job.client.util.JacksonUtil
;
import
com.xxl.job.core.callback.XxlJobCallbackServer
;
import
com.xxl.job.core.model.XxlJobInfo
;
import
com.xxl.job.core.model.XxlJobInfo
;
import
com.xxl.job.core.model.XxlJobLog
;
import
com.xxl.job.core.model.XxlJobLog
;
import
com.xxl.job.core.thread.JobMonitorHelper
;
import
com.xxl.job.core.thread.JobMonitorHelper
;
import
com.xxl.job.core.util.DynamicSchedulerUtil
;
import
com.xxl.job.core.util.DynamicSchedulerUtil
;
import
com.xxl.job.core.util.PropertiesUtil
;
/**
/**
* http job bean
* http job bean
...
@@ -58,8 +58,8 @@ public class RemoteHttpJobBean extends QuartzJobBean {
...
@@ -58,8 +58,8 @@ public class RemoteHttpJobBean extends QuartzJobBean {
params
.
put
(
HandlerRepository
.
TRIGGER_TIMESTAMP
,
String
.
valueOf
(
System
.
currentTimeMillis
()));
params
.
put
(
HandlerRepository
.
TRIGGER_TIMESTAMP
,
String
.
valueOf
(
System
.
currentTimeMillis
()));
params
.
put
(
HandlerRepository
.
NAMESPACE
,
HandlerRepository
.
NameSpaceEnum
.
RUN
.
name
());
params
.
put
(
HandlerRepository
.
NAMESPACE
,
HandlerRepository
.
NameSpaceEnum
.
RUN
.
name
());
params
.
put
(
HandlerRepository
.
TRIGGER_LOG_URL
,
PropertiesUtil
.
getString
(
HandlerRepository
.
TRIGGER_LOG_URL
));
params
.
put
(
HandlerRepository
.
TRIGGER_LOG_ID
,
String
.
valueOf
(
jobLog
.
getId
()));
params
.
put
(
HandlerRepository
.
TRIGGER_LOG_ID
,
String
.
valueOf
(
jobLog
.
getId
()));
params
.
put
(
HandlerRepository
.
TRIGGER_LOG_ADDRESS
,
XxlJobCallbackServer
.
getTrigger_log_address
());
params
.
put
(
HandlerRepository
.
HANDLER_NAME
,
jobDataMap
.
get
(
HandlerRepository
.
HANDLER_NAME
));
params
.
put
(
HandlerRepository
.
HANDLER_NAME
,
jobDataMap
.
get
(
HandlerRepository
.
HANDLER_NAME
));
params
.
put
(
HandlerRepository
.
HANDLER_PARAMS
,
jobDataMap
.
get
(
HandlerRepository
.
HANDLER_PARAMS
));
params
.
put
(
HandlerRepository
.
HANDLER_PARAMS
,
jobDataMap
.
get
(
HandlerRepository
.
HANDLER_PARAMS
));
...
@@ -71,11 +71,8 @@ public class RemoteHttpJobBean extends QuartzJobBean {
...
@@ -71,11 +71,8 @@ public class RemoteHttpJobBean extends QuartzJobBean {
// handler address, jetty (servlet dead)
// handler address, jetty (servlet dead)
String
handler_address
=
jobDataMap
.
get
(
HandlerRepository
.
HANDLER_ADDRESS
);
String
handler_address
=
jobDataMap
.
get
(
HandlerRepository
.
HANDLER_ADDRESS
);
if
(!
handler_address
.
startsWith
(
"http"
)){
handler_address
=
"http://"
+
handler_address
+
"/"
;
}
RemoteCallBack
callback
=
HttpUtil
.
post
(
handler_address
,
params
);
RemoteCallBack
callback
=
HttpUtil
.
post
(
HttpUtil
.
addressToUrl
(
handler_address
)
,
params
);
logger
.
info
(
">>>>>>>>>>> xxl-job trigger http response, jobLog.id:{}, jobLog:{}, callback:{}"
,
jobLog
.
getId
(),
jobLog
,
callback
);
logger
.
info
(
">>>>>>>>>>> xxl-job trigger http response, jobLog.id:{}, jobLog:{}, callback:{}"
,
jobLog
.
getId
(),
jobLog
,
callback
);
// update trigger info
// update trigger info
...
...
xxl-job-admin/src/main/resources/applicationcontext-trigger-db.xml
浏览文件 @
c1363c75
...
@@ -18,9 +18,10 @@
...
@@ -18,9 +18,10 @@
</bean>
</bean>
<!-- 协同-调度器 -->
<!-- 协同-调度器 -->
<bean
id=
"dynamicSchedulerUtil"
class=
"com.xxl.job.core.util.DynamicSchedulerUtil"
>
<bean
id=
"dynamicSchedulerUtil"
class=
"com.xxl.job.core.util.DynamicSchedulerUtil"
init-method=
"init"
>
<!-- (轻易不要变更“调度器名称”, 任务创建时会绑定该“调度器名称”) -->
<!-- (轻易不要变更“调度器名称”, 任务创建时会绑定该“调度器名称”) -->
<property
name=
"scheduler"
ref=
"quartzScheduler"
/>
<property
name=
"scheduler"
ref=
"quartzScheduler"
/>
<property
name=
"callBackPort"
value=
"8888"
/>
</bean>
</bean>
</beans>
</beans>
\ No newline at end of file
xxl-job-admin/src/main/resources/config.properties
浏览文件 @
c1363c75
# for trigger log callback
trigger_log_url
=
http://localhost:8080/xxl-job-admin/joblog/save
# for email
# for email
mail.host
=
smtp.163.com
mail.host
=
smtp.163.com
mail.port
=
25
mail.port
=
25
...
...
xxl-job-client/src/main/java/com/xxl/job/client/handler/HandlerRepository.java
浏览文件 @
c1363c75
...
@@ -31,7 +31,7 @@ public class HandlerRepository {
...
@@ -31,7 +31,7 @@ public class HandlerRepository {
public
static
final
String
HANDLER_JOB_NAME
=
"handler_job_name"
;
public
static
final
String
HANDLER_JOB_NAME
=
"handler_job_name"
;
public
static
final
String
TRIGGER_LOG_ID
=
"trigger_log_id"
;
public
static
final
String
TRIGGER_LOG_ID
=
"trigger_log_id"
;
public
static
final
String
TRIGGER_LOG_
URL
=
"trigger_log_url
"
;
public
static
final
String
TRIGGER_LOG_
ADDRESS
=
"trigger_log_address
"
;
public
static
final
String
TRIGGER_TIMESTAMP
=
"trigger_timestamp"
;
public
static
final
String
TRIGGER_TIMESTAMP
=
"trigger_timestamp"
;
public
static
ConcurrentHashMap
<
String
,
HandlerThread
>
handlerTreadMap
=
new
ConcurrentHashMap
<
String
,
HandlerThread
>();
public
static
ConcurrentHashMap
<
String
,
HandlerThread
>
handlerTreadMap
=
new
ConcurrentHashMap
<
String
,
HandlerThread
>();
...
...
xxl-job-client/src/main/java/com/xxl/job/client/handler/HandlerThread.java
浏览文件 @
c1363c75
...
@@ -60,7 +60,7 @@ public class HandlerThread extends Thread{
...
@@ -60,7 +60,7 @@ public class HandlerThread extends Thread{
Map
<
String
,
String
>
handlerData
=
handlerDataQueue
.
poll
();
Map
<
String
,
String
>
handlerData
=
handlerDataQueue
.
poll
();
if
(
handlerData
!=
null
)
{
if
(
handlerData
!=
null
)
{
i
=
0
;
i
=
0
;
String
trigger_log_
url
=
handlerData
.
get
(
HandlerRepository
.
TRIGGER_LOG_URL
);
String
trigger_log_
address
=
handlerData
.
get
(
HandlerRepository
.
TRIGGER_LOG_ADDRESS
);
String
trigger_log_id
=
handlerData
.
get
(
HandlerRepository
.
TRIGGER_LOG_ID
);
String
trigger_log_id
=
handlerData
.
get
(
HandlerRepository
.
TRIGGER_LOG_ID
);
String
handler_params
=
handlerData
.
get
(
HandlerRepository
.
HANDLER_PARAMS
);
String
handler_params
=
handlerData
.
get
(
HandlerRepository
.
HANDLER_PARAMS
);
logIdSet
.
remove
(
trigger_log_id
);
logIdSet
.
remove
(
trigger_log_id
);
...
@@ -97,7 +97,7 @@ public class HandlerThread extends Thread{
...
@@ -97,7 +97,7 @@ public class HandlerThread extends Thread{
RemoteCallBack
callback
=
null
;
RemoteCallBack
callback
=
null
;
logger
.
info
(
">>>>>>>>>>> xxl-job callback start."
);
logger
.
info
(
">>>>>>>>>>> xxl-job callback start."
);
try
{
try
{
callback
=
HttpUtil
.
post
(
trigger_log_url
,
params
);
callback
=
HttpUtil
.
post
(
HttpUtil
.
addressToUrl
(
trigger_log_address
)
,
params
);
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
logger
.
info
(
"HandlerThread Exception:"
,
e
);
logger
.
info
(
"HandlerThread Exception:"
,
e
);
}
}
...
...
xxl-job-client/src/main/java/com/xxl/job/client/util/HttpUtil.java
浏览文件 @
c1363c75
...
@@ -116,4 +116,14 @@ public class HttpUtil {
...
@@ -116,4 +116,14 @@ public class HttpUtil {
return
callback
;
return
callback
;
}
}
/**
* parse address ip:port to url http://.../
* @param address
* @return
*/
public
static
String
addressToUrl
(
String
address
){
return
"http://"
+
address
+
"/"
;
}
}
}
xxl-job-client/src/main/java/com/xxl/job/client/util/IpUtil.java
0 → 100644
浏览文件 @
c1363c75
package
com
.
xxl
.
job
.
client
.
util
;
import
java.net.InetAddress
;
import
java.net.NetworkInterface
;
import
java.net.UnknownHostException
;
import
java.util.Enumeration
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
/**
* get ip
* @author xuxueli 2016-5-22 11:38:05
*/
public
class
IpUtil
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
IpUtil
.
class
);
/**
* 获取本机ip
* @return
*/
public
static
String
getIp
()
{
try
{
Enumeration
<
NetworkInterface
>
interfaces
=
NetworkInterface
.
getNetworkInterfaces
();
InetAddress
address
=
null
;
while
(
interfaces
.
hasMoreElements
())
{
NetworkInterface
ni
=
interfaces
.
nextElement
();
Enumeration
<
InetAddress
>
addresses
=
ni
.
getInetAddresses
();
while
(
addresses
.
hasMoreElements
())
{
address
=
addresses
.
nextElement
();
if
(!
address
.
isLoopbackAddress
()
&&
address
.
getHostAddress
().
indexOf
(
":"
)
==
-
1
)
{
return
address
.
getHostAddress
();
}
}
}
logger
.
info
(
"xxl job getHostAddress fail"
);
return
null
;
}
catch
(
Throwable
t
)
{
logger
.
error
(
"xxl job getHostAddress error, {}"
,
t
);
return
null
;
}
}
public
static
void
main
(
String
[]
args
)
throws
UnknownHostException
{
System
.
out
.
println
(
InetAddress
.
getLocalHost
().
getCanonicalHostName
());
System
.
out
.
println
(
InetAddress
.
getLocalHost
().
getHostName
());
System
.
out
.
println
(
getIp
());
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论