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


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

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

    创建一个 Service 类,例如:

    @Service
    public class MyService {
        public void doSomeTask() {
            // 你的业务逻辑
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

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

    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();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

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

    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();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52

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

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

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

  • 相关阅读:
    Solidity之变量数据存储和作用域
    MySQL数据库
    Guitar Pro 8win10最新版吉他学习 / 打谱 / 创作
    传统的回调函数与 ES6中的promise回调以及 ES7 的async/await终极的异步同步化
    初步认识泛型
    cloc工具统计代码量
    01目标检测-问题引入
    使用html+css实现一个静态页面【传统文化茶带音乐6页】HTML学生个人网站作业设计
    农村污水处理站如何实现数据采集和远程监控?
    WordPress供求插件API文档:用户登录
  • 原文地址:https://blog.csdn.net/wyg1756/article/details/134206941