当前位置:   article > 正文

java定时任务schedule quartz xxl-job 小记_java xxl-job使用

java xxl-job使用

1.Timer

        java中存在Timer类可以实现简单的定时任务调度

  1. import java.util.Timer;
  2. import java.util.TimerTask;
  3. public class TimerExample {
  4. public static void main(String[] args) {
  5. Timer timer = new Timer();
  6. TimerTask task = new TimerTask() {
  7. @Override
  8. public void run() {
  9. // 定时任务的具体逻辑
  10. System.out.println("定时任务执行啦!");
  11. }
  12. };
  13. // 延迟1秒后执行任务,之后每隔5秒重复执行
  14. timer.schedule(task, 1000L, 5000L);
  15. }
  16. }

        通过timer.schedule(task, delay, period)的方法将任务task安排在延迟delay毫秒后开始,每间隔period毫秒重复执行。

        Timer的缺点在于其是单线程,所有任务都在一个线程中串行执行,如果一个任务的执行时间超过了预期,会对后续任务的执行时间产生影响。也就是说,当一个任务抛出异常,其他任务也会终止运行。因此Timer类只适合于简单的定时任务,不涉及复杂的任务调度需求或分布式环境。

Spring框架还提供了一种通过添加@Schedule注解的方式来实现定时任务:

  1. import org.springframework.scheduling.annotation.Scheduled;
  2. @Component //添加component注解交给spring容器
  3. public class timeTest{
  4. @Scheduled(cron = "0/15 * * * * ?")//用cron表达式来实现定时
  5. public void test(){
  6. System.out.println("定时");
  7. }
  8. }

同时需要再启动类上添加@EnableScheduling来开启定时任务

  1. import org.springframework.boot.SpringApplication;
  2. import org.springframework.boot.autoconfigure.SpringBootApplication;
  3. import org.springframework.scheduling.annotation.EnableScheduling;
  4. @SpringBootApplication
  5. @EnableScheduling
  6. public class TimerApp {
  7. public static void main(String[] args) {
  8. SpringApplication.run(TimerApp.class);
  9. }
  10. }

        通过spring task实现定时任务可见能更快速实现,但不支持动态调整,修改任务参数就需要重启项目。

2.Quartz

        Quartz实现定时任务调度 在Maven中引入依赖

  1. <dependency>
  2. <groupId>org.quartz-scheduler</groupId>
  3. <artifactId>quartz</artifactId>
  4. <version>{quartz.version}</version>
  5. </dependency>

添加配置文件

  1. @Configuration
  2. public class JobConfig {
  3. @Bean //定义作业的具体实现方法和触发器的关联关系
  4. public JobDetail jobDetail(){
  5. return JobBuilder.newJob(MyJob.class)
  6. .storeDurably(true)
  7. .build();
  8. }
  9. @Bean //将作业和触发器关联到调度器中
  10. public Trigger trigger(){
  11. return TriggerBuilder.newTrigger()
  12. .forJob(jobDetail())
  13. .withSchedule(CronScheduleBuilder.cronSchedule("0 36 22 * * ?"))
  14. .build();//用cron来进行定时任务
  15. }
  16. }
  1. /**
  2. *定时器业务代码
  3. */
  4. public class MyJob extends QuartzJobBean {
  5. @Override
  6. protected void executeInternal(JobExecutionContext context)
  7. throws JobExecutionException{
  8. System.out.println("我是定时器quartz,准备运行..");//实现定时器功能
  9. }
  10. }

3.xxl-job

        XXL-JOB是一个分布式任务调度平台

docker安装:

配置docker-compose.yml文件

  1. version: '2'
  2. #自定义的docker网络
  3. networks:
  4. wn_docker_net:
  5. external: true
  6. services:
  7. xxl-job-compose:
  8. #读取Dockerfile
  9. #build:
  10. # context: .
  11. # dockerfile: Dockerfile文件名
  12. #镜像名称
  13. image: xuxueli/xxl-job-admin:2.3.1
  14. #容器名称
  15. container_name: xxl-job
  16. ports:
  17. - "9898:8080"
  18. environment:
  19. PARAMS: '--spring.datasource.url=jdbc:mysql://192.168.240.129:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
  20. --spring.datasource.username=root
  21. --spring.datasource.password=123'
  22. volumes:
  23. - /usr/local/software/xxl-job/logs:/data/applogs
  24. networks:
  25. wn_docker_net:
  26. ipv4_address: 172.18.12.100

用docker-compose命令安装xxl-job

 

通过该网址即可访问xxl-job平台

spring:

  中央仓库地址

  1. <!-- https://mvnrepository.com/artifact/com.xuxueli/xxl-job-core -->
  2. <dependency>
  3. <groupId>com.xuxueli</groupId>
  4. <artifactId>xxl-job-core</artifactId>
  5. <version>2.3.1</version>
  6. </dependency>

 yml文件配置

  1. #xxljob配置
  2. xxl:
  3. job:
  4. admin:
  5. addresses: http://192.168.240.129:9898/xxl-job-admin
  6. executor:
  7. appname: xxl-job-executor-sample
  8. port: 9777
  9. accessToken: default_token

配置类

  1. import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
  2. import lombok.extern.slf4j.Slf4j;
  3. import org.springframework.beans.factory.annotation.Value;
  4. import org.springframework.context.annotation.Bean;
  5. import org.springframework.context.annotation.Configuration;
  6. @Slf4j
  7. @Configuration
  8. public class XxlJobConfig {
  9. @Value("${xxl.job.admin.addresses}")
  10. private String address;
  11. @Value("${xxl.job.executor.appname}")
  12. private String appName;
  13. @Value("${xxl.job.executor.port}")
  14. private int port;
  15. @Value("${xxl.job.accessToken}")
  16. private String accessToken;
  17. @Bean
  18. public XxlJobSpringExecutor xxlJobSpringExecutor(){
  19. XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
  20. xxlJobSpringExecutor.setAccessToken(accessToken);
  21. xxlJobSpringExecutor.setAdminAddresses(address);
  22. xxlJobSpringExecutor.setAppname(appName);
  23. xxlJobSpringExecutor.setPort(port);
  24. log.debug("xxl-job初始化成功:{}",xxlJobSpringExecutor);
  25. return xxlJobSpringExecutor;
  26. }
  27. }

引入依赖后即可使用

使用注解即可实现定时任务

  1. import com.xxl.job.core.handler.annotation.XxlJob;
  2. import lombok.extern.slf4j.Slf4j;
  3. import org.springframework.stereotype.Component;
  4. @Component
  5. @Slf4j
  6. public class MyJobs {
  7. @XxlJob("helloXxl")
  8. public void helloXxlJob(){
  9. log.debug("hello,xxl-job");
  10. }
  11. }

通过注解和平台设置实现定时功能

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/83955?site
推荐阅读
相关标签
  

闽ICP备14008679号