Xxl-job实现任务自动执行
1.登录调度中心,新建示例任务。
这里JobHandler的名称必须与@XxlJob(“JobHandler”)中的一致
2.创建xxl-job项目,导入依赖
<dependencies>
<!--xxl-job-->
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.3.0</version>
</dependency>
</dependencies>
3.application.yml配置
server:
port: 8881
xxl:
job:
admin:
addresses: http://192.168.200.146:8888/xxl-job-admin
executor:
appname: xxl-job-executor-sample
port: 9999
4.参考配置类https://github.com/xuxueli/xxl-job/blob/master/xxl-job-admin/src/main/resources/application.properties,新建配置类
@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.port}")
private int port;
@Bean
public XxlJobSpringExecutor xxlJobExecutor() {
logger.info(">>>>>>>>>>> xxl-job config init.");
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
xxlJobSpringExecutor.setAppname(appname);
xxlJobSpringExecutor.setPort(port);
return xxlJobSpringExecutor;
}
}
5.任务代码,加注解@XxlJob(“JobHandler”)
@Component
public class HelloJob {
@XxlJob("demoJobHandler")
public void helloJob(){
System.out.println("任务执行了。。。。");
}
}
6.案例—预约过期的状态修改,每半个小时更新一次,其中status=3表示预约过期
@Component
public class ReservationJob {
@Autowired
private ReservationMapper reservationMapper;
@XxlJob("reservationStatusToExpired")
public void updateReservationStatus() {
reservationMapper.updateReservationStatus(LocalDateTime.now());
}
}
@Mapper
public interface ReservationMapper {
@Update("update reservation set status = 3 where status = 0 and time < #{now}")
void updateReservationStatus(LocalDateTime now);
}