commit
25ed0cfb23
14 changed files with 322 additions and 0 deletions
@ -0,0 +1,35 @@ |
|||||||
|
<?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"> |
||||||
|
<parent> |
||||||
|
<artifactId>xxl-job-executor-samples</artifactId> |
||||||
|
<groupId>com.xuxueli</groupId> |
||||||
|
<version>1.8.2-SNAPSHOT</version> |
||||||
|
</parent> |
||||||
|
<modelVersion>4.0.0</modelVersion> |
||||||
|
<artifactId>xxl-job-executor-sample-nutz</artifactId> |
||||||
|
<packaging>war</packaging> |
||||||
|
|
||||||
|
<dependencies> |
||||||
|
<dependency> |
||||||
|
<groupId>org.nutz</groupId> |
||||||
|
<artifactId>nutz</artifactId> |
||||||
|
<version>1.r.62</version> |
||||||
|
</dependency> |
||||||
|
|
||||||
|
<!-- xxl-job --> |
||||||
|
<dependency> |
||||||
|
<groupId>com.xuxueli</groupId> |
||||||
|
<artifactId>xxl-job-core</artifactId> |
||||||
|
<version>${project.parent.version}</version> |
||||||
|
</dependency> |
||||||
|
|
||||||
|
<dependency> |
||||||
|
<groupId>org.slf4j</groupId> |
||||||
|
<artifactId>slf4j-log4j12</artifactId> |
||||||
|
<version>${slf4j-api.version}</version> |
||||||
|
</dependency> |
||||||
|
</dependencies> |
||||||
|
|
||||||
|
</project> |
@ -0,0 +1,26 @@ |
|||||||
|
package com.xuxueli.executor.sample.nutz; |
||||||
|
|
||||||
|
import org.nutz.mvc.annotation.Encoding; |
||||||
|
import org.nutz.mvc.annotation.Fail; |
||||||
|
import org.nutz.mvc.annotation.IocBy; |
||||||
|
import org.nutz.mvc.annotation.Localization; |
||||||
|
import org.nutz.mvc.annotation.Modules; |
||||||
|
import org.nutz.mvc.annotation.Ok; |
||||||
|
import org.nutz.mvc.annotation.SetupBy; |
||||||
|
import org.nutz.mvc.ioc.provider.ComboIocProvider; |
||||||
|
/** |
||||||
|
* |
||||||
|
* @author 邓华锋 |
||||||
|
* |
||||||
|
*/ |
||||||
|
@IocBy(type=ComboIocProvider.class,args={"*org.nutz.ioc.loader.json.JsonLoader","ioc/", |
||||||
|
"*org.nutz.ioc.loader.annotation.AnnotationIocLoader","com.xuxueli"}) |
||||||
|
@Encoding(input="utf-8",output="utf-8") |
||||||
|
@Modules(scanPackage=true) |
||||||
|
@Localization("msg") |
||||||
|
@Ok("json") |
||||||
|
@Fail("json") |
||||||
|
@SetupBy(MainSetup.class) |
||||||
|
public class MainModule { |
||||||
|
|
||||||
|
} |
@ -0,0 +1,55 @@ |
|||||||
|
package com.xuxueli.executor.sample.nutz; |
||||||
|
|
||||||
|
import org.nutz.ioc.IocException; |
||||||
|
import org.nutz.ioc.impl.PropertiesProxy; |
||||||
|
import org.nutz.log.Log; |
||||||
|
import org.nutz.log.Logs; |
||||||
|
import org.nutz.mvc.NutConfig; |
||||||
|
import org.nutz.mvc.Setup; |
||||||
|
|
||||||
|
import com.xxl.job.core.executor.XxlJobExecutor; |
||||||
|
import com.xxl.job.core.handler.IJobHandler; |
||||||
|
|
||||||
|
/** |
||||||
|
* |
||||||
|
* @author 邓华锋 |
||||||
|
* |
||||||
|
*/ |
||||||
|
public class MainSetup implements Setup { |
||||||
|
public static final Log log = Logs.get(); |
||||||
|
XxlJobExecutor xxlJobExecutor = null; |
||||||
|
|
||||||
|
@Override |
||||||
|
public void init(NutConfig cfg) { |
||||||
|
// 通用注册IJobHandler
|
||||||
|
String[] names = cfg.getIoc().getNamesByType(IJobHandler.class); |
||||||
|
for (String name : names) { |
||||||
|
XxlJobExecutor.registJobHandler(name, cfg.getIoc().get(IJobHandler.class, name)); |
||||||
|
} |
||||||
|
// load executor prop
|
||||||
|
PropertiesProxy xxlJobProp = cfg.getIoc().get(PropertiesProxy.class, "conf"); |
||||||
|
|
||||||
|
// init executor
|
||||||
|
xxlJobExecutor = new XxlJobExecutor(); |
||||||
|
xxlJobExecutor.setIp(xxlJobProp.get("xxl.job.executor.ip")); |
||||||
|
xxlJobExecutor.setPort(xxlJobProp.getInt("xxl.job.executor.port")); |
||||||
|
xxlJobExecutor.setAppName(xxlJobProp.get("xxl.job.executor.appname")); |
||||||
|
xxlJobExecutor.setAdminAddresses(xxlJobProp.get("xxl.job.admin.addresses")); |
||||||
|
xxlJobExecutor.setLogPath(xxlJobProp.get("xxl.job.executor.logpath")); |
||||||
|
xxlJobExecutor.setAccessToken(xxlJobProp.get("xxl.job.accessToken")); |
||||||
|
|
||||||
|
// start executor
|
||||||
|
try { |
||||||
|
xxlJobExecutor.start(); |
||||||
|
} catch (Exception e) { |
||||||
|
log.error(e.getMessage(), e); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void destroy(NutConfig cfg) { |
||||||
|
if (xxlJobExecutor != null) { |
||||||
|
xxlJobExecutor.destroy(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,36 @@ |
|||||||
|
package com.xuxueli.executor.sample.nutz.jobhandler; |
||||||
|
|
||||||
|
import java.util.concurrent.TimeUnit; |
||||||
|
|
||||||
|
import org.nutz.ioc.loader.annotation.IocBean; |
||||||
|
|
||||||
|
import com.xxl.job.core.biz.model.ReturnT; |
||||||
|
import com.xxl.job.core.handler.IJobHandler; |
||||||
|
import com.xxl.job.core.log.XxlJobLogger; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 任务Handler的一个Demo(Bean模式) |
||||||
|
* |
||||||
|
* 开发步骤: |
||||||
|
* 1、继承 “IJobHandler” ; |
||||||
|
* 2、执行日志:需要通过 "XxlJobLogger.log" 打印执行日志; |
||||||
|
* 3、在 "JFinalCoreConfig" 中注册,执行Jobhandler名称; |
||||||
|
* |
||||||
|
* @author xuxueli 2015-12-19 19:43:36 |
||||||
|
*/ |
||||||
|
@IocBean |
||||||
|
public class DemoJobHandler extends IJobHandler { |
||||||
|
|
||||||
|
@Override |
||||||
|
public ReturnT<String> execute(String... params) 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 ReturnT.SUCCESS; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,38 @@ |
|||||||
|
package com.xuxueli.executor.sample.nutz.jobhandler; |
||||||
|
|
||||||
|
import org.nutz.ioc.loader.annotation.IocBean; |
||||||
|
|
||||||
|
import com.xxl.job.core.biz.model.ReturnT; |
||||||
|
import com.xxl.job.core.handler.IJobHandler; |
||||||
|
import com.xxl.job.core.log.XxlJobLogger; |
||||||
|
import com.xxl.job.core.util.ShardingUtil; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* 分片广播任务 |
||||||
|
* |
||||||
|
* @author xuxueli 2017-07-25 20:56:50 |
||||||
|
*/ |
||||||
|
@IocBean |
||||||
|
public class ShardingJobHandler extends IJobHandler { |
||||||
|
|
||||||
|
@Override |
||||||
|
public ReturnT<String> execute(String... params) throws Exception { |
||||||
|
|
||||||
|
// 分片参数
|
||||||
|
ShardingUtil.ShardingVO shardingVO = ShardingUtil.getShardingVo(); |
||||||
|
XxlJobLogger.log("分片参数:当前分片序号 = {0}, 总分片数 = {1}", shardingVO.getIndex(), shardingVO.getTotal()); |
||||||
|
|
||||||
|
// 业务逻辑
|
||||||
|
for (int i = 0; i < shardingVO.getTotal(); i++) { |
||||||
|
if (i == shardingVO.getIndex()) { |
||||||
|
XxlJobLogger.log("第 {0} 片, 命中分片开始处理", i); |
||||||
|
} else { |
||||||
|
XxlJobLogger.log("第 {0} 片, 忽略", i); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return ReturnT.SUCCESS; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,18 @@ |
|||||||
|
package com.xuxueli.executor.sample.nutz.module; |
||||||
|
|
||||||
|
import org.nutz.ioc.loader.annotation.IocBean; |
||||||
|
import org.nutz.mvc.annotation.At; |
||||||
|
import org.nutz.mvc.annotation.Ok; |
||||||
|
/** |
||||||
|
* |
||||||
|
* @author 邓华锋 |
||||||
|
* |
||||||
|
*/ |
||||||
|
@IocBean |
||||||
|
public class IndexModule { |
||||||
|
|
||||||
|
@At |
||||||
|
@Ok("jsp:index") |
||||||
|
public void index() { |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,13 @@ |
|||||||
|
### xxl-job admin address list, such as "http://address" or "http://address01,http://address02" |
||||||
|
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin |
||||||
|
|
||||||
|
### xxl-job executor address |
||||||
|
xxl.job.executor.appname=xxl-job-executor-sample |
||||||
|
xxl.job.executor.ip= |
||||||
|
xxl.job.executor.port=1024 |
||||||
|
|
||||||
|
### xxl-job log path |
||||||
|
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler/ |
||||||
|
|
||||||
|
### xxl-job, access token |
||||||
|
xxl.job.accessToken= |
@ -0,0 +1,38 @@ |
|||||||
|
var ioc = { |
||||||
|
conf : { |
||||||
|
type : "org.nutz.ioc.impl.PropertiesProxy", |
||||||
|
fields : { |
||||||
|
paths : [ "custom/" ] |
||||||
|
} |
||||||
|
}, |
||||||
|
/** |
||||||
|
* 配置单例job执行 |
||||||
|
*/ |
||||||
|
/*xxlJobExecutor : { |
||||||
|
type : "com.xxl.job.core.executor.XxlJobExecutor", |
||||||
|
events : { |
||||||
|
create : "start", |
||||||
|
depose : "destroy" |
||||||
|
}, |
||||||
|
fields : { |
||||||
|
ip : { |
||||||
|
java : "$conf.get('xxl.job.executor.ip')" |
||||||
|
}, |
||||||
|
port : { |
||||||
|
java : "$conf.get('xxl.job.executor.port')" |
||||||
|
}, |
||||||
|
appName : { |
||||||
|
java : "$conf.get('xxl.job.executor.appname')" |
||||||
|
}, |
||||||
|
adminAddresses : { |
||||||
|
java : "$conf.get('xxl.job.admin.addresses')" |
||||||
|
}, |
||||||
|
logPath : { |
||||||
|
java : "$conf.get('xxl.job.executor.logpath')" |
||||||
|
}, |
||||||
|
accessToken : { |
||||||
|
java : "$conf.get('xxl.job.accessToken')" |
||||||
|
} |
||||||
|
} |
||||||
|
}*/ |
||||||
|
}; |
@ -0,0 +1,27 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<!DOCTYPE log4j:configuration PUBLIC "-//log4j/log4j Configuration//EN" "log4j.dtd"> |
||||||
|
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" threshold="null" debug="null"> |
||||||
|
|
||||||
|
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender"> |
||||||
|
<param name="Target" value="System.out" /> |
||||||
|
<layout class="org.apache.log4j.PatternLayout"> |
||||||
|
<param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss} spider-executor [%c]-[%t]-[%M]-[%L]-[%p] %m%n"/> |
||||||
|
</layout> |
||||||
|
</appender> |
||||||
|
|
||||||
|
<appender name="FILE" class="org.apache.log4j.DailyRollingFileAppender"> |
||||||
|
<param name="file" value="/data/applogs/xxl-job/spider-executor.log"/> |
||||||
|
<param name="append" value="true"/> |
||||||
|
<param name="encoding" value="UTF-8"/> |
||||||
|
<layout class="org.apache.log4j.PatternLayout"> |
||||||
|
<param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss} spider-executor [%c]-[%t]-[%M]-[%L]-[%p] %m%n"/> |
||||||
|
</layout> |
||||||
|
</appender> |
||||||
|
|
||||||
|
<root> |
||||||
|
<level value="INFO" /> |
||||||
|
<appender-ref ref="CONSOLE" /> |
||||||
|
<appender-ref ref="FILE" /> |
||||||
|
</root> |
||||||
|
|
||||||
|
</log4j:configuration> |
@ -0,0 +1,12 @@ |
|||||||
|
<%@ page language="java" contentType="text/html; charset=UTF-8" |
||||||
|
pageEncoding="UTF-8"%> |
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
||||||
|
<html> |
||||||
|
<head> |
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> |
||||||
|
<title>nutz 执行器启动成功</title> |
||||||
|
</head> |
||||||
|
<body> |
||||||
|
nutz 执行器启动成功! |
||||||
|
</body> |
||||||
|
</html> |
@ -0,0 +1,22 @@ |
|||||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||||
|
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||||
|
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" |
||||||
|
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" |
||||||
|
id="WebApp_ID" version="2.5"> |
||||||
|
<display-name>xxl-job-executor-sample-nutz</display-name> |
||||||
|
<filter> |
||||||
|
<filter-name>xxl-job-executor-sample-nutz</filter-name> |
||||||
|
<filter-class>org.nutz.mvc.NutFilter</filter-class> |
||||||
|
<init-param> |
||||||
|
<param-name>modules</param-name> |
||||||
|
<param-value>com.xuxueli.executor.sample.nutz.MainModule</param-value> |
||||||
|
</init-param> |
||||||
|
</filter> |
||||||
|
<filter-mapping> |
||||||
|
<filter-name>xxl-job-executor-sample-nutz</filter-name> |
||||||
|
<url-pattern>/*</url-pattern> |
||||||
|
</filter-mapping> |
||||||
|
<welcome-file-list> |
||||||
|
<welcome-file>index</welcome-file> |
||||||
|
</welcome-file-list> |
||||||
|
</web-app> |
Loading…
Reference in new issue