【Spring Boot】定时任务

时间:2022-02-16 07:53:40

【Spring Boot】定时任务

测试用业务Service

package com.example.schedule.service;
import org.springframework.stereotype.Service;
@Service
public class UserService {
    public void syncUserData(){
        System.out.println("syncUserData");
    }
}

package com.example.schedule.service;
import org.springframework.stereotype.Service;
@Service
public class StudentService {
    public void syncStudentData(){
        System.out.println("syncStudentData");
    }
}

1、使用Spring的@Scheduled注解

使用@EnableScheduling注解启用Spring定时任务

package com.example.schedule;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling
public class ScheduleApplication {
    public static void main(String[] args) {
        SpringApplication.run(ScheduleApplication.class, args);
    }
}

定时方法

package com.example.schedule.scheduled_bean;
import com.example.schedule.service.StudentService;
import com.example.schedule.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class YcxScheduledBean {
    @Autowired
    UserService userService;
    @Autowired
    StudentService studentService;
    @Scheduled(cron="*/2 * * * * ?")
    public void syncData() {
        System.out.println(">>> YcxScheduledBean");
        userService.syncUserData();
        studentService.syncStudentData();
    }
}

2、使用quartz

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-quartz</artifactId>
</dependency>

继承QuartzJobBean

package com.example.schedule.job;

import com.example.schedule.service.StudentService;
import com.example.schedule.service.UserService;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.quartz.QuartzJobBean;

public class YcxSyncJob extends QuartzJobBean {
    @Autowired
    UserService userService;

    @Autowired
    StudentService studentService;
    @Override
    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
        System.out.println(">>> QuartzJobBean 同步任务");
        userService.syncUserData();
        studentService.syncStudentData();
    }
}