Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
熊鹏飞
/
xxljob220
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
5f6eee85
authored
Mar 27, 2020
by
许雪里
Committed by
GitHub
Mar 27, 2020
Browse files
Options
_('Browse Files')
Download
Plain Diff
Merge pull request #1383 from LiZhenNet/master
refactor:修改获取XxlJob注解方法的方式
parents
b7880825
d0f5c1f6
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
40 additions
and
19 deletions
xxl-job-core/src/main/java/com/xxl/job/core/executor/impl/XxlJobSpringExecutor.java
xxl-job-core/src/main/java/com/xxl/job/core/executor/impl/XxlJobSpringExecutor.java
View file @
5f6eee85
...
...
@@ -5,21 +5,29 @@ import com.xxl.job.core.executor.XxlJobExecutor;
import
com.xxl.job.core.glue.GlueFactory
;
import
com.xxl.job.core.handler.annotation.XxlJob
;
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.factory.DisposableBean
;
import
org.springframework.beans.factory.InitializingBean
;
import
org.springframework.context.ApplicationContext
;
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.util.HashMap
;
import
java.util.Map
;
/**
* xxl-job executor (for spring)
*
* @author xuxueli 2018-11-01 09:24:52
*/
public
class
XxlJobSpringExecutor
extends
XxlJobExecutor
implements
ApplicationContextAware
,
InitializingBean
,
DisposableBean
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
XxlJobSpringExecutor
.
class
);
// start
...
...
@@ -72,33 +80,48 @@ public class XxlJobSpringExecutor extends XxlJobExecutor implements ApplicationC
if
(
applicationContext
==
null
)
{
return
;
}
// init job handler from method
String
[]
beanDefinitionNames
=
applicationContext
.
getBeanDefinitionNames
();
if
(
beanDefinitionNames
!=
null
&&
beanDefinitionNames
.
length
>
0
)
{
String
[]
beanDefinitionNames
=
applicationContext
.
getBeanNamesForType
(
Object
.
class
,
false
,
true
);
for
(
String
beanDefinitionName
:
beanDefinitionNames
)
{
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
Map
<
Method
,
XxlJob
>
annotatedMethods
=
new
HashMap
<>();
try
{
annotatedMethods
=
MethodIntrospector
.
selectMethods
(
bean
.
getClass
(),
new
MethodIntrospector
.
MetadataLookup
<
XxlJob
>()
{
@Override
public
XxlJob
inspect
(
Method
method
)
{
return
AnnotatedElementUtils
.
findMergedAnnotation
(
method
,
XxlJob
.
class
);
}
});
}
catch
(
Throwable
ex
)
{
if
(
logger
.
isDebugEnabled
())
{
logger
.
debug
(
"Could not resolve methods for bean with name '"
+
beanDefinitionName
+
"'"
,
ex
);
}
}
for
(
Map
.
Entry
<
Method
,
XxlJob
>
methodXxlJobEntry
:
annotatedMethods
.
entrySet
())
{
Method
method
=
methodXxlJobEntry
.
getKey
();
XxlJob
xxlJob
=
methodXxlJobEntry
.
getValue
();
if
(
xxlJob
==
null
)
{
continue
;
}
String
name
=
xxlJob
.
value
();
if
(
name
.
trim
().
length
()
==
0
)
{
throw
new
RuntimeException
(
"xxl-job method-jobhandler name invalid, for["
+
bean
.
getClass
()
+
"#"
+
method
.
getName
()
+
"] ."
);
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
()!=
null
&&
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
()
+
"] , "
+
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
()
+
"] , "
+
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
);
...
...
@@ -107,20 +130,20 @@ public class XxlJobSpringExecutor extends XxlJobExecutor implements ApplicationC
Method
initMethod
=
null
;
Method
destroyMethod
=
null
;
if
(
xxlJob
.
init
().
trim
().
length
()
>
0
)
{
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
()
+
"] ."
);
throw
new
RuntimeException
(
"xxl-job method-jobhandler initMethod invalid, for["
+
bean
.
getClass
()
+
"#"
+
method
.
getName
()
+
"] ."
);
}
}
if
(
xxlJob
.
destroy
().
trim
().
length
()
>
0
)
{
if
(
xxlJob
.
destroy
().
trim
().
length
()
>
0
)
{
try
{
destroyMethod
=
bean
.
getClass
().
getDeclaredMethod
(
xxlJob
.
destroy
());
destroyMethod
.
setAccessible
(
true
);
}
catch
(
NoSuchMethodException
e
)
{
throw
new
RuntimeException
(
"xxl-job method-jobhandler destroyMethod invalid, for["
+
bean
.
getClass
()
+
"#"
+
method
.
getName
()
+
"] ."
);
throw
new
RuntimeException
(
"xxl-job method-jobhandler destroyMethod invalid, for["
+
bean
.
getClass
()
+
"#"
+
method
.
getName
()
+
"] ."
);
}
}
...
...
@@ -128,8 +151,6 @@ public class XxlJobSpringExecutor extends XxlJobExecutor implements ApplicationC
registJobHandler
(
name
,
new
MethodJobHandler
(
bean
,
method
,
initMethod
,
destroyMethod
));
}
}
}
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment