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

相关推荐
路在脚下@1 小时前
spring boot的配置文件属性注入到类的静态属性
java·spring boot·sql
啦啦右一1 小时前
Spring Boot | (一)Spring开发环境构建
spring boot·后端·spring
森屿Serien1 小时前
Spring Boot常用注解
java·spring boot·后端
吉大一菜鸡2 小时前
FPGA学习(基于小梅哥Xilinx FPGA)学习笔记
笔记·学习·fpga开发
苹果醋32 小时前
React源码02 - 基础知识 React API 一览
java·运维·spring boot·mysql·nginx
盛派网络小助手3 小时前
微信 SDK 更新 Sample,NCF 文档和模板更新,更多更新日志,欢迎解锁
开发语言·人工智能·后端·架构·c#
∝请叫*我简单先生3 小时前
java如何使用poi-tl在word模板里渲染多张图片
java·后端·poi-tl
荆州克莱4 小时前
mysql中局部变量_MySQL中变量的总结
spring boot·spring·spring cloud·css3·技术
CCSBRIDGE4 小时前
Magento2项目部署笔记
笔记
zquwei5 小时前
SpringCloudGateway+Nacos注册与转发Netty+WebSocket
java·网络·分布式·后端·websocket·网络协议·spring