xxl-job的使用
导入依赖
这里使用2.3.0版本
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.3.0</version>
</dependency>
yml里添加配置文件
xxx:
xxl_job_admin_addresses: http://192.168.3.112:9000/xxl-job-admin # 调度中心部署地址
xxl_job_access_token: xxxx # 执行器通讯TOKEN
xxl_job_executor_app_name: xxxxx # 执行器AppName
xxl_job_executor_log_path: /opt/logs # 执行器运行日志文件存储磁盘路径
xxl_job_executor_log_retention_days: 7 # 执行器日志文件保存天数
logging:
level:
# 解决执行器启动成功后,控制台一直反复报:xxl-rpc provider netty_http server caught exception
com.xxl.job.core.server.EmbedServer: off
定时任务相关属性
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
/**
* 定时任务相关配置属性
* @author qwb
* @date 2023/01/03
*/
@Data
@Configuration
@ConfigurationProperties(prefix = "lrjk")
public class PropConfig {
/**
* XXLJOB调度中心部署地址
*/
private String xxlJobAdminAddresses;
/**
* XXLJOB执行器通讯TOKEN
*/
private String xxlJobAccessToken;
/**
* XXLJOB执行器AppName
*/
private String xxlJobExecutorAppName;
/**
* XXLJOB执行器运行日志文件存储磁盘路径
*/
private String xxlJobExecutorLogPath;
/**
* XXLJOB执行器日志文件保存天数
*/
private Integer xxlJobExecutorLogRetentionDays;
}
配置执行器组件
@SpringBootApplication
@Slf4j
public class AnalysisServiceApplication {
@Autowired
private PropConfig propConfig;
@Value("${qnm.xxl_job_executor_ip:}")
private String xxlJobExecutorIp;
@Value("${qnm.xxl_job_executor_port:}")
private Integer xxlJobExecutorPort;
public static void main(String[] args) {
SpringApplication.run(AnalysisServiceApplication.class, args);
}
@Bean
public XxlJobSpringExecutor xxlJobExecutor() {
log.info("开始初始化xxl-job executor");
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
xxlJobSpringExecutor.setAdminAddresses(propConfig.getXxlJobAdminAddresses());
xxlJobSpringExecutor.setAppname(propConfig.getXxlJobExecutorAppName());
xxlJobSpringExecutor.setAccessToken(propConfig.getXxlJobAccessToken());
// 为空时本机IP, docker需要手动指定
xxlJobSpringExecutor.setIp(xxlJobExecutorIp);
// 为空默认9999, docker需要手动执行并暴露端口
if (xxlJobExecutorPort != null) {
xxlJobSpringExecutor.setPort(xxlJobExecutorPort);
}
xxlJobSpringExecutor.setLogPath(propConfig.getXxlJobExecutorLogPath());
xxlJobSpringExecutor.setLogRetentionDays(propConfig.getXxlJobExecutorLogRetentionDays());
return xxlJobSpringExecutor;
}
}
安装部署
1.下载最新的项目源码压缩包,解压到本地
https://gitee.com/xuxueli0323/xxl-job
2.初始化调度中心数据库
在路径:项目源码目录**\doc\db\tables_xxl_job.sql** 执行里面的sql
3.编译调度中心运行包
(1)进入到解压后的项目源码目录,打开配置文件项目源码目录\xxl-job-admin\src\main\resources\application.properties。
(2)修改配置参数:在此之前需要通过【第一步】完成调度中心数据库的创建和登录授权的设置。
修改数据库连接参数
### xxl-job, datasource
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=xxxx # 数据库用户名
spring.datasource.password=xxxx # 数据库用户密码
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
可以修改报警邮件配置信息
### xxl-job, email
spring.mail.host=smtp.qq.com # 邮件服务器主机
spring.mail.port=25 # 邮件服务器端口
spring.mail.username=xxx@qq.com # 邮件账户
spring.mail.from=xxx@qq.com # 发送邮件账号,通常跟spring.mail.username值一致
spring.mail.password=xxx # 发送邮件账户密码
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
进入到项目源码目录,执行:
mvn clean package,// 将会在“项目源码目录\xxl-job-admin\target”路径下生成调度中心运行jar包:
xxl-job-admin-${version}.jar 。
4.运行调度中心
将jar包拷贝到服务器,执行下面命令 即可运行并启动调度中心进程。
java -jar xxl-job-admin-${version}.jar
调度中心启动成功之后,访问:
http://服务器主机地址:8080/xxl-job-admin 打开调度中心管理界面。
默认用户名/密码:admin/123456
业务使用
@XxlJob("getVideoMateriaReport")
@Transactional(rollbackFor = Exception.class)
public void getVideoMateriaReport() {
XxlJobHelper.log("xxx任务:开始");
String jobParam = XxlJobHelper.getJobParam();
// 日期参数获取
Map<String, String> dateParamMap = this.getJobDateParam(jobParam);
String startDate = dateParamMap.get("startDate");
String endDate = dateParamMap.get("endDate");
// 业务
........
XxlJobHelper.log("xxx任务:结束");
}
/**
* 获取时间参数,默认为昨天,传入today则今天,传入其他则其他时间
* @param jobParam xxljob自定义参数 JSONObject格式
* @return
*/
private Map<String, String> getJobDateParam(String jobParam) {
String startDate;
String endDate;
if (StrUtil.isBlank(jobParam)) {
// 默认查询昨天
startDate = DateUtil.yesterday().toDateStr();
endDate = DateUtil.yesterday().toDateStr();
} else {
log.info("自定义参数为 {}", jobParam);
if (jobParam.contains("today")) {
// 查询今天
startDate = DateUtil.today();
endDate = DateUtil.today();
} else {
// 自定义日期查询
try {
JSONObject queryParam = JSONObject.parseObject(jobParam);
startDate = (String) queryParam.get("startDate");
endDate = (String) queryParam.get("endDate");
} catch (Exception e) {
log.error("自定义参数异常:", e);
throw new QnmCommonException("自定义参数异常:" + jobParam);
}
}
}
Map<String, String> resultMap = new HashMap<>(4);
resultMap.put("startDate", startDate);
resultMap.put("endDate", endDate);
return resultMap;
}
配置xxl