Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
X
XXL-JOB
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
靳帅
XXL-JOB
Commits
e8436c88
提交
e8436c88
authored
2月 22, 2019
作者:
xuxueli
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of
https://github.com/xuxueli/xxl-job
上级
6ca58a73
3e9fe7ba
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
33 行增加
和
3 行删除
+33
-3
ExecutorBizImpl.java
.../main/java/com/xxl/job/core/biz/impl/ExecutorBizImpl.java
+1
-1
GlueFactory.java
...core/src/main/java/com/xxl/job/core/glue/GlueFactory.java
+32
-2
没有找到文件。
xxl-job-core/src/main/java/com/xxl/job/core/biz/impl/ExecutorBizImpl.java
浏览文件 @
e8436c88
...
...
@@ -113,7 +113,7 @@ public class ExecutorBizImpl implements ExecutorBiz {
// valid handler
if
(
jobHandler
==
null
)
{
try
{
IJobHandler
originJobHandler
=
GlueFactory
.
getInstance
().
loadNewInstance
(
triggerParam
.
getGlueSource
());
IJobHandler
originJobHandler
=
GlueFactory
.
getInstance
().
loadNewInstance
(
triggerParam
.
get
JobId
(),
triggerParam
.
get
GlueSource
());
jobHandler
=
new
GlueJobHandler
(
originJobHandler
,
triggerParam
.
getGlueUpdatetime
());
}
catch
(
Exception
e
)
{
logger
.
error
(
e
.
getMessage
(),
e
);
...
...
xxl-job-core/src/main/java/com/xxl/job/core/glue/GlueFactory.java
浏览文件 @
e8436c88
...
...
@@ -4,6 +4,10 @@ import com.xxl.job.core.glue.impl.SpringGlueFactory;
import
com.xxl.job.core.handler.IJobHandler
;
import
groovy.lang.GroovyClassLoader
;
import
java.math.BigInteger
;
import
java.security.MessageDigest
;
import
java.util.concurrent.ConcurrentHashMap
;
/**
* glue factory, product class/object by name
*
...
...
@@ -30,6 +34,8 @@ public class GlueFactory {
*/
private
GroovyClassLoader
groovyClassLoader
=
new
GroovyClassLoader
();
private
static
final
ConcurrentHashMap
<
String
,
Class
<?>>
CLASS_CACHE
=
new
ConcurrentHashMap
<>();
private
static
final
ConcurrentHashMap
<
Long
,
String
>
JOBID_MD5KEY_CACHE
=
new
ConcurrentHashMap
<>();
/**
* load new instance, prototype
...
...
@@ -38,9 +44,9 @@ public class GlueFactory {
* @return
* @throws Exception
*/
public
IJobHandler
loadNewInstance
(
String
codeSource
)
throws
Exception
{
public
IJobHandler
loadNewInstance
(
long
jobId
,
String
codeSource
)
throws
Exception
{
if
(
codeSource
!=
null
&&
codeSource
.
trim
().
length
()>
0
)
{
Class
<?>
clazz
=
g
roovyClassLoader
.
parseClass
(
codeSource
);
Class
<?>
clazz
=
g
etCodeSourceClass
(
jobId
,
codeSource
);
if
(
clazz
!=
null
)
{
Object
instance
=
clazz
.
newInstance
();
if
(
instance
!=
null
)
{
...
...
@@ -66,4 +72,28 @@ public class GlueFactory {
// do something
}
private
Class
<?>
getCodeSourceClass
(
long
jobId
,
String
codeSource
){
try
{
MessageDigest
md
=
MessageDigest
.
getInstance
(
"MD5"
);
byte
[]
md5
=
md
.
digest
(
codeSource
.
getBytes
());
BigInteger
no
=
new
BigInteger
(
1
,
md5
);
String
md5Str
=
no
.
toString
(
16
);
Class
<?>
clazz
=
CLASS_CACHE
.
get
(
md5Str
);
if
(
clazz
==
null
){
clazz
=
groovyClassLoader
.
parseClass
(
codeSource
);
Class
<?>
preClazz
=
CLASS_CACHE
.
putIfAbsent
(
md5Str
,
clazz
);
// 如果代碼有變化則刪除之前class緩存
if
(
preClazz
==
null
){
String
preMd5
=
JOBID_MD5KEY_CACHE
.
put
(
jobId
,
md5Str
);
if
(
preMd5
!=
null
){
CLASS_CACHE
.
remove
(
preMd5
);
}
}
}
return
clazz
;
}
catch
(
Exception
e
)
{
return
groovyClassLoader
.
parseClass
(
codeSource
);
}
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论