声明:本xxl-job版本是2.3.0,如果你的依赖中存在@JobHandler注解而没有@XxlJob注解,那么请升级版本。
1.引入依赖。
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.3.0</version>
</dependency>
2.配置yml文件。
xxl:
job:
admin:
#这里的端口是客户端用户访问的端口,我这里是9057
addresses: http://ip:port/xxl-job-admin
executor:
appname: user-job
ip:
# 这个端口是任务程序和xxl-job-admin维护心跳交互的端口,不要和上面的addresses的端口一样。
port: port
logpath: /data/xxl-job/jobhandler
logretentiondays: -1
accessToken:
3.在项目中编写配置类。
package com.salong.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.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
/**
* @author Salong
* @date 2021/8/2 16:51
* @Email:salong0503@aliyun.com
* @Description:
*/
@Configuration
@ComponentScan(basePackages = "com.salong.job")
@ConditionalOnProperty(value = "jeecg.xxljob.enabled", havingValue = "true", matchIfMissing = true)
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
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;
}
}
4.编写job类。
package com.salong.job;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
/**
* @author Salong
* @date 2021/8/2 16:58
* @Email:salong0503@aliyun.com
* @Description:
*/
@Component
@Slf4j
public class UserJob{
//这里的value要跟平台保持一致
@XxlJob(value = "UserJobHandler")
public void execute() {
log.info("开始任务");
Boolean b=testMethod();
//如果调用方法中抛出异常,则xxl-job控制台显示失败,这种情况方法可以不用返回值
//但是如果调用方法内只是log.err()这种则无法判定为失败,需要主动返回判定失败的信息
//只有被@XxlJob注解的方法内抛出异常或者在方法体内使用
//XxlJobHelper.handleFail指定失败,控制台才显示失败,否则默认是成功
if(!b){
XxlJobHelper.handleFail("执行错误!"+e.getMessage());
}
}
}
5.在xxl-admin平台配置执行器管理,新增执行器
6.在任务管理中新增定时任务。