Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
guns-vip
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
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
chenjunxiong
guns-vip
Commits
df70a318
Commit
df70a318
authored
Jun 09, 2019
by
fengshuonan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
增加xxl-job的集成
parent
b3f42ba4
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
395 additions
and
0 deletions
+395
-0
guns-base-timers/pom.xml
+40
-0
guns-base-timers/src/main/java/cn/stylefeng/guns/timer/config/JobExecutorConfig.java
+77
-0
guns-base-timers/src/main/java/cn/stylefeng/guns/timer/config/JobHandlerConfig.java
+39
-0
guns-base-timers/src/main/java/cn/stylefeng/guns/timer/jobhandler/CommandJobHandler.java
+56
-0
guns-base-timers/src/main/java/cn/stylefeng/guns/timer/jobhandler/DemoJobHandler.java
+36
-0
guns-base-timers/src/main/java/cn/stylefeng/guns/timer/jobhandler/HttpJobHandler.java
+83
-0
guns-base-timers/src/main/java/cn/stylefeng/guns/timer/jobhandler/ShardingJobHandler.java
+36
-0
guns-base-timers/src/main/resources/META-INF/spring.factories
+4
-0
guns-base-timers/src/main/resources/xxl-job.properties
+16
-0
guns-vip-main/pom.xml
+7
-0
pom.xml
+1
-0
No files found.
guns-base-timers/pom.xml
0 → 100644
View file @
df70a318
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<modelVersion>
4.0.0
</modelVersion>
<parent>
<groupId>
cn.stylefeng
</groupId>
<artifactId>
guns-vip
</artifactId>
<version>
1.0.0
</version>
<relativePath>
../pom.xml
</relativePath>
</parent>
<artifactId>
guns-base-timers
</artifactId>
<packaging>
jar
</packaging>
<dependencies>
<!--基础组件-->
<dependency>
<groupId>
cn.stylefeng
</groupId>
<artifactId>
guns-base
</artifactId>
<version>
1.0.0
</version>
</dependency>
<!-- xxl-job-core -->
<dependency>
<groupId>
com.xuxueli
</groupId>
<artifactId>
xxl-job-core
</artifactId>
<version>
2.0.2
</version>
</dependency>
</dependencies>
<build>
<finalName>
${project.artifactId}
</finalName>
</build>
</project>
guns-base-timers/src/main/java/cn/stylefeng/guns/timer/config/JobExecutorConfig.java
0 → 100644
View file @
df70a318
package
cn
.
stylefeng
.
guns
.
timer
.
config
;
import
com.xxl.job.core.executor.impl.XxlJobSpringExecutor
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.PropertySource
;
/**
* xxl-job config
*
* @author xuxueli 2017-04-28
*/
@Configuration
@PropertySource
(
"classpath:/xxl-job.properties"
)
public
class
JobExecutorConfig
{
private
Logger
logger
=
LoggerFactory
.
getLogger
(
JobExecutorConfig
.
class
);
@Value
(
"${xxl.job.admin.addresses}"
)
private
String
adminAddresses
;
@Value
(
"${xxl.job.executor.appname}"
)
private
String
appName
;
@Value
(
"${xxl.job.executor.ip}"
)
private
String
ip
;
@Value
(
"${xxl.job.executor.port}"
)
private
int
port
;
@Value
(
"${xxl.job.accessToken}"
)
private
String
accessToken
;
@Value
(
"${xxl.job.executor.logpath}"
)
private
String
logPath
;
@Value
(
"${xxl.job.executor.logretentiondays}"
)
private
int
logRetentionDays
;
@Bean
(
initMethod
=
"start"
,
destroyMethod
=
"destroy"
)
public
XxlJobSpringExecutor
xxlJobExecutor
()
{
logger
.
info
(
">>>>>>>>>>> xxl-job config init."
);
XxlJobSpringExecutor
xxlJobSpringExecutor
=
new
XxlJobSpringExecutor
();
xxlJobSpringExecutor
.
setAdminAddresses
(
adminAddresses
);
xxlJobSpringExecutor
.
setAppName
(
appName
);
xxlJobSpringExecutor
.
setIp
(
ip
);
xxlJobSpringExecutor
.
setPort
(
port
);
xxlJobSpringExecutor
.
setAccessToken
(
accessToken
);
xxlJobSpringExecutor
.
setLogPath
(
logPath
);
xxlJobSpringExecutor
.
setLogRetentionDays
(
logRetentionDays
);
return
xxlJobSpringExecutor
;
}
/**
* 针对多网卡、容器内部署等情况,可借助 "spring-cloud-commons" 提供的 "InetUtils" 组件灵活定制注册IP;
*
* 1、引入依赖:
* <dependency>
* <groupId>org.springframework.cloud</groupId>
* <artifactId>spring-cloud-commons</artifactId>
* <version>${version}</version>
* </dependency>
*
* 2、配置文件,或者容器启动变量
* spring.cloud.inetutils.preferred-networks: 'xxx.xxx.xxx.'
*
* 3、获取IP
* String ip_ = inetUtils.findFirstNonLoopbackHostInfo().getIpAddress();
*/
}
\ No newline at end of file
guns-base-timers/src/main/java/cn/stylefeng/guns/timer/config/JobHandlerConfig.java
0 → 100644
View file @
df70a318
package
cn
.
stylefeng
.
guns
.
timer
.
config
;
import
cn.stylefeng.guns.timer.jobhandler.CommandJobHandler
;
import
cn.stylefeng.guns.timer.jobhandler.DemoJobHandler
;
import
cn.stylefeng.guns.timer.jobhandler.HttpJobHandler
;
import
cn.stylefeng.guns.timer.jobhandler.ShardingJobHandler
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
/**
* xxl-job config
*
* @author xuxueli 2017-04-28
*/
@Configuration
public
class
JobHandlerConfig
{
@Bean
public
CommandJobHandler
commandJobHandler
()
{
return
new
CommandJobHandler
();
}
@Bean
public
DemoJobHandler
demoJobHandler
()
{
return
new
DemoJobHandler
();
}
@Bean
public
HttpJobHandler
httpJobHandler
()
{
return
new
HttpJobHandler
();
}
@Bean
public
ShardingJobHandler
shardingJobHandler
()
{
return
new
ShardingJobHandler
();
}
}
\ No newline at end of file
guns-base-timers/src/main/java/cn/stylefeng/guns/timer/jobhandler/CommandJobHandler.java
0 → 100644
View file @
df70a318
package
cn
.
stylefeng
.
guns
.
timer
.
jobhandler
;
import
com.xxl.job.core.biz.model.ReturnT
;
import
com.xxl.job.core.handler.IJobHandler
;
import
com.xxl.job.core.handler.annotation.JobHandler
;
import
com.xxl.job.core.log.XxlJobLogger
;
import
java.io.BufferedInputStream
;
import
java.io.BufferedReader
;
import
java.io.InputStreamReader
;
/**
* 命令行任务
*
* @author xuxueli 2018-09-16 03:48:34
*/
@JobHandler
(
value
=
"commandJobHandler"
)
public
class
CommandJobHandler
extends
IJobHandler
{
@Override
public
ReturnT
<
String
>
execute
(
String
param
)
throws
Exception
{
String
command
=
param
;
int
exitValue
=
-
1
;
BufferedReader
bufferedReader
=
null
;
try
{
// command process
Process
process
=
Runtime
.
getRuntime
().
exec
(
command
);
BufferedInputStream
bufferedInputStream
=
new
BufferedInputStream
(
process
.
getInputStream
());
bufferedReader
=
new
BufferedReader
(
new
InputStreamReader
(
bufferedInputStream
));
// command log
String
line
;
while
((
line
=
bufferedReader
.
readLine
())
!=
null
)
{
XxlJobLogger
.
log
(
line
);
}
// command exit
process
.
waitFor
();
exitValue
=
process
.
exitValue
();
}
catch
(
Exception
e
)
{
XxlJobLogger
.
log
(
e
);
}
finally
{
if
(
bufferedReader
!=
null
)
{
bufferedReader
.
close
();
}
}
if
(
exitValue
==
0
)
{
return
IJobHandler
.
SUCCESS
;
}
else
{
return
new
ReturnT
<
String
>(
IJobHandler
.
FAIL
.
getCode
(),
"command exit value("
+
exitValue
+
") is failed"
);
}
}
}
guns-base-timers/src/main/java/cn/stylefeng/guns/timer/jobhandler/DemoJobHandler.java
0 → 100644
View file @
df70a318
package
cn
.
stylefeng
.
guns
.
timer
.
jobhandler
;
import
com.xxl.job.core.biz.model.ReturnT
;
import
com.xxl.job.core.handler.IJobHandler
;
import
com.xxl.job.core.handler.annotation.JobHandler
;
import
com.xxl.job.core.log.XxlJobLogger
;
import
java.util.concurrent.TimeUnit
;
/**
* 任务Handler示例(Bean模式)
* <p>
* 开发步骤:
* 1、继承"IJobHandler":“com.xxl.job.core.handler.IJobHandler”;
* 2、注册到Spring容器:添加“@Component”注解,被Spring容器扫描为Bean实例;
* 3、注册到执行器工厂:添加“@JobHandler(value="自定义jobhandler名称")”注解,注解value值对应的是调度中心新建任务的JobHandler属性的值。
* 4、执行日志:需要通过 "XxlJobLogger.log" 打印执行日志;
*
* @author xuxueli 2015-12-19 19:43:36
*/
@JobHandler
(
value
=
"demoJobHandler"
)
public
class
DemoJobHandler
extends
IJobHandler
{
@Override
public
ReturnT
<
String
>
execute
(
String
param
)
throws
Exception
{
XxlJobLogger
.
log
(
"XXL-JOB, Hello World."
);
for
(
int
i
=
0
;
i
<
5
;
i
++)
{
XxlJobLogger
.
log
(
"beat at:"
+
i
);
TimeUnit
.
SECONDS
.
sleep
(
2
);
}
return
SUCCESS
;
}
}
guns-base-timers/src/main/java/cn/stylefeng/guns/timer/jobhandler/HttpJobHandler.java
0 → 100644
View file @
df70a318
package
cn
.
stylefeng
.
guns
.
timer
.
jobhandler
;
import
com.xxl.job.core.biz.model.ReturnT
;
import
com.xxl.job.core.handler.IJobHandler
;
import
com.xxl.job.core.handler.annotation.JobHandler
;
import
com.xxl.job.core.log.XxlJobLogger
;
import
java.io.BufferedReader
;
import
java.io.InputStreamReader
;
import
java.net.HttpURLConnection
;
import
java.net.URL
;
/**
* 跨平台Http任务
*
* @author xuxueli 2018-09-16 03:48:34
*/
@JobHandler
(
value
=
"httpJobHandler"
)
public
class
HttpJobHandler
extends
IJobHandler
{
@Override
public
ReturnT
<
String
>
execute
(
String
param
)
throws
Exception
{
// request
HttpURLConnection
connection
=
null
;
BufferedReader
bufferedReader
=
null
;
try
{
// connection
URL
realUrl
=
new
URL
(
param
);
connection
=
(
HttpURLConnection
)
realUrl
.
openConnection
();
// connection setting
connection
.
setRequestMethod
(
"GET"
);
connection
.
setDoOutput
(
true
);
connection
.
setDoInput
(
true
);
connection
.
setUseCaches
(
false
);
connection
.
setReadTimeout
(
5
*
1000
);
connection
.
setConnectTimeout
(
3
*
1000
);
connection
.
setRequestProperty
(
"connection"
,
"Keep-Alive"
);
connection
.
setRequestProperty
(
"Content-Type"
,
"application/json;charset=UTF-8"
);
connection
.
setRequestProperty
(
"Accept-Charset"
,
"application/json;charset=UTF-8"
);
// do connection
connection
.
connect
();
//Map<String, List<String>> map = connection.getHeaderFields();
// valid StatusCode
int
statusCode
=
connection
.
getResponseCode
();
if
(
statusCode
!=
200
)
{
throw
new
RuntimeException
(
"Http Request StatusCode("
+
statusCode
+
") Invalid."
);
}
// result
bufferedReader
=
new
BufferedReader
(
new
InputStreamReader
(
connection
.
getInputStream
()));
StringBuilder
result
=
new
StringBuilder
();
String
line
;
while
((
line
=
bufferedReader
.
readLine
())
!=
null
)
{
result
.
append
(
line
);
}
String
responseMsg
=
result
.
toString
();
XxlJobLogger
.
log
(
responseMsg
);
return
SUCCESS
;
}
catch
(
Exception
e
)
{
XxlJobLogger
.
log
(
e
);
return
FAIL
;
}
finally
{
try
{
if
(
bufferedReader
!=
null
)
{
bufferedReader
.
close
();
}
if
(
connection
!=
null
)
{
connection
.
disconnect
();
}
}
catch
(
Exception
e2
)
{
XxlJobLogger
.
log
(
e2
);
}
}
}
}
guns-base-timers/src/main/java/cn/stylefeng/guns/timer/jobhandler/ShardingJobHandler.java
0 → 100644
View file @
df70a318
package
cn
.
stylefeng
.
guns
.
timer
.
jobhandler
;
import
com.xxl.job.core.biz.model.ReturnT
;
import
com.xxl.job.core.handler.IJobHandler
;
import
com.xxl.job.core.handler.annotation.JobHandler
;
import
com.xxl.job.core.log.XxlJobLogger
;
import
com.xxl.job.core.util.ShardingUtil
;
/**
* 分片广播任务
*
* @author xuxueli 2017-07-25 20:56:50
*/
@JobHandler
(
value
=
"shardingJobHandler"
)
public
class
ShardingJobHandler
extends
IJobHandler
{
@Override
public
ReturnT
<
String
>
execute
(
String
param
)
throws
Exception
{
// 分片参数
ShardingUtil
.
ShardingVO
shardingVO
=
ShardingUtil
.
getShardingVo
();
XxlJobLogger
.
log
(
"分片参数:当前分片序号 = {}, 总分片数 = {}"
,
shardingVO
.
getIndex
(),
shardingVO
.
getTotal
());
// 业务逻辑
for
(
int
i
=
0
;
i
<
shardingVO
.
getTotal
();
i
++)
{
if
(
i
==
shardingVO
.
getIndex
())
{
XxlJobLogger
.
log
(
"第 {} 片, 命中分片开始处理"
,
i
);
}
else
{
XxlJobLogger
.
log
(
"第 {} 片, 忽略"
,
i
);
}
}
return
SUCCESS
;
}
}
guns-base-timers/src/main/resources/META-INF/spring.factories
0 → 100644
View file @
df70a318
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
cn.stylefeng.guns.timer.config.JobExecutorConfig,\
cn.stylefeng.guns.timer.config.JobHandlerConfig
\ No newline at end of file
guns-base-timers/src/main/resources/xxl-job.properties
0 → 100644
View file @
df70a318
### xxl-job admin address list, such as "http://address" or "http://address01,http://address02"
xxl.job.admin.addresses
=
http://127.0.0.1:8080/job-manager
### xxl-job executor address
xxl.job.executor.appname
=
guns-executor
xxl.job.executor.ip
=
xxl.job.executor.port
=
9999
### xxl-job, access token
xxl.job.accessToken
=
### xxl-job log path
xxl.job.executor.logpath
=
handler/logs
### xxl-job log retention days
xxl.job.executor.logretentiondays
=
-1
guns-vip-main/pom.xml
View file @
df70a318
...
@@ -31,6 +31,13 @@
...
@@ -31,6 +31,13 @@
<version>
1.0.0
</version>
<version>
1.0.0
</version>
</dependency>
</dependency>
<!-- 最新代码生成模块 -->
<!-- <dependency>-->
<!-- <groupId>cn.stylefeng</groupId>-->
<!-- <artifactId>guns-base-timers</artifactId>-->
<!-- <version>1.0.0</version>-->
<!-- </dependency>-->
</dependencies>
</dependencies>
<build>
<build>
...
...
pom.xml
View file @
df70a318
...
@@ -23,6 +23,7 @@
...
@@ -23,6 +23,7 @@
<module>
guns-base
</module>
<module>
guns-base
</module>
<module>
guns-base-sms
</module>
<module>
guns-base-sms
</module>
<module>
guns-base-email
</module>
<module>
guns-base-email
</module>
<module>
guns-base-timers
</module>
<module>
guns-sys
</module>
<module>
guns-sys
</module>
<module>
guns-vip-gen
</module>
<module>
guns-vip-gen
</module>
<module>
guns-vip-main
</module>
<module>
guns-vip-main
</module>
...
...
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