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 對應調度中心的這個屬性,入下圖
數據庫
經過管理中心,啓動測試。完美運行。其餘功能按字面意思調用便可。安全
須要作兩臺機器的時間同步,時間差的不少也會執行失敗。多線程
特別鳴謝;做者和這麼好的開源項目。祝君好運。