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

相关推荐
Asthenia0412几秒前
为什么MySQL关联查询要“小表驱动大表”?深入解析与模拟面试复盘
后端
南雨北斗3 分钟前
分布式系统中如何保证数据一致性
后端
Asthenia04127 分钟前
Feign结构与请求链路详解及面试重点解析
后端
左灯右行的爱情10 分钟前
缓存并发更新的挑战
jvm·数据库·redis·后端·缓存
brzhang14 分钟前
告别『上线裸奔』!一文带你配齐生产级 Web 应用的 10 大核心组件
前端·后端·架构
shepherd11115 分钟前
Kafka生产环境实战经验深度总结,让你少走弯路
后端·面试·kafka
袋鱼不重28 分钟前
Cursor 最简易上手体验:谷歌浏览器插件开发3s搞定!
前端·后端·cursor
嘻嘻哈哈开森30 分钟前
Agent 系统技术分享
后端
用户40993225021231 分钟前
异步IO与Tortoise-ORM的数据库
后端·ai编程·trae
会有猫36 分钟前
LabelStudio使用阿里云OSS教程
后端