spring boot 定时任务@Scheduled(cron = ““)不可用时并且注入失败时——笔记

以下方案是本人使用定时任务时Service注入失败的解决方案

在 Spring Boot 中执行定时任务时,你可以注入并直接调用 Service 中的方法,就像在普通的业务逻辑中一样。

以下是执行定时任务时调用 Service 的步骤:

创建一个 Service 类,例如:

java 复制代码
@Service
public class MyService {
    public void doSomeTask() {
        // 你的业务逻辑
    }
}

创建一个定时任务类,通常实现 org.quartz.Job 接口,并注入你的 Service 类:

java 复制代码
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class MyScheduledJob implements Job {
    @Autowired
    private MyService myService;

    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        myService.doSomeTask();
    }
}

在 Spring Boot 应用的配置类中配置定时任务调度器,并关联定时任务类,如下所示:

java 复制代码
import org.quartz.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class QuartzConfig {

    @Bean
    public JobDetail myJobDetail() {
        return JobBuilder.newJob(MyScheduledJob.class)
                .withIdentity("myJob")
                .storeDurably()
                .build();
    }

    @Bean
    public Trigger myJobTrigger() {
        SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule()
                .withIntervalInSeconds(60) // 定时任务执行间隔
                .repeatForever();

        return TriggerBuilder.newTrigger()
                .forJob(myJobDetail())
                .withIdentity("myTrigger")
                .withSchedule(scheduleBuilder)
                .build();
    }
        //@Bean
    //public Trigger MemberJobTrigger() {
    //    SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule()
    //            .withIntervalInSeconds(10) // 定时任务执行间隔
    //            .repeatForever();
    //
    //    return TriggerBuilder.newTrigger()
    //            .forJob(MemberJobDetail())
    //            .withIdentity("trigger")
    //            .withSchedule(scheduleBuilder)
    //            .build();
    //}
    @Bean
    public Trigger MemberJobTrigger() {
        // 使用 CronScheduleBuilder 创建一个每天凌晨0点的触发器
        CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.dailyAtHourAndMinute(0, 0);

        return TriggerBuilder.newTrigger()
                .forJob(MemberJobDetail())
                .withIdentity("trigger")
                .withSchedule(scheduleBuilder)
                .build();
    }
}

配置完成后,定时任务将在每次触发时执行 MyScheduledJob 中的 execute 方法,该方法内部调用 MyService 的方法。

启动 Spring Boot 应用,定时任务会根据配置定时执行 MyService 中的方法。

确保你的 Spring Boot 应用正确配置了定时任务,并且定时任务与 Service 正确关联。根据上述示例,你可以根据自己的需求自定义 Service 中的方法和定时任务的调度策略。

相关推荐
wn53121 分钟前
【Go - 类型断言】
服务器·开发语言·后端·golang
青椒大仙KI1124 分钟前
24/9/19 算法笔记 kaggle BankChurn数据分类
笔记·算法·分类
bjzhang7531 分钟前
SpringBoot开发——集成Tess4j实现OCR图像文字识别
spring boot·ocr·tess4j
flying jiang36 分钟前
Spring Boot 入门面试五道题
spring boot
小菜yh37 分钟前
关于Redis
java·数据库·spring boot·redis·spring·缓存
希冀12344 分钟前
【操作系统】1.2操作系统的发展与分类
后端
liangbm31 小时前
数学建模笔记——动态规划
笔记·python·算法·数学建模·动态规划·背包问题·优化问题
GoppViper1 小时前
golang学习笔记29——golang 中如何将 GitHub 最新提交的版本设置为 v1.0.0
笔记·git·后端·学习·golang·github·源代码管理
Charles Ray2 小时前
C++学习笔记 —— 内存分配 new
c++·笔记·学习
重生之我在20年代敲代码2 小时前
strncpy函数的使用和模拟实现
c语言·开发语言·c++·经验分享·笔记