上一篇文章,我们使用Java代码实现了一个简单的定时任务管理,这一篇我们使用xxljob实现定时任务管理。 xxljob的基本使用:
源码地址
要使用xxljob请去下载这的源码,目前最新版本为:2.4.0
GitHub地址: github.com/xuxueli/xxl…
git地址: github.com/xuxueli/xxl…
下载后你会得到这样一个目录:
其中我们主要使用的是xxl-job-admin这个工程。要做生产级别的使用,我们必须使用数据库做载体。
准备数据库
我们打开“xxl-job-master->doc->db->tables_xxl_job.sql”这个文件,把它放到我们的mysql中运行它。
就不给大家放sql语句了 直接去项目中找就可以了 运行后我们会得到八张表如图:
到这我们前置工作已经完成,开始正式开始动代码
我们需要修改xxl-job-admin工程下的 application.properties 这里需要修改两个部分一个是数据库(改成自己的数据库地址,账户名,密码),一个是邮件(因为我没有证书等,所以没有动,直接弃用此功能)如图:
xxljob项目修改的很少,只需要修改配置就已完成,直接启动xxl-job-admin下的XxlJobAdminApplication项目即可 注意端口号默认8080 不要跟其他项目端口冲突,可根据项目情况修改不同端口
代表启动成功
下面开始修改自己项目
1.增加pom依赖
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.4.0</version>
</dependency>
2.修改配置文件
在xxljob工程xxl-job-executor-sample-springboot此模块下的application.properties 配置信息,复制到自己项目的配置中 为方便大家 可直接复制使用
### 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, access token
xxl.job.accessToken=default_token
### xxl-job executor appname
xxl.job.executor.appname=xxl-job-executor-sample
### xxl-job executor registry-address: default use address to registry , otherwise use ip:port if address is null
xxl.job.executor.address=
### xxl-job executor server-info
xxl.job.executor.ip=
xxl.job.executor.port=9999
### xxl-job executor log-path
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
### xxl-job executor log-retention-days
xxl.job.executor.logretentiondays=30
因为我项目是配置文件是yml,所以是这样的
# xxl-job admin address list
xxl:
job:
admin:
addresses: http://localhost:8080/xxl-job-admin
# xxl-job executor app config
executor:
appname: xxl-job-executor-sample
address:
ip:
port: 9999
logpath: /data/applogs/xxl-job/jobhandler
logretentiondays: 30
accessToken: default_token
3.增加XxlJobConfig.java
在xxljob下有此代码直接复制到自己项目 位置在:
也给大家直接上代码,复制过去即可
package com.jz.app.server.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.accessToken}")
private String accessToken;
@Value("${xxl.job.executor.appname}")
private String appname;
@Value("${xxl.job.executor.address}")
private String address;
@Value("${xxl.job.executor.ip}")
private String ip;
@Value("${xxl.job.executor.port}")
private int port;
@Value("${xxl.job.executor.logpath}")
private String logPath;
@Value("${xxl.job.executor.logretentiondays}")
private int logRetentionDays;
@Bean
public XxlJobSpringExecutor xxlJobExecutor() {
logger.info(">>>>>>>>>>> xxl-job config init.");
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
xxlJobSpringExecutor.setAppname(appname);
xxlJobSpringExecutor.setAddress(address);
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();
*/
}
4.增加测试方法(自己的定时任务方法,注解内容很重要)
package com.jz.app.server.quartzTask;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.springframework.stereotype.Component;
@Component
public class MyJobHandler{
@XxlJob("MyJobHandler")
public void execute() throws Exception {
System.out.println("hello xxljob");
}
}
5.代码改动完成启动项目
启动后看到这个,代表xxljob可以使用
现在进入到页面配置定时任务 http://localhost:8080/xxl-job-admin/ 账号密码默认:admin/123456 如需修改或新增可改xxl_job_user此表,请注意数据库中密码是MD5加密(www.sojson.com/encrypt_md5…
登录成功后进入此页面
两个重要模块箭头标记位置
1.首先进入 执行器管理 进行配置
AppName: 需要与项目配置文件中appName名称一致 名称:随意 注册方式:自行注册 之后保存
OnLine 机器地址 如果显示无,注册方式可选手动注册
2.进入 任务管理 进行配置
红色框框中 cron表达式要写正确,代码此方法需要什么时候执行 运行模式默认第一个 jobHandler:代表你要执行的xxljob,不可以重复(类似身份证)
跟这里保持一致 保存后像这样展示
点击操作旁的三角号
需要立刻执行,点击执行一次
代表运行成功 需要定时任务启动执行:点击启动,不执行:点击停止 启动后如图:
到此就完成了使用xxljob对定时任务的管理
注:将我自己遇到的问题说下,可能你也会碰到
1.报错信息:xxl-job remoting error(Unexpected end of file from server), for url : 此问题是由于netty版本问题,使用此版本即可
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.48.Final</version>
</dependency>
2.还有些问题 是由于配置不匹配造成,大家跟着我这个,应该不会出现
如有其他问题,可留言或私信我,我们大家一起解决,希望此篇文章对您有用,感谢您的阅读,祝您早日实现金钱自由