Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
X
XXL-JOB
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
靳帅
XXL-JOB
Commits
670d1ca5
提交
670d1ca5
authored
12月 17, 2019
作者:
lizhen
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refactor:修改获取XxlJob注解方法的方式
上级
99c9a2ab
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
66 行增加
和
47 行删除
+66
-47
XxlJobSpringExecutor.java
.../com/xxl/job/core/executor/impl/XxlJobSpringExecutor.java
+66
-47
没有找到文件。
xxl-job-core/src/main/java/com/xxl/job/core/executor/impl/XxlJobSpringExecutor.java
浏览文件 @
670d1ca5
...
@@ -7,14 +7,18 @@ import com.xxl.job.core.handler.IJobHandler;
...
@@ -7,14 +7,18 @@ import com.xxl.job.core.handler.IJobHandler;
import
com.xxl.job.core.handler.annotation.JobHandler
;
import
com.xxl.job.core.handler.annotation.JobHandler
;
import
com.xxl.job.core.handler.annotation.XxlJob
;
import
com.xxl.job.core.handler.annotation.XxlJob
;
import
com.xxl.job.core.handler.impl.MethodJobHandler
;
import
com.xxl.job.core.handler.impl.MethodJobHandler
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.BeansException
;
import
org.springframework.beans.BeansException
;
import
org.springframework.beans.factory.DisposableBean
;
import
org.springframework.beans.factory.DisposableBean
;
import
org.springframework.beans.factory.InitializingBean
;
import
org.springframework.beans.factory.InitializingBean
;
import
org.springframework.context.ApplicationContext
;
import
org.springframework.context.ApplicationContext
;
import
org.springframework.context.ApplicationContextAware
;
import
org.springframework.context.ApplicationContextAware
;
import
org.springframework.core.annotation.AnnotationUtils
;
import
org.springframework.core.MethodIntrospector
;
import
org.springframework.core.annotation.AnnotatedElementUtils
;
import
java.lang.reflect.Method
;
import
java.lang.reflect.Method
;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.Map
;
/**
/**
...
@@ -23,6 +27,7 @@ import java.util.Map;
...
@@ -23,6 +27,7 @@ import java.util.Map;
* @author xuxueli 2018-11-01 09:24:52
* @author xuxueli 2018-11-01 09:24:52
*/
*/
public
class
XxlJobSpringExecutor
extends
XxlJobExecutor
implements
ApplicationContextAware
,
InitializingBean
,
DisposableBean
{
public
class
XxlJobSpringExecutor
extends
XxlJobExecutor
implements
ApplicationContextAware
,
InitializingBean
,
DisposableBean
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
XxlJobSpringExecutor
.
class
);
// start
// start
...
@@ -75,60 +80,74 @@ public class XxlJobSpringExecutor extends XxlJobExecutor implements ApplicationC
...
@@ -75,60 +80,74 @@ public class XxlJobSpringExecutor extends XxlJobExecutor implements ApplicationC
if
(
applicationContext
==
null
)
{
if
(
applicationContext
==
null
)
{
return
;
return
;
}
}
// init job handler from method
// init job handler from method
String
[]
beanDefinitionNames
=
applicationContext
.
getBeanDefinitionNames
();
String
[]
beanDefinitionNames
=
applicationContext
.
getBeanDefinitionNames
();
for
(
String
beanDefinitionName
:
beanDefinitionNames
)
{
for
(
String
beanDefinitionName
:
beanDefinitionNames
)
{
Object
bean
=
applicationContext
.
getBean
(
beanDefinitionName
);
Object
bean
=
applicationContext
.
getBean
(
beanDefinitionName
);
Method
[]
methods
=
bean
.
getClass
().
getDeclaredMethods
();
for
(
Method
method:
methods
)
{
XxlJob
xxlJob
=
AnnotationUtils
.
findAnnotation
(
method
,
XxlJob
.
class
);
if
(
xxlJob
!=
null
)
{
// name
String
name
=
xxlJob
.
value
();
if
(
name
.
trim
().
length
()
==
0
)
{
throw
new
RuntimeException
(
"xxl-job method-jobhandler name invalid, for["
+
bean
.
getClass
()
+
"#"
+
method
.
getName
()
+
"] ."
);
}
if
(
loadJobHandler
(
name
)
!=
null
)
{
throw
new
RuntimeException
(
"xxl-job jobhandler["
+
name
+
"] naming conflicts."
);
}
// execute method
Map
<
Method
,
XxlJob
>
annotatedMethods
=
new
HashMap
<>();
if
(!(
method
.
getParameterTypes
()!=
null
&&
method
.
getParameterTypes
().
length
==
1
&&
method
.
getParameterTypes
()[
0
].
isAssignableFrom
(
String
.
class
)))
{
try
{
throw
new
RuntimeException
(
"xxl-job method-jobhandler param-classtype invalid, for["
+
bean
.
getClass
()
+
"#"
+
method
.
getName
()
+
"] , "
+
annotatedMethods
=
MethodIntrospector
.
selectMethods
(
bean
.
getClass
(),
"The correct method format like \" public ReturnT<String> execute(String param) \" ."
);
new
MethodIntrospector
.
MetadataLookup
<
XxlJob
>()
{
}
@Override
if
(!
method
.
getReturnType
().
isAssignableFrom
(
ReturnT
.
class
))
{
public
XxlJob
inspect
(
Method
method
)
{
throw
new
RuntimeException
(
"xxl-job method-jobhandler return-classtype invalid, for["
+
bean
.
getClass
()
+
"#"
+
method
.
getName
()
+
"] , "
+
return
AnnotatedElementUtils
.
findMergedAnnotation
(
method
,
XxlJob
.
class
);
"The correct method format like \" public ReturnT<String> execute(String param) \" ."
);
}
}
});
method
.
setAccessible
(
true
);
}
catch
(
Throwable
ex
)
{
if
(
logger
.
isDebugEnabled
())
{
// init and destory
logger
.
debug
(
"Could not resolve methods for bean with name '"
+
beanDefinitionName
+
"'"
,
ex
);
Method
initMethod
=
null
;
}
Method
destroyMethod
=
null
;
}
if
(
xxlJob
.
init
().
trim
().
length
()
>
0
)
{
for
(
Map
.
Entry
<
Method
,
XxlJob
>
methodXxlJobEntry
:
annotatedMethods
.
entrySet
())
{
try
{
Method
method
=
methodXxlJobEntry
.
getKey
();
initMethod
=
bean
.
getClass
().
getDeclaredMethod
(
xxlJob
.
init
());
XxlJob
xxlJob
=
methodXxlJobEntry
.
getValue
();
initMethod
.
setAccessible
(
true
);
if
(
xxlJob
==
null
)
{
}
catch
(
NoSuchMethodException
e
)
{
continue
;
throw
new
RuntimeException
(
"xxl-job method-jobhandler initMethod invalid, for["
+
bean
.
getClass
()
+
"#"
+
method
.
getName
()
+
"] ."
);
}
}
String
name
=
xxlJob
.
value
();
if
(
name
.
trim
().
length
()
==
0
)
{
throw
new
RuntimeException
(
"xxl-job method-jobhandler name invalid, for["
+
bean
.
getClass
()
+
"#"
+
method
.
getName
()
+
"] ."
);
}
if
(
loadJobHandler
(
name
)
!=
null
)
{
throw
new
RuntimeException
(
"xxl-job jobhandler["
+
name
+
"] naming conflicts."
);
}
// execute method
if
(!(
method
.
getParameterTypes
().
length
==
1
&&
method
.
getParameterTypes
()[
0
].
isAssignableFrom
(
String
.
class
)))
{
throw
new
RuntimeException
(
"xxl-job method-jobhandler param-classtype invalid, for["
+
bean
.
getClass
()
+
"#"
+
method
.
getName
()
+
"] , "
+
"The correct method format like \" public ReturnT<String> execute(String param) \" ."
);
}
if
(!
method
.
getReturnType
().
isAssignableFrom
(
ReturnT
.
class
))
{
throw
new
RuntimeException
(
"xxl-job method-jobhandler return-classtype invalid, for["
+
bean
.
getClass
()
+
"#"
+
method
.
getName
()
+
"] , "
+
"The correct method format like \" public ReturnT<String> execute(String param) \" ."
);
}
method
.
setAccessible
(
true
);
// init and destory
Method
initMethod
=
null
;
Method
destroyMethod
=
null
;
if
(
xxlJob
.
init
().
trim
().
length
()
>
0
)
{
try
{
initMethod
=
bean
.
getClass
().
getDeclaredMethod
(
xxlJob
.
init
());
initMethod
.
setAccessible
(
true
);
}
catch
(
NoSuchMethodException
e
)
{
throw
new
RuntimeException
(
"xxl-job method-jobhandler initMethod invalid, for["
+
bean
.
getClass
()
+
"#"
+
method
.
getName
()
+
"] ."
);
}
}
if
(
xxlJob
.
destroy
().
trim
().
length
()
>
0
)
{
}
try
{
if
(
xxlJob
.
destroy
().
trim
().
length
()
>
0
)
{
destroyMethod
=
bean
.
getClass
().
getDeclaredMethod
(
xxlJob
.
destroy
());
try
{
destroyMethod
.
setAccessible
(
true
);
destroyMethod
=
bean
.
getClass
().
getDeclaredMethod
(
xxlJob
.
destroy
()
);
}
catch
(
NoSuchMethodException
e
)
{
destroyMethod
.
setAccessible
(
true
);
throw
new
RuntimeException
(
"xxl-job method-jobhandler destroyMethod invalid, for["
+
bean
.
getClass
()
+
"#"
+
method
.
getName
()
+
"] ."
);
}
catch
(
NoSuchMethodException
e
)
{
}
throw
new
RuntimeException
(
"xxl-job method-jobhandler destroyMethod invalid, for["
+
bean
.
getClass
()
+
"#"
+
method
.
getName
()
+
"] ."
);
}
}
// registry jobhandler
registJobHandler
(
name
,
new
MethodJobHandler
(
bean
,
method
,
initMethod
,
destroyMethod
));
}
}
// registry jobhandler
registJobHandler
(
name
,
new
MethodJobHandler
(
bean
,
method
,
initMethod
,
destroyMethod
));
}
}
}
}
}
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论