Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
B
byit-myth-job
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
liyuan
byit-myth-job
Commits
00ecf48a
Commit
00ecf48a
authored
Mar 18, 2020
by
huangfusuper
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修改插件端项目扫描方式 将自动扫描改为手动配置!增加启动速度,减少资源消耗!
parent
21175ef9
Show whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
302 additions
and
42 deletions
+302
-42
pom.xml
byit-myth-executor/myth-executor-plugin/pom.xml
+4
-4
LauncherEnum.java
...tor-plugin/src/main/java/com/byit/enums/LauncherEnum.java
+25
-0
LauncherException.java
...in/src/main/java/com/byit/exptions/LauncherException.java
+10
-0
JobRunServerLauncher.java
...src/main/java/com/byit/launcher/JobRunServerLauncher.java
+14
-5
PluginConfigModel.java
...lugin/src/main/java/com/byit/model/PluginConfigModel.java
+22
-0
ServerRunThread.java
...or-plugin/src/main/java/com/byit/rpc/ServerRunThread.java
+12
-3
JarRunScanProject.java
...plugin/src/main/java/com/byit/scan/JarRunScanProject.java
+1
-15
LocalFolderRunScanProject.java
...rc/main/java/com/byit/scan/LocalFolderRunScanProject.java
+0
-13
XmlRunPlugin.java
...utor-plugin/src/main/java/com/byit/scan/XmlRunPlugin.java
+63
-0
IScanProject.java
...plugin/src/main/java/com/byit/scan/base/IScanProject.java
+11
-0
XmlParseUtil.java
...tor-plugin/src/main/java/com/byit/utils/XmlParseUtil.java
+110
-0
plugin.xml
...ecutor/myth-executor-plugin/src/main/resources/plugin.xml
+13
-0
Mains.java
...nt/byit-demo-client/src/main/java/com/byit/job/Mains.java
+6
-2
plugin.xml
demo-client/byit-demo-client/src/main/resources/plugin.xml
+11
-0
No files found.
byit-myth-executor/myth-executor-plugin/pom.xml
View file @
00ecf48a
...
...
@@ -43,14 +43,14 @@
<artifactId>
myth-executor-core
</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/xstream/xstream -->
<dependency>
<groupId>
xstream
</groupId>
<artifactId>
xstream
</artifactId>
<version>
1.2.2
</version>
<groupId>
org.dom4j
</groupId>
<artifactId>
dom4j
</artifactId>
<version>
2.1.1
</version>
</dependency>
</dependencies>
<distributionManagement>
...
...
byit-myth-executor/myth-executor-plugin/src/main/java/com/byit/enums/LauncherEnum.java
0 → 100644
View file @
00ecf48a
package
com
.
byit
.
enums
;
/**
* @author huangfu
*/
public
enum
LauncherEnum
{
XML_PORT_SET_ERROR
(
"配置文件端口出现错误!"
),
XML_DATA_ERROR
(
"配置文件解析失败,或配置不正确!"
),
XML_AUTO_VALUE_ERROR
(
"自动扫描配置只能为true或者false"
),
;
private
String
msg
;
public
String
getMsg
()
{
return
msg
;
}
public
void
setMsg
(
String
msg
)
{
this
.
msg
=
msg
;
}
LauncherEnum
(
String
msg
)
{
this
.
msg
=
msg
;
}
}
byit-myth-executor/myth-executor-plugin/src/main/java/com/byit/exptions/LauncherException.java
0 → 100644
View file @
00ecf48a
package
com
.
byit
.
exptions
;
/**
* @author huangfu
*/
public
class
LauncherException
extends
RuntimeException
{
public
LauncherException
(
String
message
)
{
super
(
message
);
}
}
byit-myth-executor/myth-executor-plugin/src/main/java/com/byit/launcher/JobRunServerLauncher.java
View file @
00ecf48a
package
com
.
byit
.
launcher
;
import
com.byit.annotations.JobHandler
;
import
com.byit.executor.handler.interfaces.IJobHandler
;
import
com.byit.model.PluginConfigModel
;
import
com.byit.rpc.ServerRunThread
;
import
com.byit.utils.XmlParseUtil
;
import
lombok.extern.slf4j.Slf4j
;
/**
...
...
@@ -11,22 +15,27 @@ import lombok.extern.slf4j.Slf4j;
**/
@Slf4j
public
class
JobRunServerLauncher
{
private
PluginConfigModel
pluginConfigModel
;
/**
* 线程是否已经被启动的标志
*/
public
static
volatile
boolean
THREAD_RUN_MARK
=
false
;
public
JobRunServerLauncher
(
int
port
)
{
runServer
(
port
);
public
JobRunServerLauncher
(
String
filePath
)
throws
InterruptedException
{
pluginConfigModel
=
new
PluginConfigModel
();
XmlParseUtil
.
parse
(
filePath
,
pluginConfigModel
);
runServer
();
}
/**
* 开始启动服务 设置启动标志
* @param port
*/
private
void
runServer
(
int
port
)
{
private
void
runServer
(
)
throws
InterruptedException
{
if
(!
THREAD_RUN_MARK
){
new
Thread
(
new
ServerRunThread
(
port
)).
start
();
new
Thread
(
new
ServerRunThread
(
pluginConfigModel
)).
start
();
Thread
.
sleep
(
500
);
log
.
info
(
"---------------------线程启动------------------"
);
}
}
...
...
byit-myth-executor/myth-executor-plugin/src/main/java/com/byit/model/PluginConfigModel.java
0 → 100644
View file @
00ecf48a
package
com
.
byit
.
model
;
import
lombok.AllArgsConstructor
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
java.util.List
;
/**
* 数据配置类
* @author huangfu
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public
class
PluginConfigModel
{
private
Integer
port
;
private
List
<
String
>
classNames
;
private
Boolean
authScan
;
}
byit-myth-executor/myth-executor-plugin/src/main/java/com/byit/rpc/ServerRunThread.java
View file @
00ecf48a
package
com
.
byit
.
rpc
;
import
com.byit.launcher.JobRunServerLauncher
;
import
com.byit.model.PluginConfigModel
;
import
com.byit.scan.JarRunScanProject
;
import
com.byit.scan.LocalFolderRunScanProject
;
import
com.byit.scan.XmlRunPlugin
;
import
com.byit.scan.base.IScanProject
;
import
com.byit.utils.JobUtils
;
import
io.netty.bootstrap.ServerBootstrap
;
...
...
@@ -20,11 +22,13 @@ import lombok.extern.slf4j.Slf4j;
**/
@Slf4j
public
class
ServerRunThread
implements
Runnable
{
private
Integer
port
=
8989
;
private
Integer
port
;
public
ServerRunThread
(
Integer
port
)
{
public
ServerRunThread
(
PluginConfigModel
pluginConfigModel
)
{
//获取任务信息
IScanProject
iScanProject
;
//如果设置自动转给程序自身处理 如果设置手动就读取xml进行
if
(
pluginConfigModel
.
getAuthScan
())
{
if
(
JobUtils
.
isJarRun
()){
log
.
info
(
"-------------------jar包运行--------------------"
);
iScanProject
=
new
JarRunScanProject
(
JobUtils
.
filePath
());
...
...
@@ -32,10 +36,15 @@ public class ServerRunThread implements Runnable {
log
.
info
(
"-------------------本地运行---------------------"
);
iScanProject
=
new
LocalFolderRunScanProject
();
}
}
else
{
log
.
info
(
"-------------------本地配置文件运行--------------------"
);
iScanProject
=
new
XmlRunPlugin
(
pluginConfigModel
);
}
iScanProject
.
addJobCache
();
JobRunServerLauncher
.
THREAD_RUN_MARK
=
true
;
this
.
port
=
p
ort
;
this
.
port
=
p
luginConfigModel
.
getPort
()
;
}
@Override
...
...
byit-myth-executor/myth-executor-plugin/src/main/java/com/byit/scan/JarRunScanProject.java
View file @
00ecf48a
package
com
.
byit
.
scan
;
import
com.byit.annotations.JobHandler
;
import
com.byit.executor.handler.interfaces.IJobHandler
;
import
com.byit.scan.base.IScanProject
;
import
com.byit.utils.JobUtils
;
import
lombok.extern.slf4j.Slf4j
;
...
...
@@ -22,23 +21,11 @@ import java.util.jar.JarFile;
**/
@Slf4j
public
class
JarRunScanProject
implements
IScanProject
{
/**
* 任务基类
*/
private
static
final
Class
<
IJobHandler
>
JOB_ROOT_CLASS
;
/**
* 任务注解类
*/
private
static
final
Class
<
JobHandler
>
JOB_HANDLER_CLASS
;
private
static
final
String
DOT_CLASS
=
".class"
;
private
static
final
String
DOT_MF
=
".MF"
;
private
static
String
rootPath
;
static
{
JOB_ROOT_CLASS
=
IJobHandler
.
class
;
JOB_HANDLER_CLASS
=
JobHandler
.
class
;
}
public
JarRunScanProject
(
String
rootPath
)
{
JarRunScanProject
.
rootPath
=
rootPath
;
}
...
...
@@ -69,7 +56,6 @@ public class JarRunScanProject implements IScanProject {
Class
objectiveClass
=
classLoader
.
loadClass
(
className
);
if
(
JOB_ROOT_CLASS
.
isAssignableFrom
(
objectiveClass
)){
if
(
objectiveClass
.
isAnnotationPresent
(
JOB_HANDLER_CLASS
)){
System
.
out
.
println
(
className
);
JobHandler
annotation
=
(
JobHandler
)
objectiveClass
.
getAnnotation
(
JOB_HANDLER_CLASS
);
JobUtils
.
jobCache
.
put
(
annotation
.
value
(),
objectiveClass
);
}
...
...
byit-myth-executor/myth-executor-plugin/src/main/java/com/byit/scan/LocalFolderRunScanProject.java
View file @
00ecf48a
...
...
@@ -17,19 +17,6 @@ import java.util.stream.Collectors;
* @date: 2019/11/29 10:42
**/
public
class
LocalFolderRunScanProject
implements
IScanProject
{
/**
* 任务基类
*/
private
static
final
Class
<
IJobHandler
>
JOB_ROOT_CLASS
;
/**
* 任务注解类
*/
private
static
final
Class
<
JobHandler
>
JOB_HANDLER_CLASS
;
static
{
JOB_ROOT_CLASS
=
IJobHandler
.
class
;
JOB_HANDLER_CLASS
=
JobHandler
.
class
;
}
/**
* 获取项目的根路径
...
...
byit-myth-executor/myth-executor-plugin/src/main/java/com/byit/scan/XmlRunPlugin.java
0 → 100644
View file @
00ecf48a
package
com
.
byit
.
scan
;
import
com.byit.annotations.JobHandler
;
import
com.byit.executor.handler.interfaces.IJobHandler
;
import
com.byit.model.PluginConfigModel
;
import
com.byit.scan.base.IScanProject
;
import
com.byit.utils.JobUtils
;
import
lombok.extern.slf4j.Slf4j
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* @author huangfu
*/
@Slf4j
public
class
XmlRunPlugin
implements
IScanProject
{
private
PluginConfigModel
pluginConfigModel
;
public
XmlRunPlugin
(
PluginConfigModel
pluginConfigModel
)
{
this
.
pluginConfigModel
=
pluginConfigModel
;
}
@Override
public
void
addJobCache
()
{
List
<
IJobHandler
>
iJobHandlers
=
instantiateJobHandler
();
/**
* 添加到缓存
*/
iJobHandlers
.
forEach
(
iJobHandler
->
{
Class
<?
extends
IJobHandler
>
aClass
=
iJobHandler
.
getClass
();
if
(
aClass
.
isAnnotationPresent
(
JOB_HANDLER_CLASS
))
{
JobHandler
annotation
=
aClass
.
getAnnotation
(
JOB_HANDLER_CLASS
);
JobUtils
.
jobCache
.
put
(
annotation
.
value
(),
aClass
);
}
else
{
log
.
warn
(
"------{}被忽略,因为没有添加注解{}-------"
,
iJobHandler
,
JOB_HANDLER_CLASS
);
}
});
}
/**
* 实例化数据
* @return
*/
private
List
<
IJobHandler
>
instantiateJobHandler
(){
List
<
String
>
classNames
=
pluginConfigModel
.
getClassNames
();
List
<
IJobHandler
>
iJobHandlers
=
new
ArrayList
<>(
15
);
classNames
.
forEach
(
className
->{
try
{
Class
<?>
aClass
=
Class
.
forName
(
className
);
Object
o
=
aClass
.
newInstance
();
if
(
o
instanceof
IJobHandler
){
iJobHandlers
.
add
((
IJobHandler
)
o
);
}
else
{
log
.
warn
(
"---------{}被忽略,因为他不属于{}类型-------"
,
o
,
JOB_ROOT_CLASS
);
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
});
return
iJobHandlers
;
}
}
byit-myth-executor/myth-executor-plugin/src/main/java/com/byit/scan/base/IScanProject.java
View file @
00ecf48a
package
com
.
byit
.
scan
.
base
;
import
com.byit.annotations.JobHandler
;
import
com.byit.executor.handler.interfaces.IJobHandler
;
/**
* @program: byit-myth-job->IScanProject
* @description: 扫描项目的基类
...
...
@@ -9,6 +12,14 @@ package com.byit.scan.base;
**/
public
interface
IScanProject
{
/**
* 任务基类
*/
Class
<
IJobHandler
>
JOB_ROOT_CLASS
=
IJobHandler
.
class
;
/**
* 任务注解类
*/
Class
<
JobHandler
>
JOB_HANDLER_CLASS
=
JobHandler
.
class
;
/**
* 将符合条件的任务添加到缓存层
*/
void
addJobCache
();
...
...
byit-myth-executor/myth-executor-plugin/src/main/java/com/byit/utils/XmlParseUtil.java
0 → 100644
View file @
00ecf48a
package
com
.
byit
.
utils
;
import
com.byit.enums.LauncherEnum
;
import
com.byit.exptions.LauncherException
;
import
com.byit.model.PluginConfigModel
;
import
org.dom4j.Document
;
import
org.dom4j.DocumentException
;
import
org.dom4j.Element
;
import
org.dom4j.io.SAXReader
;
import
java.net.URL
;
import
java.util.ArrayList
;
import
java.util.Iterator
;
/**
* @author huangfu
*/
public
class
XmlParseUtil
{
private
final
static
String
PORT
=
"port"
;
/**
* 将文档解析为文档类型的数据
* @param filePath xml文件地址
*/
public
static
void
parse
(
String
filePath
,
PluginConfigModel
pluginConfigModel
)
{
URL
resource
=
XmlParseUtil
.
class
.
getResource
(
filePath
);
SAXReader
reader
=
new
SAXReader
();
Document
document
;
try
{
document
=
reader
.
read
(
resource
);
}
catch
(
DocumentException
e
)
{
e
.
printStackTrace
();
throw
new
LauncherException
(
LauncherEnum
.
XML_DATA_ERROR
.
getMsg
());
}
Element
rootElement
=
document
.
getRootElement
();
if
(
rootElement
==
null
){
throw
new
LauncherException
(
LauncherEnum
.
XML_DATA_ERROR
.
getMsg
());
}
Element
authScanElement
=
rootElement
.
element
(
"auto-scan"
);
if
(
authScanElement
==
null
){
pluginConfigModel
.
setAuthScan
(
false
);
}
else
{
authScanParse
(
authScanElement
,
pluginConfigModel
);
}
Element
portElement
=
rootElement
.
element
(
PORT
);
Element
classNamesElement
=
rootElement
.
element
(
"classNames"
);
if
(
portElement
==
null
||
classNamesElement
==
null
){
throw
new
LauncherException
(
LauncherEnum
.
XML_DATA_ERROR
.
getMsg
());
}
portParse
(
portElement
,
pluginConfigModel
);
packageScanValueParse
(
classNamesElement
,
pluginConfigModel
);
}
/**
* 自动扫描解析配置
* @param authScanElement 自动扫描
* @param pluginConfigModel 服务配置
*/
private
static
void
authScanParse
(
Element
authScanElement
,
PluginConfigModel
pluginConfigModel
){
String
isScanStr
=
authScanElement
.
attributeValue
(
"value"
);
try
{
boolean
isScan
=
Boolean
.
parseBoolean
(
isScanStr
);
pluginConfigModel
.
setAuthScan
(
isScan
);
}
catch
(
Exception
e
){
e
.
printStackTrace
();
throw
new
LauncherException
(
LauncherEnum
.
XML_PORT_SET_ERROR
.
getMsg
());
}
}
/**
* 解析package
* @param packageRootElement 任务类
* @param pluginConfigModel 配置引用
*/
private
static
void
packageScanValueParse
(
Element
packageRootElement
,
PluginConfigModel
pluginConfigModel
){
Iterator
<
Element
>
elementIterator
=
packageRootElement
.
elementIterator
();
while
(
elementIterator
.
hasNext
())
{
Element
packageElement
=
elementIterator
.
next
();
String
packageElementText
=
packageElement
.
getText
();
if
(
pluginConfigModel
.
getClassNames
()
==
null
){
pluginConfigModel
.
setClassNames
(
new
ArrayList
<>(
8
));
}
pluginConfigModel
.
getClassNames
().
add
(
packageElementText
);
}
}
/**
* 端口解析
* @param portElement 端口
* @param pluginConfigModel 配置引用
*/
private
static
void
portParse
(
Element
portElement
,
PluginConfigModel
pluginConfigModel
){
String
portStr
=
portElement
.
getText
();
try
{
int
port
=
Integer
.
parseInt
(
portStr
.
trim
());
pluginConfigModel
.
setPort
(
port
);
}
catch
(
Exception
e
){
e
.
printStackTrace
();
throw
new
LauncherException
(
LauncherEnum
.
XML_PORT_SET_ERROR
.
getMsg
());
}
}
public
static
void
main
(
String
[]
args
)
{
parse
(
"/plugin.xml"
,
new
PluginConfigModel
());
}
}
byit-myth-executor/myth-executor-plugin/src/main/resources/plugin.xml
0 → 100644
View file @
00ecf48a
<?xml version="1.0" encoding="UTF-8"?>
<executor-plugin>
<port>
8989
</port>
<classNames>
<className>
com.byit.model.PluginConfigModel
</className>
<className>
com.byit.model.PluginConfigModel
</className>
<className>
com.byit.model.PluginConfigModel
</className>
<className>
com.byit.model.PluginConfigModel
</className>
<className>
com.byit.model.PluginConfigModel
</className>
<className>
com.byit.model.PluginConfigModel
</className>
</classNames>
</executor-plugin>
\ No newline at end of file
demo-client/byit-demo-client/src/main/java/com/byit/job/Mains.java
View file @
00ecf48a
package
com
.
byit
.
job
;
import
com.byit.launcher.JobRunServerLauncher
;
import
com.byit.utils.JobUtils
;
import
java.io.IOException
;
...
...
@@ -11,8 +12,11 @@ import java.io.IOException;
* @date: 2019/11/20 12:18
**/
public
class
Mains
{
public
static
void
main
(
String
[]
args
)
throws
IOException
{
new
JobRunServerLauncher
(
8888
);
public
static
void
main
(
String
[]
args
)
throws
InterruptedException
{
new
JobRunServerLauncher
(
"/plugin.xml"
);
JobUtils
.
jobCache
.
forEach
((
key
,
value
)
->{
System
.
out
.
println
(
key
);
});
}
}
demo-client/byit-demo-client/src/main/resources/plugin.xml
0 → 100644
View file @
00ecf48a
<?xml version="1.0" encoding="UTF-8"?>
<executor-plugin>
<port>
8899
</port>
<auto-scan
value=
"false"
></auto-scan>
<classNames>
<className>
com.byit.job.DemoJob
</className>
<className>
com.byit.job.EndNode
</className>
<className>
com.byit.job.StartNode
</className>
</classNames>
</executor-plugin>
\ No newline at end of file
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