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 中的方法和定时任务的调度策略。

相关推荐
想用offer打牌5 小时前
虚拟内存与寻址方式解析(面试版)
java·后端·面试·系统架构
無量5 小时前
AQS抽象队列同步器原理与应用
后端
五阿哥永琪5 小时前
RedisTemplate、StringRedisTemplate、RedisIndexedSessionRepository之间的区别?
spring boot
9号达人5 小时前
支付成功订单却没了?MyBatis连接池的坑我踩了
java·后端·面试
用户497357337985 小时前
【轻松掌握通信协议】C#的通信过程与协议实操 | 2024全新
后端
草莓熊Lotso5 小时前
C++11 核心精髓:类新功能、lambda与包装器实战
开发语言·c++·人工智能·经验分享·后端·nginx·asp.net
EniacCheng6 小时前
【RUST】学习笔记-整型
笔记·学习·rust
断剑zou天涯6 小时前
【算法笔记】树状数组IndexTree
java·笔记·算法
计算机毕设指导66 小时前
基于微信小程序的鸟博士系统【源码文末联系】
java·spring boot·mysql·微信小程序·小程序·tomcat·maven
追逐时光者6 小时前
精选 8 个 .NET 开发实用的类库,效率提升利器!
后端·.net