XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。java
第一种方式:mysql
git clone https://github.com/NopSmile/xxl-job-oracle-2.1.0
下载好后,经过idea编译;git
将 db目录下的sql 执行到数据库中,会生成7张表。github
修改路径为:src/main/resources/application.properties 并填写本身的数据相关信息
成功后访问:http://localhost:8088/xxl-job-admin/ spring
初始用户名:admin 密码:123456
至此服务端完成。sql
<!-- xxl-job-core --> <dependency> <groupId>com.xuxueli</groupId> <artifactId>xxl-job-core</artifactId> <version>2.1.0</version> </dependency>
package com.xxl.job.executor.core.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; /** * xxl-job config * * @author xuxueli 2017-04-28 */ @Configuration public class XxlJobConfig { private Logger logger = LoggerFactory.getLogger(XxlJobConfig.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; * * 一、引入依赖: * <dependency> * <groupId>org.springframework.cloud</groupId> * <artifactId>spring-cloud-commons</artifactId> * <version>${version}</version> * </dependency> * * 二、配置文件,或者容器启动变量 * spring.cloud.inetutils.preferred-networks: 'xxx.xxx.xxx.' * * 三、获取IP * String ip_ = inetUtils.findFirstNonLoopbackHostInfo().getIpAddress(); */ }
xxl: job: accessToken: admin: addresses: http://locahos:8088/xxl-job-admin executor: address: appname: xxl-job-shiro ##这个是执行器名字 ip: logpath: /data/applogs/xxl-job/jobhandler logretentiondays: -1 port: -1
appname 对应入下图所示docker
package com.itcc.coll.job; 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 org.springframework.stereotype.Component; import java.util.Date; /** * 任务Handler示例(Bean模式) * * 开发步骤: * 一、继承"IJobHandler":“com.xxl.job.core.handler.IJobHandler”; * 二、注册到Spring容器:添加“@Component”注解,被Spring容器扫描为Bean实例; * 三、注册到执行器工厂:添加“@JobHandler(value="自定义jobhandler名称")”注解,注解value值对应的是调度中心新建任务的JobHandler属性的值。 * 四、执行日志:须要经过 "XxlJobLogger.log" 打印执行日志; * * @author xuxueli 2015-12-19 19:43:36 */ @JobHandler(value="shiro_job") @Component public class DemoJobHandler extends IJobHandler { @Override public ReturnT<String> execute(String param) throws Exception { System.out.println(new Date()+"shiro_job."); return SUCCESS; } }
JobHandler 对应调度中心的这个属性,入下图数据库
经过管理中心,启动测试。完美运行。其余功能按字面意思调用便可。安全
须要作两台机器的时间同步,时间差的不少也会执行失败。多线程
特别鸣谢;做者和这么好的开源项目。祝君好运。